yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

FTZ level15 풀이 본문

wargame 풀이/FTZ

FTZ level15 풀이

yehey 2020. 9. 29. 13:39
id: level15
pw: guess what

이번에도 hint를 읽으면서 시작해보장

 

level 14와 굉장히 비슷한 코드가 attackme의 코드로 나왔다.

level14와 다른 점이 있다면 check가 포인터 변수라는 것!

그리고 조건문에서 check가 가리키는 값이 0xdeadbeef여야 한다는 점만 다르다!

따라서 check에 0xdeadbeef가 저장되어있는 주소를 넣어주어야한다.

 

우선 main함수를 디스어셈블 해서 스택 구조를 파악해보자

 

level14와 거의 똑같기 때문에 어셈블리어를 따로 해석하지는 않을 예정

( 2020/09/28 - [wargame 풀이/FTZ] - FTZ level14 풀이 요기에 있음)

 

이를 바탕으로 그려본 스택 구조는 다음과 같다 (얘도 사실 level14와 똑같음,,)

따라서 check 전까지 40바이트를 채워주고, check 자리에 0xdeadbeef를 가리키는 주소를 넣어주면 된다.

그러려면 0xdeadbeef를 가리키는 주소를 찾아야 하는데,

main+32에서 *check와 0xdeadbeef를 직접적으로 비교한다. (레지스터를 사용하지 않고 있음)

 

여기서 0xdeadbeef가 main 어딘가에 하드코딩되어 있다는 것을 알 수 있다.

(=메모리 어딘가에 0xdeadbeef가 저장되어 있고 그 주소를 찾아야한다)

 

그래서 main+32에 해당하는 주소(0x080484b0)에서 값을 조금씩 출력시켜보았다. 

(main+32에서 처음으로 0xdeadbeef가 나와서 넣어보았음)

 

deadbeef가 보이기는 하는데, 완벽한 주소는 아닌 것 같아 1씩 늘려가며 출력해보았다.

그리고 0x080484b2가 0xdeadbeef가 담겨있는 주소라는 것을 알아냈다!

 

이제 payload를 작성해보자

payload: (python -c 'print "A"*40+"\xb2\x84\x04\x08"';cat)|./attackme

level16 권한으로 쉘이 실행되었다.

level16의 패스워드를 알아내보자

 

level16의 pw: "about to cause mass"

'wargame 풀이 > FTZ' 카테고리의 다른 글

FTZ level17 풀이  (0) 2020.09.30
FTZ level16 풀이  (0) 2020.09.30
FTZ level14 풀이  (0) 2020.09.28
FTZ level13 풀이  (0) 2020.09.27
FTZ level12 풀이  (0) 2020.09.25
Comments