User Account Extraction from /etc/shadow

Setelah mendapatkan file berisi account dan password yang berasal dari mesin bersistem operasi linux, maka langkah selanjutnya adalah melakukan password cracking.

Misalnya, kita hanya akan melakukan attack pada user account saja, tidak pada service account. Sebagaimana kita ketahui bahwa account pada /etc/shadow merupakan gabungan keduanya, sebagaimana gambar berikut ini:

Screen Shot 2016-02-23 at 1.27.23 PM

Pada gambar diatas, terlihat ada service account seperti sshd (baris nomor – 39), dan beberapa user account seperti pada baris no – 52 hingga 54.

Untuk memilah user account dari file /etc/shadow, marilah kita mencoba mempelajari file tersebut lebih dahulu. File ini hanya bisa diakses oleh root dan password-nya di-hash dengan SHA512. Dimana format penulisan pada file tersebut adalah sebagai berikut:

Screen Shot 2016-02-23 at 2.51.19 PM

Pada contoh user account “budi” diatas terdiri dari sembilan field yang dipisahkan oleh titik dua atau “:“. Kesembilan field tersebut yaitu:

<Field – 1> Login name: “budi”

<Field – 2> Encrypted password, sebagaimana gambar dibawah ini:

Screen Shot 2016-02-23 at 3.18.01 PM

<Field – 3> Tanggal perubahan terakhir dari password, yaitu: 16854

<Field – 4>Minimum password age: 0, angka nol maksudnya tidak ada minimum usia password.

<Field – 5> Maximum password age:0, angka nol maksudnya tidak ada maksimum usia password

<Field -6>Password warning period: 0, angka nol maksudnya tidak ada warning periode

<Field – 7> Password inactivity periode

<Field – 8> Account expiration date

<Field – 9> Reserved field untuk kebutuhan masa depan

Dari kesembilan field diatas, tentu yang terkait dengan pekerjaan kita adalah field yang kedua, yaitu password. Untuk itu, mari kita perhatikan lebih detail format dari password tersebut. Sesungguhnya format password terdiri dari tiga komponen, yaitu:

$id$salt$encrypted

  • $id : adalah nomor yang mengidentifikasi metode hash yang digunakan, dimana dalam kasus kita $id adalah $6, atau SHA-512. Adapun hash method yang di-support sebagaimana tabel dibawah ini:

Screen Shot 2016-02-23 at 3.40.00 PM

  • $salt: adalah random data yang digunakan sebagai input untuk membuat hash, dimana untuk kasus kita salt-nya adalah: OnWl/Z7b
  • $encrypted: adalah password yang dalam format hash, dimana untuk dalam kasus kita adalah sebagaimana gambar dibawah ini:

Screen Shot 2016-02-23 at 3.51.16 PM

Berdasarkan pemahaman terhadap format file /etc/shadow, kita akan memilah dan hanya memilih user account saja. Maka berikut ini adalah langkah-langkah yang akan kita tuangkan pada script kita:

  1. Membaca file /etc/shadow
  2. Memilah setiap account pada /etc/shadow
  3. Membuat setiap baris user account pada file /etc/shadow menjadi sembilan kolom
  4. Melakukan seleksi user account, yaitu account yang hash-nya tanpa tanda ‘*‘, ‘!‘ dan ‘x‘. Adanya ketiga karakter tersebut pada hash, merupakan ciri service account.
  5. Melakukan variable assigment dari user account, yaitu field pertama
  6. Melakukan variable assignment dari hash, yaitu field kedua
  7. Mencetak daftar user account yang akan menjadi target password cracking

Ketujuh langkah tersebut apabila dituangkan kedalam script maka terlihat sebagaimana gambar berikut ini:

Screen Shot 2016-02-24 at 10.30.15 PM

Adapun hasil pemilihan dan pemisahan user account dari file /etc/shadow adalah sebagaimana gambar berikut dibawah ini:

Screen Shot 2016-02-24 at 10.32.18 PM

Cracking /etc/shadow

#code snippet for account extraction from /etc/shadow