网络流量相关工具

Locks012025-10-31文章来源:SecHub网络安全社区


Wireshark状态码

SYN:用于创建链接。
ACK:用于肯定收到了请求。
seq:发送本身的数据。
ack:发送接收到的对方的数据。

访问网站过程

首先经过三次握手,再进行数据传递

客户端SYN请求连接

服务端ACK同意连接返回

客户端ACK +1 回应

协议经过TCP协议,变成HTTP协议

网站收到请求,返回响应

服务器返回页面,确认接受

TCP是可靠连接,都会返回响应

数据传输完毕进行四次挥手

有一些会有keeplive进行保持,不进行挥手

客户端FIN 请求断开

服务端ACK 等待回应后释放连接

服务端FIN 收到回应

客户端ACK +1断开

流量中找漏洞,查看指纹,特征等

响应包中是否有you have error 数据库查询语句

选择要捕获的网卡,绿色的图标可以选择相应的规则进行过滤

例如写入一条规则:只采集主机172.16.1.77的80端口的通讯流量。

host 172.16.1.77 and port 80

在工具启动抓包后,选择蓝色的图标,选择“管理显示过滤器”

同样可以照猫画虎的建立规则。

###所有过滤方式皆可使用逻辑运算符:and/or
ip.src==192.168.0.250(只显示源地址为192.168.0.250的数据包)
ip.dst==192.168.0.250 (只显示目的地址为192.168.0.250的数据包)
tcp.srcport==80   (只显示tcp的源端口为80端口的数据包)  
tcp.dstport==80   (只显示tcp的目的端口为80端口的数据包)
http.request.method=="GET" (只显示http中的get请求)
http.request.uri contains login (只显示url中包含login的请求)
http.response.code ==200 (显示200状态码的返回包)
http contains "admin"  (搜索关键字admin)
http.request.method=="POST" && http contains "admin"  (显示POST请求,并且包含admin关键字的数据包)
http.response.code ==200 && http contains "admin"     (显示200状态码的返回包,并且带有admin关键字的)

数据包列表:列表的面板中显示:

编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。

wireshark的实战

通过wireshark提取流量包中的文件

假如有一天,我们接到了举报信,派大星是一名间谍,经常给国外情报组织提供高水平的情报。然后咱们就偷偷摸摸的把他们家网线给噶了:)

从而做到了监听派大星的上网流量。我们通过这个模拟的案例进行实验。

制作一个敏感的文件

我们在一个文档中,写入一些内容后,压缩成压缩包即可。

启动wireshark抓包并上传文件

抓取通过dvwa的upload上传压缩包的流量(所抓到的流量为分享的pcap包)

还原攻击者的顺序

提取文件

通过追踪HTTP数据流不难判定数据存在于下图箭头位置。

将show data as 调整为原始数据后,通过另存为保存到本地。

通过ghex编辑文件(kali中如果没有直接apt-get install ghex即可)

找到1F 8B开头的字段,选择出来对应的数据段,复制–>新建文件–>粘贴–>save as (这步找内容比较繁琐)

1F 8B 是两个点

OD OA是换行等状态,所以在后面进行选择

文件头参数

https://blog.csdn.net/w1304099880/article/details/112472681

GzipArchiveFile (gz;tar;tgz), 文件头(hex):1F8B

文件幻数

"文件头参数"通常指的是计算机文件的开头部分,也称为文件头或文件标识符,它包含有关文件类型、编码和其他元数据的信息。文件头参数通常由一组字节组成,用于标识文件的格式和内容。

例如,JPEG图像文件的文件头参数通常包含“FF D8 FF”,而PDF文件的文件头参数通常包含“25 50 44 46”。

"文件幻数"也是指文件的开头部分,它是一组字节,用于确定文件类型。文件幻数通常是文件头参数的一部分,但是文件幻数可以用于确定文件类型的更广泛的范围,因为它可以在文件头参数之外查找。

例如,常见的ZIP压缩文件的文件幻数为“50 4B 03 04”,而PNG图像文件的文件幻数为“89 50 4E 47 0D 0A 1A 0A”。

文件头参数和文件幻数都是计算机文件格式识别和解析的关键元素,它们用于确定文件类型、格式和元数据,并指导计算机在读取和处理文件时的操作。

文件上传漏洞,利用文件头绕过的漏洞

文件上传漏洞是指攻击者通过应用程序的文件上传功能上传恶意文件,进而执行任意代码、拒绝服务或访问敏感数据的一种漏洞。攻击者可以利用文件上传漏洞来绕过安全检查,上传恶意文件到服务器上,从而进行攻击。其中,利用文件头绕过的漏洞是文件上传漏洞中的一种常见类型,主要有以下几种:

1.  MIME类型绕过:服务器在上传文件时通常会检查文件的MIME类型,以确定文件的内容和类型。攻击者可以通过修改文件的MIME类型或伪造文件头参数,来绕过MIME类型检查。例如,将一个可执行文件的MIME类型修改成文本文件,即可绕过服务器的检查。
    
2.  文件类型绕过:在上传文件时,服务器通常会检查文件的扩展名或文件头参数,以确定文件的类型。攻击者可以通过修改文件的扩展名或文件头参数,来欺骗服务器以为上传的文件是安全的。例如,将一个可执行文件的扩展名修改成文本文件,或将可执行文件的文件头参数修改成文本文件的文件头参数,即可欺骗服务器以为上传的是文本文件。
    
3.  文件内容绕过:攻击者可以通过在上传文件前,在文件的开头添加特定的文件头参数或内容,以欺骗服务器以为上传的是安全的文件。例如,将一个可执行文件的开头几个字节修改成文本文件的开头几个字节,或将文本文件的开头几个字节修改成图片文件的开头几个字节,即可欺骗服务器以为上传的是安全的文件。
    

要防止文件上传漏洞,需要对上传的文件进行严格的检查和过滤,例如限制上传文件的类型和大小、检查文件的MIME类型和文件头参数、以及对上传的文件进行病毒扫描和沙箱检测等。同时,还需要在代码层面上,对上传的文件进行验证和过滤,以防止恶意文件被执行或访问。
通过wireshark溯源分析

在下面的攻击流量中,尝试分析攻击者的操作?(分享在工具包中的attack.pcap)

打开后,发现开头有BelinIN,进行搜索发现是路由器,可以确定是通过这个牌子的路由器进行攻击

过滤掉除http协议的流量

发现首先通过/login.php登录

经过302跳转 到/index.php

再进行upload上传上backup.php

上传后,再次确认了backup.php

改成原始

找到头,拉倒尾

保存对应的文件名backup.php

成功!!!

科来技术交流版

科来网络分析系统和Wireshark都是用于网络分析的工具,但它们有以下几点不同:

  1. 功能:科来网络分析系统是一款基于图形化界面的全面网络安全监测与分析系统,具备实时数据监测、告警、流量分析、数据存储与查询等多种功能;而Wireshark是一款开源的网络分析工具,用于捕获和分析网络数据包。

  2. 难度:科来网络分析系统相对来说比Wireshark更加容易使用,因为它提供了图形化界面和简单易用的功能,不需要用户具备太多的网络知识。而Wireshark则需要用户有一定的网络技术基础,因为它是基于命令行界面的,需要用户手动输入指令来实现不同的功能。

  3. 适用场景:科来网络分析系统主要应用于企业网络安全监测和威胁应对,能够实时监测企业内部和外部的网络流量,提供威胁情报、攻击识别、安全威胁事件响应等功能。而Wireshark主要用于网络故障排查和协议分析,可以捕获和分析网络数据包,帮助用户定位和解决网络问题。

  4. 安全性:科来网络分析系统在设计上更注重安全性,具有完善的权限控制和审计功能,可以保护用户的数据安全和隐私。而Wireshark是一个开源工具,用户需要自行承担使用该工具可能带来的安全风险。

tcpdump

tcpdump:tcpdump是一个用于截取网络分组,并输出分组内容的工具,tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。

tcpdump host 172.16.1.77

结果如下:

20:37:03.237561 IP Locks.39958 > 172.16.1.77.http: Flags [.], ack 1765, win 496, options [nop,nop,TS val 1627881351 ecr 3793916221], length 0

第一段:时间 第二段:网络协议 IP 第三段:发送方的ip地址(主机名)+端口号,其中farmsec.lan是主机名,而59482是端口号 第四段:箭头 >, 表示数据流向 第五段:接收方的ip地址+端口号(协议),其中 162.125.2.5是 ip,而https是协议 第六段:冒号 第七段:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1

使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:

[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag,由于除了 SYN 包外所有的数据包都有ACK,所以一般这个标志也可表示 ACK

tcpdump参数:

option 可选参数:

-n:不把ip转化成域名,直接显示 ip
-nn:不把协议和端口号转化成名字
-N:不打印出host 的域名部分
-w  :后接一个以 .pcap 后缀命令的文件名,保存的文件可以用wireshark打开
-r :从文件中读取数据
-i:指定要过滤的网卡接口
-Q:选择是入方向还是出方向的数据包,可选项有:in, out, inout
-A:以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
-s : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。

常用useage:

tcpdump host 192.168.0.1               ###基于IP地址过滤:host
tcpdump -i wlan0 src 192.168.0.1     ###根据源ip进行过滤
tcpdump -i wlan0 dst 192.168.0.1     ###根据目标ip进行过滤
tcpdump -i wlan0 src 192.168.199.206 and dst 192.168.199.152  ###根据源ip与目标ip进行过滤
tcpdump net 192.168.10.0/24          ###基于网段进行过滤:net
tcpdump src net 192.168                ###根据源网段进行过滤
tcpdump dst net 192.168             ###根据目标网段进行过滤
tcpdump port 80                     ###基于端口进行过滤:port
tcpdump src port 80                 ###根据源端口进行过滤 
tcpdump dst port 80                 ###根据目标端口进行过滤
tcpdump port 80 or port 8088        ###同时指定两个端口
tcpdump port 80 or 8088             ###也可以简写成这样
tcpdump portrange 8000-8080         ###指定一个端口段
tcpdump src portrange 8000-8080     ###指定一个源端口段
tcpdump dst portrange 8000-8080     ######指定一个目的端口段

tcpdump tcp               ###基于协议进行过滤,常见的网络协议有:tcp, udp, icmp, http,ip,ipv6 等 

and:所有的条件都需要满足,也可以表示为 &&
or:只要有一个条件满足就可以,也可以表示为 ||
not:取反,也可以使用 !
tcpdump src 192.168.199.152 and dst port 3389

当你在使用多个过滤器进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,因为你需要使用引号将其包含。比如说在溯源过程中,我发现攻击ip为192.168.199.152,那么我想知道它现在有没有对22以及3389这两个端口进行连接,则可以使用以下命令:

tcpdump 'src 192.168.199.152 and (dst port 3389 or 22)'

提取 HTTP POST 请求中的密码

从 HTTP POST 请求中提取密码和主机名:

-s(为截取前多少字节的内容,如果是0的话则是全部)
-A(以ASCII码显示每一个数据包不显示链路层的头部信息)
-l (基于行的输出)
tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

抓取多协议的用户名与密码

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 '

提取 HTTP 请求的 URL

提取 HTTP 请求的主机名和路径:

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

找出一段时间内发包最多的 IP,或者从一堆报文中找出发包最多的 IP,可以使用下面的命令:

-t (在每行的输出中不输出时间)
-c(为抓取多少个包就退出)  cut(以 . 为分隔符,打印出每行的前四列,取ip)
tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20

抓取 DNS 请求和响应

DNS 的默认端口是 53,因此可以通过端口进行过滤

tcpdump -i any -s0 port 53

使用tcpdump -w生成pcap格式的文件。

打开wireshark,点击文件>open>选择pcap的文件

ngrep

ngrep:ngrep工具是grep命令的网络版,ngrep用于抓包,并可以通过正则表达式,过滤、获取指定样式的数据包。能识别TCP、UDP和ICMP协议,理解bpf的过滤机制。可以用来分析、定位服务中的问题。 因为如果包含多个服务的大型服务出现问题,需要逐步分析定位问题到具体的服务。使用ngrep抓包可以确定数据包是否已经到了某个服务模块,从而定位是哪个部分的问题。

使用案例:抓取本地wlan0网口与192.168.0.250的所有通信信息,并且以行来打印出来

ngrep -d wlan0 -W byline host 192.168.0.250     ###抓取本地wlan0网口与192.168.0.250的所有通信信息,并且以行来打印出来


ngrep -W byline host 192.168.0.250 and port 80  ###获取本机与192.168.0.250的通信端口为80的信息


ngrep -q -W byline "(GET|POST) .*"              ###抓取所有包含有GET或POST请求数据包

ngrep -q -W byline "login" host 192.168.0.250 and port 80  ###抓取与192.168.0.250通信的80端口并且数据包中包含login的的关键字


ngrep -W byline host 192.168.0.250 or host 192.168.1.250 and port 80 ###抓本机与192.168.0.250和192.168.1.250的通信,并且端口为80

tcpreplay

Tcpreplay是一套免费的开源实用程序集合,用于编辑和重放以前捕获的网络数据流量。最初的目标是重放恶意流量到入侵检测预防系统。
现在已经有很多用途,例如重放报文到Web服务器等。

  • tcprewrite – 修改pcap文件,例如修改报文的二层或三层消息头。
  • tcpreplay – 以捕获报文的速度来重放pcap文件,并支持以任意的速度来重放pcap文件。
tcpreplay -i eth0 dvwa.pcap
ngrep -W byline -d eth0 host 192.168.0.104

tcprewrite --infile=dvwa.pcap --outfile=dvwa_1.pcap --dstipmap=0.0.0.0/0:192.168.0.104 --enet-dmac=72:d3:35:88:58:e7
tcprewrite --infile=dvwa_1.pcap --outfile=dvwa_2.pcap -C
tcpreplay -i eth0 dvwa_3.pcap

有点刑的工具

Siege

Siege是Linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。
Siege命令常用参数
-c 200 指定并发数200
-r 5 指定测试的次数5
-f urls.txt 制定url的文件
-i internet系统,随机发送url
-b 请求无需等待 delay=0
-t 5 持续测试5分钟
-r和-t一般不同时使用

1000个并发对http://192.168.199.210发送请求100次
siege -c 1000 -r 100 http://192.168.199.210

# 在urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt 

# 随机选取urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt -i

# delay=0,更准确的压力测试,而不是功能测试
siege -c 200 -r 100 -f urls.txt -i -b

# 指定http请求头 文档类型
siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b

Siege输出结果说明:

Siege输出结果说明
Transactions: 总共测试次数
Availability: 成功次数百分比
Elapsed time: 总共耗时多少秒
Data transferred: 总共数据传输
Response time: 等到响应耗时
Transaction rate: 平均每秒处理请求数
Throughput: 吞吐率
Concurrency: 最高并发
Successful transactions: 成功的请求数
Failed transactions: 失败的请求数

t50

T50可以用于在多种类型的网络基础架构上执行“压力测试”(2.45版本),使用多种协议,可以修改请求的数据包,扩展测试范围(5.3版本),覆盖常 用的协议(ICMP、TCP和UDP),基础架构协议(GRE、IPSec和RSVP),一些路由协议(RIP、EIGRP和OSPF)。

t50 192.168.0.140 --flood

可观察对面主机的CPU、内存、网卡的波动。

口令破解工具

hydra

hydra是著名组织thc的一款开源的暴力破解密码工具,功能非常强大
kali下是默认安装的,几乎支持所有协议的在线破解。
-R #继续从上一次进度接着破解。
-S #采用SSL链接。
-s #PORT 可通过这个参数指定非默认端口。
-l #LOGIN 指定破解的用户,对特定用户破解。
-L #FILE 指定用户名字典。
-p #PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P #FILE 大写,指定密码字典。
-e #ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C #FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M #FILE 指定目标列表文件一行一条。
-o #FILE 指定结果输出文件。
-f #在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t #TASKS 同时运行的线程数,默认为16。
-w #TIME 设置最大超时的时间,单位秒,默认是30s。
-v/-V #显示详细过程。
server #目标ip
service #指定服务名
OPT #可选项

破解ssh

参数-l 指定root -P 密码字典

└─# hydra -l root -P top500.txt ssh://172.16.1.77

破解ftp
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV
破解teamspeak
hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak
破解pop3 hydra -l muts -P pass.txt my.pop3.mail pop3
这里就不依次说明了。

破解的关键在于密码字典得强大与否。所以我们在破解过程中就需要思考,如何获取强大的字典呢。在Kali中内置了很多字典,路径如下:
cd /usr/share/wordlists/
输入ls查看所有字典,这里详细举例两个目录的

dirb

big.txt #大的字典
small.txt #小的字典
catala.txt #项目配置字典
common.txt #公共字典
euskera.txt #数据目录字典
extensions_common.txt #常用文件扩展名字典
indexes.txt #首页字典
mutations_common.txt #备份扩展名
spanish.txt #方法名或库目录
others #扩展目录,默认用户名、默认密码等
stress #压力测试
vulns #漏洞测试
dirbuster

apache-user-enum-** #apache用户枚举
directories.jbrofuzz #目录枚举
directory-list-1.0.txt #目录列表

需要破解什么就使用什么字典。
光有这些还不够,有时候我们需要特定的字典,比如发现可以暴力破解四位数验证码,这就需要我们生成特定的字典。这样我们就要需要kali下的另一款工具了。

字典生成工具crunch

基本指令
crunch 最小位数 最大位数 指定生成范围
我们还可以将生成的字典输出到特定文件中,格式如下

crunch 3 4 6789 >>/home/kali/Desktop/pass.txt

john

John是一个破解系统密码的工具。johnny为其图形化版本。
鼠标点着用吧就,毕竟拿到shadow的情形本身就比较鸡肋。

命令行破解

john shadow --format=crypt --wordlist=top500.txt

图形化破解

在Linux系统中,/etc/shadow文件保存了用户的加密密码,使用的是一种加密算法。该加密算法的类型可以在密码哈希前缀中标识出来。在一般情况下,加密方式和哈希前缀以 “$” 符号开头。

下面是一些常见的 Linux 密码加密算法和哈希前缀:

1.  $1$:MD5 加密算法
2.  $2a$:Blowfish 加密算法
3.  $2y$:类似于 Blowfish 的加密算法
4.  $5$:SHA-256 加密算法
5.  $6$:SHA-512 加密算法

这些算法中,最常用的是 SHA-256 和 SHA-512。它们提供更高的安全性,因为它们使用更长的哈希值。建议使用最新的加密算法来保证系统安全。

hashcat

kali Linux中自带的有,也支持Windows Mac平台,可以在官网下载:https://hashcat.net
得到一个压缩包,加压后其中有各种版本的可执行文件.sh .exe

-m hash的类型

指定hash的加密类型,默认是MD5类型

在对应的类型前面有它的id,可以通过id来指定类型

当我们想要找一个类型在hashcat支不支持的时候,例如windows系统加密的是NTML,可以执行命令

hashcat64.exe -h | findstr NTLM

可以看到NTLM的ID号为1000

-a 攻击方式

破解密码的方式

分别有:
0 | Straight 字典破解
1 | Combination 组合破解
3 | Brute-force 掩码破解
6 | Hybrid Wordlist + Mask 混合字典 + 掩码
7 | Hybrid Mask + Wordlist 混合掩码 + 字典

掩码

当没有字典的时候,可以使用掩码指定密码的每一位是什么类型的字符,首先我们知道密码有多少位

例如:?d?d?d?d?d?d?d?d代表密码为8为数字,?u?l?l?l?l?d?d?d代表密码为7位,首个字母大写,然后三个小写字母,最后三个数字