4

从wireshark中提取文件

 2 years ago
source link: https://windard.com/blog/2016/05/15/Extract-File-From-Pcap
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

从wireshark中提取文件

2016-05-15

0x01 Fly

idf 实验室-包罗万象-捉到一只苍蝇

报告首长!发现一只苍蝇。。

在哪?

here!

卧槽?!好大一坨苍蝇。。



文件地址: http://pan.baidu.com/s/1bnGWbqJ

提取码:oe6w

PS:flag写错了,太麻烦也懒得改了,格式还是wctf{...},大家明白就好,不要在意这些细节。。

把文件下载下来,misc_fly.pcapng 是一个wireshark的数据包,用wireshark打开,首先过滤出http包,可以看到是一个qq邮箱的通信过程。

Filter:http

qqmail

既然是qq邮箱的通信过程,因为邮件的数据内容都是通过post请求发送的,那我们再看一下post请求发送了什么内容。

Filter:http && http.request.method==POST

postdata

有一个rar的压缩包文件,还有关于这个文件的一些信息。

{
    "path":"fly.rar",
    "appid":"",
    "size":525701,
    "md5":"e023afa4f6579db5becda8fe7861c2d3",
    "sha":"ecccba7aea1d482684374b22e2e7abad2ba86749",
    "sha3":""
}

看来我们需要做的就是将这个wireshark数据包中的文件提取出来,查看接下来的几个post请求,发现 midia type 都是数据流的格式,猜测这几个数据流里就是我们需要的文件。

streamdata

接连五个数据包都是数据流格式的post请求,分别是 163,289,431,577,729号数据包,而且每个数据包还标记了数据的大小,分别是 131436,131436,131436,131436,1777byte 。一共是 527521 个 byte,对比第一个数据包里提到的文件大小, (527521-525701)/5=364 也就是说将数据提取出来之后,每个数据包的部分还是会有一些其他的头部信息 364 byte 的部分需要去掉,然后再将5个文件合并成rar压缩文件。

首先让我们来提取文件,可以先选中 Media Type: application/octet-stream (131436 bytes) 的部分,然后在 File->Export Selected Packet Bytes 将数据包一个一个的导出,或者是在 File->Export Objects->HTTP 中选中那5个数据包文件,将其导出。

导出之后,将每个数据包的前364个byte的内容去掉。

dd if=1 bs=1 skip=364 of=1.1
dd if=2 bs=1 skip=364 of=2.1
dd if=3 bs=1 skip=364 of=3.1
dd if=4 bs=1 skip=364 of=4.1
dd if=5 bs=1 skip=364 of=5.1

dddata

然后合并文件,让我们看一下合并之后的文件的md5值是不是与前面提到的一致。

cat *.1>fly.rar catdata

md5 是 e023afa4f6579db5becda8fe7861c2d3,确实是与上面提到的一致,那接下来解密rar文件。

unrar x fly.rar catx.png

发现需要密码,并不知道密码,不过发现这个文件头有问题,网上搜了一下,发现是伪加密。

将文件头0x1674后面的84改为80。(84为加密,80/20不加密)

fakecrypto

现在就可以正常解压,解压结果是一个 flag.txt,打开看一下发现是乱码,并不是真正的txt文件,看一下文件类型,发现是原来是一个 windows 下的小程序,改文件后缀名在windows下跑一遍,着实是苍蝇满屏幕乱跑,可怕。。。

flyexe

可是一个满屏幕爬苍蝇,flag在哪里吖?binwalk 看一下里面还有什么东西,发现一堆的图片,弄出来看看。

binwalk flag.txt
foremost -v -i flag.txt

导出来89个图片,好家伙,在图片里发现一个二维码,用手机扫一扫,终于出来了flag,flag{m1Sc_oxO2_Fly}

0x02 Broken heart

文件地址 : http://ctf5.simplexue.com/misc/myheart

首先使用file命令查看文件类型,发现是xz格式的压缩包,该文件名解压。发现还是一个一模一样文件名的文件,再查看文件类型,是一个wireshark的数据包,改文件名用 wireshark 打开。

windard@windard:~/Download/out$ ls
myheart
windard@windard:~/Download/out$ file myheart
myheart: XZ compressed data
windard@windard:~/Download/out$ mv myheart myheart.xz
windard@windard:~/Download/out$ unxz -kd myheart.xz
windard@windard:~/Download/out$ ls
myheart  myheart.xz
windard@windard:~/Download/out$ file myheart
myheart: pcap-ng capture file - version 1.0
windard@windard:~/Download/out$ mv myheart myheart.pcapng
windard@windard:~/Download/out$ ls
myheart.pcapng  myheart.xz

myheartxzpcapng

用 wireshark 同样的找到 http 请求,发现没有post请求,但是有很多的get请求是文件流的形式,怀疑是一个文件。

然后在http的请求头中发现了一行 Content-Range: bytes 1080486-1345387/2347916\r\n 刚好前面俩数字之差为这一份数据的大小。

myheartpcap

一共有23个数据包,每个数据包都记录了它在整个文件中的位置,将这些数据包都提取出来,然后再按照相应的位置将文件拼起来。

同样在 File->Export Object->HTTP 将所有数据包都导出。

exporthttp

将每一个数据包的所在的起始位置和终止位置记录下来,然后写一个脚本将数据包合并起来。

windard@windard:~/Download/out$ strings myheart.pcapng | grep 'Content-Range'
Content-Range: bytes 1080486-1345387/2347916
Content-Range: bytes 986065-1150874/2347916
Content-Range: bytes 1397670-1593207/2347916
Content-Range: bytes 337541-500782/2347916
Content-Range: bytes 2001846-2202904/2347916
Content-Range: bytes 467298-648929/2347916
Content-Range: bytes 1507903-1694032/2347916
Content-Range: bytes 552789-781321/2347916
Content-Range: bytes 1276598-1432659/2347916
Content-Range: bytes 1888311-1938509/2347916
Content-Range: bytes 13-179538/2347916
Content-Range: bytes 2106781-2347915/2347916
Content-Range: bytes 1540792-1639406/2347916
Content-Range: bytes 145550-198027/2347916
Content-Range: bytes 905781-1032111/2347916
Content-Range: bytes 1987909-2044321/2347916
Content-Range: bytes 694834-905770/2347916
Content-Range: bytes 27943-132132/2347916
Content-Range: bytes 1774960-1959007/2347916
Content-Range: bytes 892465-1067354/2347916
Content-Range: bytes 1904693-2059434/2347916
Content-Range: bytes 188923-359924/2347916
Content-Range: bytes 1672374-1872648/2347916
windard@windard:~/Download/out$ cd data/
windard@windard:~/Download/out/data$ ls
LoiRLUoq      LoiRLUoq(13)  LoiRLUoq(18)  LoiRLUoq(22)  LoiRLUoq(7)
LoiRLUoq(1)   LoiRLUoq(14)  LoiRLUoq(19)  LoiRLUoq(3)   LoiRLUoq(8)
LoiRLUoq(10)  LoiRLUoq(15)  LoiRLUoq(2)   LoiRLUoq(4)   LoiRLUoq(9)
LoiRLUoq(11)  LoiRLUoq(16)  LoiRLUoq(20)  LoiRLUoq(5)
LoiRLUoq(12)  LoiRLUoq(17)  LoiRLUoq(21)  LoiRLUoq(6)
windard@windard:~/Download/out/data$ ll
总用量 3704
drwxrwxr-x 2 windard windard   4096  5月 15 22:55 ./
drwxrwxr-x 3 windard windard   4096  5月 15 22:55 ../
-rw-r--r-- 1 windard windard 264902  5月 15 22:55 LoiRLUoq
-rw-r--r-- 1 windard windard 164810  5月 15 22:55 LoiRLUoq(1)
-rw-r--r-- 1 windard windard 179526  5月 15 22:55 LoiRLUoq(10)
-rw-r--r-- 1 windard windard 241135  5月 15 22:55 LoiRLUoq(11)
-rw-r--r-- 1 windard windard  98615  5月 15 22:55 LoiRLUoq(12)
-rw-r--r-- 1 windard windard  52478  5月 15 22:55 LoiRLUoq(13)
-rw-r--r-- 1 windard windard 126331  5月 15 22:55 LoiRLUoq(14)
-rw-r--r-- 1 windard windard  56413  5月 15 22:55 LoiRLUoq(15)
-rw-r--r-- 1 windard windard 210937  5月 15 22:55 LoiRLUoq(16)
-rw-r--r-- 1 windard windard 104190  5月 15 22:55 LoiRLUoq(17)
-rw-r--r-- 1 windard windard 184048  5月 15 22:55 LoiRLUoq(18)
-rw-r--r-- 1 windard windard 174890  5月 15 22:55 LoiRLUoq(19)
-rw-r--r-- 1 windard windard 195538  5月 15 22:55 LoiRLUoq(2)
-rw-r--r-- 1 windard windard 154742  5月 15 22:55 LoiRLUoq(20)
-rw-r--r-- 1 windard windard 171002  5月 15 22:55 LoiRLUoq(21)
-rw-r--r-- 1 windard windard 200275  5月 15 22:55 LoiRLUoq(22)
-rw-r--r-- 1 windard windard 163242  5月 15 22:55 LoiRLUoq(3)
-rw-r--r-- 1 windard windard 201059  5月 15 22:55 LoiRLUoq(4)
-rw-r--r-- 1 windard windard 181632  5月 15 22:55 LoiRLUoq(5)
-rw-r--r-- 1 windard windard 186130  5月 15 22:55 LoiRLUoq(6)
-rw-r--r-- 1 windard windard 228533  5月 15 22:55 LoiRLUoq(7)
-rw-r--r-- 1 windard windard 156062  5月 15 22:55 LoiRLUoq(8)
-rw-r--r-- 1 windard windard  50199  5月 15 22:55 LoiRLUoq(9)

记录下每个文件的位置,然后写一个脚本将数据包插进去,然后得到一个文件,可是因为没有文件头,并不能看出是什么文件。

只能一个一个的试一下,最终加上13个字节的png文件头正常显示了出来,是一个png图片,flag在图片中。

python代码:

#coding=utf-8

data = [
    {"name":"","start":1080486},
    {"name":"(1)","start":986065},
    {"name":"(2)","start":1397670},
    {"name":"(3)","start":337541},
    {"name":"(4)","start":2001846},
    {"name":"(5)","start":467298},
    {"name":"(6)","start":1507903},
    {"name":"(7)","start":552789},
    {"name":"(8)","start":1276598},
    {"name":"(9)","start":1888311},
    {"name":"(10)","start":13},
    {"name":"(11)","start":2106781},
    {"name":"(12)","start":1540792},
    {"name":"(13)","start":145550},
    {"name":"(14)","start":905781},
    {"name":"(15)","start":1987909},
    {"name":"(16)","start":694834},
    {"name":"(17)","start":27943},
    {"name":"(18)","start":1774960},
    {"name":"(19)","start":892465},
    {"name":"(20)","start":1904693},
    {"name":"(21)","start":188923},
    {"name":"(22)","start":1672374},
]

f = open("myheart.png","wb")

#写入文件头
f.write('89504E470D0A1A0A0000000D49'.decode('hex'))

#写入数据
for i in data:
    d = open("LoiRLUoq"+i["name"],"rb")
    f.seek(i["start"])
    f.write(d.read())
    d.close()

f.close()
print "Successful"

最终的图片

myheart


本文固定链接:https://windard.com/blog/2016/05/15/Extract-File-From-Pcap
原创文章,转载请注明出处:从wireshark中提取文件 By Windard


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK