发布于 5年前

Tcpdump示例教程(下)——实例

请先查看 Tcpdump示例教程(上)——基础知识

1. 提取HTTP用户代理

从HTTP请求标头中提取HTTP用户代理。

:~$ sudo tcpdump -nn -A -s1500 -l | grep "User-Agent:"

通过使用egrep和多个匹配,我们可以从请求中获取用户代理和主机(或任何其他标头)。

:~$ sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

2. 仅捕获HTTP GET和POST数据包

深入了解过滤器,我们只能指定与GET匹配的数据包。

:~$ sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

或者,我们只能选择POST请求。请注意,POST数据可能不包含在使用此过滤器捕获的数据包中。POST请求很可能会跨多个TCP数据包进行拆分。

:~$ sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

在这些表达式中匹配的十六进制匹配GET和POST的ascii。

tcp[((tcp[12:1] & 0xf0) >> 2):4] ,首先确定我们需要的字节位置(在TCP Header 之后),然后选择我们希望匹配的4个字节。

3.提取HTTP请求URL

只需从访问中解析主机和HTTP请求位置即可。通过不针对端口80,我们可以在任何端口上找到这些请求,例如在高端口上运行的HTTP服务。

:~$ sudo tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
    POST /wp-login.php HTTP/1.1
    Host: dev.example.com
    GET /wp-login.php HTTP/1.1
    Host: dev.example.com
    GET /favicon.ico HTTP/1.1
    Host: dev.example.com
    GET / HTTP/1.1
    Host: dev.example.com

4. 在POST请求中提取HTTP密码

让我们从POST数据中获取一些密码。将包括Host:和请求位置,以便我们知道密码的用途。

:~$ sudo tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:25:54.799014 IP 10.10.1.30.39224 > 10.10.1.125.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /wp-login.php HTTP/1.1
.....s..POST /wp-login.php HTTP/1.1
Host: dev.example.com
.....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1

5.从服务器和客户端捕获Cookie

通过搜索Set-Cookie :(来自服务器)和Cookie :(来自客户端)从服务器捕获cookie。

:~$ sudo tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Host: dev.example.com
Cookie: wordpress_86be02xxxxxxxxxxxxxxxxxxxc43=admin%7C152xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfb3e15c744fdd6; _ga=GA1.2.21343434343421934; _gid=GA1.2.927343434349426; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_86be654654645645645654645653fc43=admin%7C15275102testtesttesttestab7a61e; wp-settings-time-1=1527337439

6. 捕获所有ICMP数据包

查看ICMP线路上的所有数据包。

:~$ sudo tcpdump -n icmp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:34:21.590380 IP 10.10.1.217 > 10.10.1.30: ICMP echo request, id 27948, seq 1, length 64
11:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 64
11:34:27.680307 IP 10.10.1.159 > 10.10.1.1: ICMP 10.10.1.189 udp port 59619 unreachable, length 115

7. 显示非ECHO/REPLY的ICMP数据包(标准ping)

过滤icmp类型以选择icmp非标准ping的数据包。

:~$ sudo tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:04.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156

8.捕获SMTP/POP3电子邮件

可以提取电子邮件正文和其他数据,在此示例中,我们仅解析电子邮件收件人。

:~$ sudo tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'

9. NTP查询和响应故障排除

在此示例中,我们看到了NTP查询和响应。

:~$ sudo tcpdump dst port 123

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:02:19.112502 IP test33.ntp > 199.30.140.74.ntp: NTPv4, Client, length 48
21:02:19.113888 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48
21:02:20.150347 IP test33.ntp > 216.239.35.0.ntp: NTPv4, Client, length 48
21:02:20.150991 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48

10.捕获SNMP查询和响应

使用快速SNMP协议扫描程序onesixtyone,我们在本地网络上测试SNMP服务并捕获GetRequestGetResponse。对于那些对SNMP进行故障排除的人来说,这是一个很好的方法,可以很好地查看线路上发生的情况。您可以在交通信中中清楚地看到OID

:~$ onesixtyone 10.10.1.10 public

Scanning 1 hosts, 1 communities
10.10.1.10 [public] Linux test33 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64
:~$ sudo tcpdump -n -s0  port 161 and udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:39:13.725522 IP 10.10.1.159.36826 > 10.10.1.20.161:  GetRequest(28)  .1.3.6.1.2.1.1.1.0
23:39:13.728789 IP 10.10.1.20.161 > 10.10.1.159.36826:  GetResponse(109)  .1.3.6.1.2.1.1.1.0="Linux testmachine 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64"

11.捕获FTP凭据和命令

捕获FTP命令和登录详细信息是直截了当的。在建立认证之后,FTP会话可以是主动的或被动的,这将确定会话的数据部分是通过TCP端口20还是另一个短暂端口进行的。使用以下命令,输出中的USER和PASS(可以输入grep)以及LIST,CWD和PASSIVE等FTP命令。

:~$ sudo tcpdump -nn -v port ftp or ftp-data

12.循环捕获文件

当捕获大量流量或长时间捕获时,自动创建固定大小的新文件会很有帮助。这是使用参数完成的-W-G-C

在此命令中,将每隔(-G)3600秒(1小时)创建文件 capture-(hour).pcap。第二天将覆盖这些文件。所以你最终应该使用capture-{1-24}.pcap,如果为15小时,那么新建文件是(/tmp/capture-15.pcap)。

:~$ tcpdump  -w /tmp/capture-%H.pcap -G 3600 -C 200

13.捕获IPv6流量

使用ip6过滤器捕获IPv6流量。在这些示例中,我们使用proto 6和指定了TCP和UDP协议proto 17

tcpdump -nn ip6 proto 6

IPv6使用UDP并从先前保存的捕获文件中读取。

tcpdump -nr ipv6-test.pcap ip6 proto 17

14.检测网络流量中的端口扫描

在以下示例中,您可以看到从单个源到单个目标的流量。可以看到标志[S]和[R],并与看似随机的一系列目标端口进行匹配。当SYN在目标系统上找到一个关闭的端口时,会在RESET中看到这些端口。这是Nmap等工具进行端口扫描的标准行为。

:~$ tcpdump -nn

21:46:19.693601 IP 10.10.1.10.60460 > 10.10.1.199.5432: Flags [S], seq 116466344, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693626 IP 10.10.1.10.35470 > 10.10.1.199.513: Flags [S], seq 3400074709, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693762 IP 10.10.1.10.44244 > 10.10.1.199.389: Flags [S], seq 2214070267, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 0
21:46:19.693783 IP 10.10.1.10.35172 > 10.10.1.199.1433: Flags [S], seq 2358257571, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693826 IP 10.10.1.10.33022 > 10.10.1.199.49153: Flags [S], seq 2406028551, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.695567 IP 10.10.1.10.55130 > 10.10.1.199.49154: Flags [S], seq 3230403372, win 29200, options [mss 1460,sackOK,TS val 3547090334 ecr 0,nop,wscale 7], length 0
21:46:19.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 0
21:46:19.695608 IP 10.10.1.10.33460 > 10.10.1.199.49152: Flags [S], seq 3289070068, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 0
21:46:19.695637 IP 10.10.1.10.34940 > 10.10.1.199.1029: Flags [S], seq 140319147, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 0
21:46:19.695664 IP 10.10.1.10.45648 > 10.10.1.199.5060: Flags [S], seq 2203629201, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695775 IP 10.10.1.10.49028 > 10.10.1.199.2000: Flags [S], seq 635990431, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695790 IP 10.10.1.199.2000 > 10.10.1.10.49028: Flags [R.], seq 0, ack 635990432, win 0, length 0

15.显示Nmap NSE脚本测试的示例过滤器

在此示例中,显示Nmap NSE脚本http-enum.nse针对打开的HTTP服务测试有效URL。

在Nmap机器上:

:~$ nmap -p 80 --script=http-enum.nse targetip

在目标机器上:

:~$ tcpdump -nn port 80 | grep "GET /"

GET /w3perl/ HTTP/1.1
GET /w-agora/ HTTP/1.1
GET /way-board/ HTTP/1.1
GET /web800fo/ HTTP/1.1
GET /webaccess/ HTTP/1.1
GET /webadmin/ HTTP/1.1
GET /webAdmin/ HTTP/1.1

16.捕获每个非本地主机的开始和结束数据包

此示例直接来自tcpdump手册页。通过选择tcp-syn和tcp-fin数据包,我们可以显示每个已建立的带有时间戳但没有数据的TCP对话。与许多过滤器一样,这样可以减少噪音量,从而专注于您关注的信息。

:~$ tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'

17.捕获DNS请求和响应

可以在此捕获中看到对Google公共DNS的出站DNS请求和A记录(IP地址)响应。

:~$ sudo tcpdump -i wlp58s0 -s0 port 53

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:19:06.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44)
14:19:07.022618 IP google-public-dns-a.google.com.domain > test.53852: 26977 1/0/1 A 216.58.203.110 (60)

18.捕获HTTP数据包

仅捕获端口80上的HTTP数据包。避免捕获TCP会话设置(SYN / FIN / ACK)。

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

19.使用tcpdump捕获并在Wireshark中查看

解析和分析完整的应用程序流(如HTTP)比使用Wireshark(或tshark)更容易执行而不是tcpdump。使用tcpdumpwrite file选项捕获远程系统上的流量通常更实用。然后将其复制pcap到本地工作站以使用Wireshark进行分析。

除了手动将文件从远程系统移动到本地工作站之外,还可以通过SSH连接实时将捕获提供给Wireshark。这个技巧是最受欢迎的,将原始tcpdump输出直接输入wireshark到本地计算机上。不要忘记,not port 22所以你没有捕获你的SSH流量。

:~$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | wireshark -k -i -

另一个提示是使用-c遥控器上的计数tcpdump来允许捕获完成,否则击中ctrl-c不仅会杀死tcpdump而且还会使Wireshark和你的捕获。

20.数据包的热门主机

列出一段时间或数量的数据包的顶级谈话者。使用简单的命令行字段提取来获取IP地址,对事件进行排序和计数。捕获受计数选项的限制-c。

sudo tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
200 packets captured
261 packets received by filter
0 packets dropped by kernel
    108 IP 10.10.211.181
     91 IP 10.10.1.30
      1 IP 10.10.1.50

21.捕获所有明文密码

在这个命令中,我们专注于标准的纯文本协议,并选择与任何用户或密码相关的grep。通过选择目标的-B5选项grep是获得前面的5行,这些行可以提供围绕捕获的密码(主机名,IP地址,系统)的上下文。

:~$ sudo tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '

22. DHCP示例

我们的最后一个tcpdump例子是监控DHCP请求和回复。在端口67上看到DHCP请求,并且回复在68上。使用verbose参数,-v我们可以看到协议选项和其他详细信息。

:~$ sudo tcpdump -v -n port 67 or 68

tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:37:50.059662 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none]
      Client-Ethernet-Address 00:0c:xx:xx:xx:d5
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: Request
        Requested-IP Option 50, length 4: 10.10.1.163
        Hostname Option 12, length 14: "test-ubuntu"
        Parameter-Request Option 55, length 16: 
          Subnet-Mask, BR, Time-Zone, Default-Gateway
          Domain-Name, Domain-Name-Server, Option 119, Hostname
          Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route
          NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252
14:37:50.059667 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none]
      Client-Ethernet-Address 00:0c:xx:xx:xx:d5
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: Request
        Requested-IP Option 50, length 4: 10.10.1.163
        Hostname Option 12, length 14: "test-ubuntu"
        Parameter-Request Option 55, length 16: 
          Subnet-Mask, BR, Time-Zone, Default-Gateway
          Domain-Name, Domain-Name-Server, Option 119, Hostname
          Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route
          NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252
14:37:50.060780 IP (tos 0x0, ttl 64, id 53564, offset 0, flags [none], proto UDP (17), length 339)
    10.10.1.1.67 > 10.10.1.163.68: BOOTP/DHCP, Reply, length 311, xid 0xc9779c2a, Flags [none]
      Your-IP 10.10.1.163
      Server-IP 10.10.1.1
      Client-Ethernet-Address 00:0c:xx:xx:xx:d5
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: ACK
        Server-ID Option 54, length 4: 10.10.1.1
        Lease-Time Option 51, length 4: 86400
        RN Option 58, length 4: 43200
        RB Option 59, length 4: 75600
        Subnet-Mask Option 1, length 4: 255.255.255.0
        BR Option 28, length 4: 10.10.1.255
        Domain-Name-Server Option 6, length 4: 10.10.1.1
        Hostname Option 12, length 14: "test-ubuntu"
        T252 Option 252, length 1: 10
        Default-Gateway Option 3, length 4: 10.10.1.1

总结

这些tcpdump示例,提示和命令旨在让您对可能性有基本的了解。根据您要实现的目标,有许多方法可以更深入或组合不同的捕获过滤器以满足您的要求。

结合tcpdumpWireshark是一个强大的组合,特别是当您希望深入了解完整的应用层会话时,因为解码器可以组装完整的流。我们最近对Wireshark教程进行了重大更新。

译文地址 https://hackertarget.com/tcpdump-examples/

©2020 edoou.com   京ICP备16001874号-3