1. 문제 의도 파악
우선 v5 값이 0xDEADBEEF일 때 쉘을 획득할 수 있으니 v5 값을 변경하면 된다.
어떻게 값을 변경할 수 있을까 찬찬히 살펴보니 다음과 같은 결론이 나왔다.
우선 gets 함수로 배열 s에 입력을 받고 있는데, 배열의 크기인 40보다 더 큰 45 바이트로 입력을 받고 있다.
따라서 buffer overflow 공격을 통해 배열 s를 넘치게 해서 v5 값을 변경할 수 있을 것이다.
2. offset 구하기
디버깅을 하지 않고 ida를 통해 간단하게 offset을 얻었다.
배열 s의 주소가 ebp-52이고 v5의 주소가 ebp-12이니, offset은 40이다.
따라서 40만큼을 dummy 값으로 채우고 그 이후부터 0xDEADBEEF(변경해야 할 값)로 채우면 된다.
payload는 그래서 "A"*40+"\xEF\xBE\xAD\xDE"가 될 것이다.
3. pwntools를 이용해 payload 작성하기
payload를 "A"*40 + "0xdeadbeef" 형태로 작성한다.
그리고 난 뒤 payload를 p 객체에 보낸다.
p.interactive() 빼먹지 말기!
방금 만든 bof_basic.py를 실행 해 쉘을 획득하고 flag 까지 획득하였다!!
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] x64 Simple_size_BOF (0) | 2021.03.19 |
---|---|
[HackCTF] Basic_FSB (0) | 2021.03.19 |
[HackCTF] Basic_Bof #2 (0) | 2021.03.19 |
[HackCTF] Basic_Bof - Simple_Overflow_ver_2 (0) | 2021.03.13 |
[HackCTF] Basic_Bof - 내 버퍼가 흘러넘친다!!! (0) | 2021.03.11 |