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密码的更多相关文章

  1. 方便john破解linux密码批处理

    Title:方便john破解linux密码批处理 -- 2011-11-23 17:31 自定义文件HASH名和字典名批处理(单一文件): @echo offcolor 0asetlocal enab ...

  2. kali 使用John破解zip压缩包的密码

    kali  使用John破解zip压缩包的密码 准备工具: zip压缩包带密码   1个 kali Linux机器       1个 操作步骤: 首先将压缩包上传至kali机器,然后使用zip2joh ...

  3. 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 ...

  4. 破解Linux系统开机密码

    在我们使用Linux虚拟机的时候,经常会忘记自己设置的开机密码,无奈之下只有重新建一个虚拟机,然而新建往往会浪费掉我们很多时间,这时候,知道如何破解Linux系统密码就显得很重要了. 下面我们使用bo ...

  5. Linux之RHEL7root密码破解(三)

    Linux系列root密码破解第三种方式,利用修改boot分区里的开机启动顺序来修改密码,即我们进入BIOS,修改boot启动顺序为CD-ROM: 接下来按F10保存退出 选择Troubleshoot ...

  6. Linux之RHEL7root密码破解(一)

    很多时候我们都会有这样的经历,各种密码,各种复杂,忘记了怎么办???Windows的有关密码忘记了是可以通过相关的邮箱啊手机号等等是可以 找回的,那么Linux的root密码忘记了,该怎么办呢?那么接 ...

  7. john破解kali密码

    实验环境:kali 实验工具:john 所用命令: 1.查看/etc目录下的shadow文档,此文档记录了所有用户的用户名及密码hash值 2.使用命令echo 用户名:密码 > shadow, ...

  8. 掌上电脑设备可以使用Ubuntu MATE 18.10 Linux映像了

    就在几天前,Ubuntu 18.10发布了.操作系统被称为“Cosmic Cuttlefish”,有多种版本可供选择,除了常见的GNOME -- Xfce (Xbuntu), KDE (Kubuntu ...

  9. [20171213]john破解oracle口令.txt

    [20171213]john破解oracle口令.txt --//跟别人讨论的oracle破解问题,我曾经提过不要使用6位字符以下的密码,其实不管那种系统低于6位口令非常容易破解.--//而且orac ...

随机推荐

  1. C++ STL之map常用指令

    只记载本人在ACM中常用的函数. map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力. map内部为一颗 ...

  2. C++ STL之string常用指令

    string,大小可变的字符串,有些类似于C中的字符数组. 只记载本人在ACM中常用的函数,并且全部经过程序测试. 1.初始化 string s1;——默认构造函数s1为空串 string s2(s1 ...

  3. GMU

    NEXT | 不错过任何一个新产品 百度开源 Mobile UI 组件库,提供 Web app.Pad 端简单易用的 UI 组件 发表评论

  4. K - Rochambeau - poj2912(类似食物链)

    一群小孩玩一个简单石头布布游戏,这些小孩会分成三组(组内可能没有人)+一个自由人(比翻译成裁判合理多了),同一组的小孩只会出同一种手势(不会变的),不过裁判可以出任意的手势,这些小孩能就会相互猜拳玩, ...

  5. I - Navigation Nightmare-poj 1984

    约翰和他的邻居生活在一个村庄里,他们的道路修建的很特别,都是正东正西或者正南正北,但是呢他们用一种方式描述他们和邻居的位置,比如说 6号 在1号 东面13处,那么我们就可以计算出来这两家的曼哈顿距离, ...

  6. mvc系统过滤器

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  7. 2份能用的log4j.xml

    1 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration ...

  8. 启动android默认浏览器

    一.启动android默认浏览器 Intent intent = new Intent();         intent.setAction("android.intent.action. ...

  9. 【开源项目】Android 手写记事 App(半成品)

    该项目已上传到 CSDN 的 Git 平台中 项目地址:https://code.csdn.net/gd920129/whiteboard GIT SSH:git@code.csdn.net:gd92 ...

  10. Underscore.js 常用类型判断以及一些有用的工具方法

    1. 常用类型判断以及一些有用的工具方法 underscore.js 中一些 JavaScript 常用类型检查方法,以及一些工具类的判断方法. 首先我们先来谈一谈数组类型的判断.先贴出我自己封装好的 ...