Load of the BOF 문제를 풀어보기로 했다.

1번 문제인 gremlin 이다.

 

보아하니 argv에 입력받은 내용을 strcpy로 buffer에 복사하는 코드이다.

strcpy로 값을 복사하니 bof가 일어날 것이다.

buffer에 쉘코드를 넣고 ret 주소를 다시 buffer의 주소로 가리키면 될 것이다.

buffer의 사이즈는 256, sfp(4)를 더해 260칸이므로 쉘코드를 제외한 나머지 칸들을 NOP sled로 채워주면 될 것이다.

 

strcpy가 실행된 부분인 main+59에 bp를 걸고, A를 넣어서 어디서부터 buffer가 입력이 되는지 확인해보자.

 

보다시피 0xbffff918 부터 입력이 된다.

 

따라서 쉘코드가 깨지지 않게 적당히 NOP sled를 넣고, 쉘코드를 넣고, NOP sled를 다시 넣고 ret 주소를 0xbffff918로 적어주면 쉘코드가 실행될 것이다.

 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

 

쉘코드는 24바이트 쉘 코드를 사용할 것이다.

즉, 260 - 24 = 236 만큼 앞 뒤로 NOP sled를 써주자.

그리고 그 뒤의 ret 주소에 0xbffff918를 리틀엔디안 형식으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hello bof world

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 2번 - cobolt  (0) 2020.08.16
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18

+ Recent posts