抓包采用 wireshark,提取特征时,要对 session 进行过滤,找到关键的stream,这里总结了 wireshark 过滤的基本语法,供自己以后参考。
wireshark进行过滤的适合,分为协议过滤和内容过滤。
对标准协议,既支持粗粒度的过滤如HTTP:
tcp.port==53、http.request.method=="GET"
对内容过滤的例子:
http contains "Server"
指的是在http协议中包含Server的这个字段的数据包有哪些。
过滤地址:
ip.addr == 8.8.8.8
ip.src == 8.8.8.8
ip.dst == 8.8.8.8
ip.addr == 10.0.0.0/16
过滤端口:
tcp.port == 9090
tcp.dstport == 9090
tcp.srcport == 9090
tcp.port >=1 and tcp.port <= 80
过滤mac:
eth.dst == A0:00:00:04:C5:84 // 过滤目标mac
eth.src eq A0:00:00:04:C5:84 // 过滤来源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr eq A0:00:00:04:C5:84 // 过滤来源MAC和目标MAC都等于A0:00:00:04:C5:84的
根据长度过滤:
tcp.len >= 7
ip.len == 88
tcp.length == 26
frame.len == 999
http包中的过滤:
http.host == xxx.com
// 过滤 host
http.response == 1
// 过滤所有的 http 响应包
http.response.code == 302
// 过滤状态码 202
http.request.method==POST
// 过滤 POST 请求包
http.cookie contains xxx
// cookie 包含 xxx
http.request.uri=="/robots.txt"
//过滤请求的uri,取值是域名后的部分
http.request.full_uri=="http://1.com"
// 过滤含域名的整个url
http.server contains "nginx"
//过滤http头中server字段含有nginx字符的数据包
http.content_type == "text/html"
//过滤content_type是text/html
http.content_encoding == "gzip"
//过滤content_encoding是gzip的http包
http.transfer_encoding == "chunked"
//根据transfer_encoding过滤
http.content_length == 279
http.content_length_header == "279"
//根据content_length的数值过滤
http.request.version == "HTTP/1.1"
//过滤HTTP/1.1版本的http包,包括请求和响应
一个最简单的例子。
这里我们请求了一个百度的网址,用我们的wireshark进行抓包。
我们用它的这个过滤器进行过滤协议为http的。
这里过滤我们还可以进行更精细的过滤,比如过滤出你想要的源ip或者是目标ip或者端口,这些都是同理。可以参考我的上面的例子。
如果是过滤协议的话这里可以过滤很多协议。比如:tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp等等。
使用Wireshark时最常见的问题,是当您使用默认设置时,会得到大量冗余信息,以至于很难找到自己需要的部分。
这就是为什么过滤器会如此重要。它们可以帮助我们在庞杂的结果中迅速找到我们需要的信息。
过滤器的区别
捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
两种过滤器的目的是不同的。
捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。
显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。
捕捉过滤器
语法:Protocol Direction Host(s) Value Logical Operations Other expression
其中Logical Operations是逻辑运算。
tcp dst port 3128
显示目的TCP端口为3128的封包。
ip src host 10.1.1.1
显示来源IP地址为10.1.1.1的封包。
host 10.1.2.3
显示目的或来源IP地址为10.1.2.3的封包。
src portrange 2000-2500
显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
显示过滤器
语法:Protocol. String 1.String 2Comparison
这也是我们最常用的。
snmp || dns || icmp显示SNMP或DNS或ICMP封包。ip.addr == 10.1.1.1
显示来源或目的IP地址为10.1.1.1的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。
题目要求:
1.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)。
2.php代理第一次被使用时最先连接了哪个IP地址。
这里要求我们查找mysql的用户名以及密码,
我们可以直接筛选含有mysql的字段。
tcp contains "mysql" && mysql
我们观察这些流量包,我们能够发现,这里都是一直在请求登录我们的数据库的数据包。
我们直接翻到最后这个请求数据库的包,那这个包大概率就是黑客进行爆破成功的包,会含有我们数据库的账号和密码。
用户:admin
密码Hash:4858e7dcb0968daa7b599be4b0edb88a25ad89ac
然后开始继续过滤http请求的数据包。
我们发现了一个php文件,这个大概率就是黑客上传的恶意代码。
在下面我们能够看到,这个黑客的请求,能够看到黑客使用连接的地址为4.2.2.2,端口为53端口。
答案
1.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4
2.php代理第一次被使用时最先连接了哪个IP地址
4.2.2.2
密码为hash,我们可以用解密软件进行解密,就能够清楚看见数据库的密码 了。