jam 블로그

[bof 원정대] nightmare -> xavius (fgets, destroyer) 본문

해킹/시스템

[bof 원정대] nightmare -> xavius (fgets, destroyer)

kid1412 2012. 3. 31. 17:57
728x90
다음 문제소스입니다.

 [그림 1] xavius.c

소스분석
1.  buffer의 크기는 40
2. fgets로 글자를 받아 256만큼 buffer에 넣는다
3. buffer+47값이 \xbf, \x08이면 안됨.
4. buffer의 44번째 이후의 4byte를 ret_addr에 복사
5. 메모리 검사하여 leave,ret 주소값이 있으면 안됨.
6. memset으로 리턴값 제외하고 전부다 초기화 


풀기위한 과정입니다.

0. bash2
1. read함수의 buffer 주소값 구하기
2. bof 공격 

 
0. 공격방식

buffer에 넣을만한 곳은 죄다 초기화 되므로 fgets를 써서 공격을 합니다.
 fgets는 read 함수를 쓰는데 이때 read함수가 쓰는 buffer를 공략하면 됨니다. 

공격맵 
[buffer        +  sfp                   ] [read함수가 쓰이는 주소값] [입력 받을수 있는 명령어]
[nop 27byte + shellcode 17byte]


1. read 함수의 buffer 주소값 구하기

 [그림 2] read함수 후에 0x40015000을 쓰는모습.

strace 명령어로 복사본파일을 실행시키면 위와같이 read함수가 0x40015000을 사용합니다. 


2. bof 공격

 [그림 3] bof 공격

 
Comments