profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 3. 4. 14:03

1. 문제 의도 파악

문제에 나와있던 basic_bof 파일을 ida로 띄운 것이다.

우선 v5 값이 0xDEADBEEF일 때 쉘을 획득할 수 있으니 v5 값을 변경하면 된다.

어떻게 값을 변경할 수 있을까 찬찬히 살펴보니 다음과 같은 결론이 나왔다.

우선 gets 함수로 배열 s에 입력을 받고 있는데, 배열의 크기인 40보다 더 큰 45 바이트로 입력을 받고 있다.

따라서 buffer overflow 공격을 통해 배열 s를 넘치게 해서 v5 값을 변경할 수 있을 것이다.

 

 

2. offset 구하기

v5의 주소는 ebp-12

 

 

배열 s의 주소는 ebp-52

디버깅을 하지 않고 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
복사했습니다!