본문 바로가기

[Pwnable] 해커스쿨 FTZ

[해커스쿨 FTZ] level16

level16 이다. 고지가 얼마 남지 않았다!

로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다.

 

코드를 분석해보자.

call 포인터 함수에 저장되어있는 printit 함수를 호출하는 코드이다. 이 printit 함수를 shell 함수로 바꾸어 저장한다면 마지막에 shell 함수가 호출되면서 다음 암호가 나올 것 같다.

그렇다면 해야 할 것은 ⓐbuf 와 *call 까지의 거리를 알아내고 ⓑshell 함수의 주소를 알아내 ⓒ그 주소를 *call위치에 넣어주면 될것이다.

 

gdb로 정확하게 분석을 해보자.

 

일단 main 함수를 뜯어보자.

buf 와 *call 사이의 거리 = 56 - 16 = 40 이다.

( buf ~ ret, *call ~ ret 사이의 거리는 둘다 4 이므로 결과에 관련이 없다.)

 

이제 shell 함수의 주소를 찾아보자.

0x080484d0 임을 확인했다.

P 명령어로도 아래와 같이 확인 할 수 있다.

 

알아야 할 건 다 알았으니 이제 *call 위치에 0x080484d0을 넣는 페이로드를 작성하자. 

 

(python -c 'print "\x90"*40+"\xd0\x84\x04\x08"'; cat) | ./attackme

 

짜잔

 

level17 암호 : king poetic

'[Pwnable] 해커스쿨 FTZ' 카테고리의 다른 글

[해커스쿨 FTZ] level18  (0) 2020.03.12
[해커스쿨 FTZ] level17  (0) 2020.03.12
[해커스쿨 FTZ] level15  (0) 2020.03.12
[해커스쿨 FTZ] level14  (0) 2020.03.12
[해커스쿨 FTZ] level13  (0) 2020.03.12