#About


MQ : 누군가 80번 포트를 통해 나의 중요한 파일을 삭제했다.

MEQ : Someone defaced my system via 80 port and deleted very important file of mine.

Hint : METHOD vulnerability. check the contents of uploaded file.




#Solution


포트번호 80이면 http 프로토콜이며 파일을 삭제했다고 하여 제일 먼저 떠오른건 http method 중 delete였다.


하지만 패킷 분석 스크립트에서 method가 delete인 패킷을 검색해보았으나 나오지 않았고 


최소 GET과 POST는 아니라고 생각이 들어 다음과 같이 스크립트를 작성해 보았다


# -*- coding:utf-8 -*-

'''
Author : Loddy
Date : 2018-03-21 (UTC + 09 : 00)
Purpose : To Analyzing Packet
'''


import socket
import dpkt
import datetime

def mac_addr(address):
return ':'.join('%02x' % ord(mac) for mac in address)

def extract(pcap):
for timestamp,data in pcap:
try:
eth = dpkt.ethernet.Ethernet(data)
ip = eth.data
tcp = ip.data
src,dst = socket.inet_ntoa(ip.src),socket.inet_ntoa(ip.dst)
http = dpkt.http.Request(tcp.data)
if tcp.dport==80 and (http.method!="GET" and http.method!="POST") and len(tcp.data)>=0:
print "[+] Method : ",http.method
print "[+] Timestamp : ",datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
print "[+] MAC Address : ",mac_addr(eth.src), ' --> ', mac_addr(eth.dst)
print "[+] IP Address : ",src+" --> "+dst
print "[+] Data : ",data
except:
pass

def main():
p = open('C:/2013_Hack_The_Packet_Online_PreQUAL_PROB.pcap','rb')
pcap = dpkt.pcap.Reader(p)
extract(pcap)

if __name__=='__main__':
main()


위 스크립트를 실행하면 아래와 같이 OPTIONS와 PUT method를 확인할 수 있다


[그림 1] - HTTP METHOD 필터링을 통한 패킷 확인


확인된 패킷의 METHOD 정보가 두 패킷 밖에 없으므로 아래와 같이 와이어샤크에 METHOD 필터식을 이용하여 확인 결과 플래그를 확인할 수 있었다


[그림 2] - HTTP METHOD 필터링 식을 통한 패킷 확인


패킷을 확인 후 스트림을 따라가 확인해보았더니 문제에서 요구하는 파일을 삭제한 범인을 확인할 수 있었다.


[그림 3] - 플래그 값 확인


FLAG = W26d@v@ttack



'Wargame' 카테고리의 다른 글

[LINUX] 2012 Secuwave F100  (0) 2018.09.15
[SCENARIO] CFReDS_ data leakage case  (0) 2018.07.19
2013 [Hack The Packet] L_01  (0) 2018.03.21
2011 [Hack The Packet] L_03  (0) 2018.03.21
2011 [Hack The Packet] L_01  (0) 2018.03.14

#About


LQ. telnet은 다보여...

LEQ : telnet

Hint : Key is telnet Password


주어진 문제에서 요구하는 것은 단순히 텔넷통신을 한 패킷을 찾는 것임


+ 텔넷은 데이터가 암호화 기능이 없으므로 SSH를 사용하는 것을 권장.




#Solution


# -*- coding:utf-8 -*-

import socket
import dpkt
import datetime

def mac_addr(address):
return ':'.join('%02x' % ord(mac) for mac in address)

def extract(pcap):
for timestamp,data in pcap:
try:
eth = dpkt.ethernet.Ethernet(data)
ip = eth.data
tcp = ip.data
src,dst = socket.inet_ntoa(ip.src),socket.inet_ntoa(ip.dst)
if tcp.dport==23 or tcp.sport==23 and len(tcp.data)>=0:
# request = dpkt.http.Request(tcp.data)
print "[+] Timestamp : ",datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
print "[+] MAC Address : ",mac_addr(eth.src), ' --> ', mac_addr(eth.dst)
print "[+] IP Address : ",src+" --> "+dst
print "[+] Data : ",data
print "\n",
except:
pass

def main():
p = open('C:/2013_Hack_The_Packet_Online_PreQUAL_PROB.pcap','rb')
pcap = dpkt.pcap.Reader(p)
extract(pcap)

if __name__=='__main__':
main()

텔넷 통신이므로 텔넷의 포트번호에 해당하는 23번을 기준으로 출발지 또는 도착지가 23번인 즉, 


텔넷과 관련된 모든 패킷을 필터링 했을 경우 아래와 같은 결과를 확인할 수 있다


[그림 1] - 포트번호를 기준으로 한 패킷 분석 결과


(위 그림에서 확인할 수 있는 Data 필드의 값이 깨진 이유를 아는 분 댓글로 적어주시면 감사하겠습니다...!!)


위 그림에서 확인할 수 있듯 IP 주소 192.168.163.1에서 192.168.163.154에 패킷을 전송하는 것을 확인할 수 있다


따라서 위 IP를 기준으로 아래와 같이 와이어 샤크에 패킷 필터링을 했을 경우 아래와 같이 TELNET 패킷을 확인할 수 있다


[그림 2] - 패킷 필터식을 통한 패킷 확인


위 그림에서 확인할 수 있듯 TELNET을 사용하여 데이터를 주고 받는 것이 보이며 TELNET은 암호화가 되지 않는다고 앞서 언급했기 때문에 패킷이 원문으로 보일 것이므로 위 TELNET 패킷의 TCP 흐름을 따라가 보았더니 아래와 같이 플래그를 확인할 수 있었다.


[그림 3] - 플래그 값 확인


FLAG = HTPLEO!!!

'Wargame' 카테고리의 다른 글

[SCENARIO] CFReDS_ data leakage case  (0) 2018.07.19
2013 [Hack The Packet] M_01  (0) 2018.03.21
2011 [Hack The Packet] L_03  (0) 2018.03.21
2011 [Hack The Packet] L_01  (0) 2018.03.14
[FEDORA CORE 4] Dark_stone > Cruel  (0) 2017.12.29

#About


L_03

Q : 착이가 POC 사이트에 접속했을 때, 웹서버의 시간은?

EQ : What time is web server when ChackYi visited POC site.

Key Format : Thur, 3 Nov 2011 09:00:00 GMT


주어진 지문에서 찾아야하는 것은 POC 사이트에 접속했을 때의 시간대 이므로 패킷 분석을 통해 


http 헤더의 Host 필드에 POC 사이트를 의미하는 http://www.powerofcommunity.net/을 확인하면 된다




#Solution


# -*- coding:utf-8 -*-

import socket
import dpkt
import datetime

def mac_addr(address):
return ':'.join('%02x' % ord(mac) for mac in address)

def extract(pcap):
for timestamp,data in pcap:
try:
eth = dpkt.ethernet.Ethernet(data)
ip = eth.data
tcp = ip.data
src,dst = socket.inet_ntoa(ip.src),socket.inet_ntoa(ip.dst)

if tcp.dport==80 and len(tcp.data)>=0:
# request = dpkt.http.Request(tcp.data)
print "[+] Timestamp : ",datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
print "[+] MAC Address : ",mac_addr(eth.src), ' --> ', mac_addr(eth.dst)
print "[+] IP Address : ",src+" --> "+dst
print "[+] Host : ",data[data.find("Host")+5:data.find("Connection")].replace(data[data.find("User-Agent"):data.find("Keep-Alive:")+15],'')
except:
pass

def main():
p = open('C:/2011_HTP_PreQual_PROB.pcap','rb')
pcap = dpkt.pcap.Reader(p)
extract(pcap)

if __name__=='__main__':
main()


위 코드를 실행하게 되면 아래와 같이 Host 필드에서 powerofcoummunity.net을 확인할 수 있다


[그림 1] - Host 필드 확인을 통한 패킷 정보 확인


위에서 확인할 수 있듯 Host 정보로 poc를 가지는 IP 주소를 기반으로 아래와 같이 와이어샤크에 필터링을 걸었더니

 

HTTP 프로토콜의 GET 방식을 통해 패킷을 전달하는 것을 확인할 수 있었다


[그림 2] - IP 기반 패킷 필터식을 통한 패킷 확인


해당 패킷의 TCP 흐름을 따라가 보았더니 아래와 같이 문제에서 요구하는 서버의 시간을 확인할 수 있었다


[그림 3] - 플래그 값 확인




파이썬을 사용하지 않고 와이어샤크에서 제공하는 필터링 기능으로만 찾고자 하면 아래와 같은 필터식을 통해서도 찾을 수 있다.


[그림 4] - host 정보를 찾기 위한 패킷 필터식



'Wargame' 카테고리의 다른 글

2013 [Hack The Packet] M_01  (0) 2018.03.21
2013 [Hack The Packet] L_01  (0) 2018.03.21
2011 [Hack The Packet] L_01  (0) 2018.03.14
[FEDORA CORE 4] Dark_stone > Cruel  (0) 2017.12.29
[MEMORY] 2012 Nuit Du hack > Password Manager 2  (0) 2017.12.28

+ Recent posts