使用john破解ubuntu(linux)9.10密码
Title:使用john破解ubuntu(linux)9.10密码 --2011-11-23 15:00
ubuntu 9.10的账户密码加密方式改用sha512了,默认的john是破不了的,还好官方有补丁。
首先解压缩john1.75的源代码,vi编辑Makefile文件,添加我下面标注好的红色字体
LDFLAGS = -s -lcrypt
JOHN_OBJS_MINIMAL = \
DES_fmt.o DES_std.o DES_bs.o \
BSDI_fmt.o \
MD5_fmt.o MD5_std.o \
BF_fmt.o BF_std.o \
AFS_fmt.o \
LM_fmt.o \
batch.o bench.o charset.o common.o compiler.o config.o cracker.o \
crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o \
loader.o logger.o math.o memory.o misc.o options.o params.o path.o \
recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o \
unshadow.o \
unafs.o \
unique.o \
crypt_fmt.o
然后新建一个crypt_fmt.c文件,代码如下/* public domain proof-of-concept code by Solar Designer */
#define _XOPEN_SOURCE /* for crypt(3) */
#include <string.h>
#include <unistd.h>
#include "arch.h"
#include "params.h"
#include "formats.h"
#define FORMAT_LABEL "crypt"
#define FORMAT_NAME "generic crypt(3)"
#define ALGORITHM_NAME "?/" ARCH_BITS_STR
#define BENCHMARK_COMMENT ""
#define BENCHMARK_LENGTH 0
#define PLAINTEXT_LENGTH 72
#define BINARY_SIZE 128
#define SALT_SIZE BINARY_SIZE
#define MIN_KEYS_PER_CRYPT 1
#define MAX_KEYS_PER_CRYPT 1
static struct fmt_tests tests[] = {
{"CCNf8Sbh3HDfQ", "U*U*U*U*"},
{"CCX.K.MFy4Ois", "U*U***U"},
{"CC4rMpbg9AMZ.", "U*U***U*"},
{"XXxzOu6maQKqQ", "*U*U*U*U"},
{"SDbsugeBiC58A", ""},
{NULL}
};
static char saved_key[PLAINTEXT_LENGTH + 1];
static char saved_salt[SALT_SIZE];
static char *crypt_out;
static int valid(char *ciphertext)
{
#if 1
int l = strlen(ciphertext);
return l >= 13 && l < BINARY_SIZE;
#else
/* Poor load time, but more effective at rejecting bad/unsupported hashes */
char *r = crypt("", ciphertext);
int l = strlen(r);
return
!strncmp(r, ciphertext, 2) &&
l == strlen(ciphertext) &&
l >= 13 && l < BINARY_SIZE;
#endif
}
static void *binary(char *ciphertext)
{
static char out[BINARY_SIZE];
strncpy(out, ciphertext, sizeof(out)); /* NUL padding is required */
return out;
}
static void *salt(char *ciphertext)
{
static char out[SALT_SIZE];
int cut = sizeof(out);
#if 1
/* This piece is optional, but matching salts are not detected without it */
switch (strlen(ciphertext)) {
case 13:
case 24:
cut = 2;
break;
case 20:
if (ciphertext[0] == '_') cut = 9;
break;
case 34:
if (!strncmp(ciphertext, "$1$", 3)) {
char *p = strchr(ciphertext + 3, '$');
if (p) cut = p - ciphertext;
}
break;
case 59:
if (!strncmp(ciphertext, "$2$", 3)) cut = 28;
break;
case 60:
if (!strncmp(ciphertext, "$2a$", 4)) cut = 29;
break;
}
#endif
/* NUL padding is required */
memset(out, 0, sizeof(out));
memcpy(out, ciphertext, cut);
return out;
}
static int binary_hash_0(void *binary)
{
return ((unsigned char *)binary)[12] & 0xF;
}
static int binary_hash_1(void *binary)
{
return ((unsigned char *)binary)[12] & 0xFF;
}
static int binary_hash_2(void *binary)
{
return
(((unsigned char *)binary)[12] & 0xFF) |
((int)(((unsigned char *)binary)[11] & 0xF) << 8);
}
static int get_hash_0(int index)
{
return (unsigned char)crypt_out[12] & 0xF;
}
static int get_hash_1(int index)
{
return (unsigned char)crypt_out[12] & 0xFF;
}
static int get_hash_2(int index)
{
return
((unsigned char)crypt_out[12] & 0xFF) |
((int)((unsigned char)crypt_out[11] & 0xF) << 8);
}
static int salt_hash(void *salt)
{
int pos = strlen((char *)salt) - 2;
return
(((unsigned char *)salt)[pos] & 0xFF) |
((int)(((unsigned char *)salt)[pos + 1] & 3) << 8);
}
static void set_salt(void *salt)
{
strcpy(saved_salt, salt);
}
static void set_key(char *key, int index)
{
strcpy(saved_key, key);
}
static char *get_key(int index)
{
return saved_key;
}
static void crypt_all(int count)
{
crypt_out = crypt(saved_key, saved_salt);
}
static int cmp_all(void *binary, int count)
{
return !strcmp((char *)binary, crypt_out);
}
static int cmp_exact(char *source, int index)
{
return 1;
}
struct fmt_main fmt_crypt = {
{
FORMAT_LABEL,
FORMAT_NAME,
ALGORITHM_NAME,
BENCHMARK_COMMENT,
BENCHMARK_LENGTH,
PLAINTEXT_LENGTH,
BINARY_SIZE,
SALT_SIZE,
MIN_KEYS_PER_CRYPT,
MAX_KEYS_PER_CRYPT,
FMT_CASE | FMT_8_BIT,
tests
}, {
fmt_default_init,
valid,
fmt_default_split,
binary,
salt,
{
binary_hash_0,
binary_hash_1,
binary_hash_2
},
salt_hash,
set_salt,
set_key,
get_key,
fmt_default_clear_keys,
crypt_all,
{
get_hash_0,
get_hash_1,
get_hash_2
},
cmp_all,
cmp_all,
cmp_exact
}
};
最后修改john.c文件,添加我下面标注的红色字体
extern struct fmt_main fmt_DES, fmt_BSDI, fmt_MD5, fmt_BF;
extern struct fmt_main fmt_AFS, fmt_LM;
extern struct fmt_main fmt_crypt;
john_register_one(&fmt_DES);
john_register_one(&fmt_BSDI);
john_register_one(&fmt_MD5);
john_register_one(&fmt_BF);
john_register_one(&fmt_AFS);
john_register_one(&fmt_LM);
john_register_one(&fmt_crypt);
现在可以编译了,选择好你的平台和CPU类型,能够提高破解速度,我这里用的是linux,X86架构,所以选择的是
linux-x86-sse2 Linux, x86 with SSE2 (best if 32-bit)
如果你和我一样,输入下面的红色字体
make linux-x86-sse2
现在实践下,可以发现能够破解了

摘自中国云安网(www.yunsec.net) 原文:http://www.yunsec.net/a/security/web/invasion/2010/0411/3284.html
使用john破解ubuntu(linux)9.10密码的更多相关文章
- 方便john破解linux密码批处理
Title:方便john破解linux密码批处理 -- 2011-11-23 17:31 自定义文件HASH名和字典名批处理(单一文件): @echo offcolor 0asetlocal enab ...
- kali 使用John破解zip压缩包的密码
kali 使用John破解zip压缩包的密码 准备工具: zip压缩包带密码 1个 kali Linux机器 1个 操作步骤: 首先将压缩包上传至kali机器,然后使用zip2joh ...
- How To Install Kernel 3.10 On Ubuntu, Linux Mint, Debian and Derivates
n this article I will show you how to install Linux Kernel 3.10 on Ubuntu 13.10 Saucy Salamander, Ub ...
- 破解Linux系统开机密码
在我们使用Linux虚拟机的时候,经常会忘记自己设置的开机密码,无奈之下只有重新建一个虚拟机,然而新建往往会浪费掉我们很多时间,这时候,知道如何破解Linux系统密码就显得很重要了. 下面我们使用bo ...
- Linux之RHEL7root密码破解(三)
Linux系列root密码破解第三种方式,利用修改boot分区里的开机启动顺序来修改密码,即我们进入BIOS,修改boot启动顺序为CD-ROM: 接下来按F10保存退出 选择Troubleshoot ...
- Linux之RHEL7root密码破解(一)
很多时候我们都会有这样的经历,各种密码,各种复杂,忘记了怎么办???Windows的有关密码忘记了是可以通过相关的邮箱啊手机号等等是可以 找回的,那么Linux的root密码忘记了,该怎么办呢?那么接 ...
- john破解kali密码
实验环境:kali 实验工具:john 所用命令: 1.查看/etc目录下的shadow文档,此文档记录了所有用户的用户名及密码hash值 2.使用命令echo 用户名:密码 > shadow, ...
- 掌上电脑设备可以使用Ubuntu MATE 18.10 Linux映像了
就在几天前,Ubuntu 18.10发布了.操作系统被称为“Cosmic Cuttlefish”,有多种版本可供选择,除了常见的GNOME -- Xfce (Xbuntu), KDE (Kubuntu ...
- [20171213]john破解oracle口令.txt
[20171213]john破解oracle口令.txt --//跟别人讨论的oracle破解问题,我曾经提过不要使用6位字符以下的密码,其实不管那种系统低于6位口令非常容易破解.--//而且orac ...
随机推荐
- freemarker的非空判断
${price} 判断非空写法就是 ${(price)!}
- [Java Concurrent] 多线程合作 wait / notifyAll 的简单案例
本案例描述的是,给一辆汽车打蜡.抛光的场景. Car 是一辆被打蜡抛光的汽车,扮演共享资源的角色. WaxOnCommand 负责给汽车打蜡,打蜡时需要独占整部车,一次打一部分蜡,等待抛光,然后再打一 ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- java笔记14之private
private: 1 是一个权限修饰符 2 可以修饰成员变量和成员方法 被其修饰的成员只能在本类中被访问 class Demo { //int num = 1 ...
- C++中的构造函数和析构函数
构造函数: 在类实例化对象时自动执行,对类中的数据进行初始化.构造函数可以从载,可以有多个,但是只能有一个缺省构造函数. 析构函数: 在撤销对象占用的内存之前,进行一些操作的函数.析构函数不能被重载, ...
- 高效JQuery编码
缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); ...
- word2vec浅析
本文是參考神经网络语言模型.word2vec相关论文和网上博客等资料整理的学习笔记.仅记录 自己的学习历程,欢迎拍砖. word2vec是2013年google提出的一种神经网络的语言模型,通过神经网 ...
- 从零开始写一个Tomcat(贰)--建立动态服务器
上文书说道如何通过http协议建立一个静态的服务器来访问静态网页,但我们选择tomcat最主要的原因还是因为它能动态的执行servlet,这边文章将引导你实现一个能够运行servlet的服务器,这个简 ...
- spring06Aop
1.实现前置增强 必须实现接口MethodBeforeAdvice接口 创建对应的文件 public interface Animal {//主业务接口 void eat(); //目标方法 void ...
- Autofac 一个使用Demo
一:接口 二:实现: 三:调用: 首先上图: 一:接口代码 public interface IPersonDa { PersonEntity Get(int id); } 二:实现 public c ...