前言
这次做靶机学到不少东西,果然还是要细细的做,把问题都弄懂。
探测
nmap扫端口,扫下来发现只开放了22和80端口,那就先从80端口开始看看吧。
1 | nmap -sS -Pn 10.10.10.171 -p- |
80端口打开之后是apache服务器的配置完成页面,robots.txt文件没有什么东西,dirbuster走一波,这里字典选择的是directory-list-2.3-medium.txt
。
完全扫完目录要等很久,基本上不会有什么太大区别,直接开始看一看各个目录。这里的ona很好奇是什么,google一下发现是一个全名叫做OpenNetAdmin
的管理平台,和题目名称相似度很高,值得怀疑。点进去看一看,发现了重要的版本信息。
CVE
直接谷歌搜索漏洞,很幸运第一个就看起来能用
1 | Exploit Title: OpenNetAdmin 18.1.1 - Remote Code Execution |
虽然不清楚利用原理但是代码逻辑还是很清晰的,输入一个参数URL就好,保存本地运行一下,直接get shell。
获取用户
方法一
看一下靶机中有哪些用户,jimmy和joanna用户看起来就是目标用户。
先看一下当前目录下都有什么东西,注意到有一个叫做config
的目录,怀疑里面有一些可以暴露信息的配置文件。
该目录下一共有两个文件auth_ldap.config.php
和config.inc.php
。前者的内容没有什么有价值的信息,后者的配置文件中引入了用户本地化的设置和数据库设置。
跟随前面所读取到的路径进入两个配置文件,第一个配置文件并不存在,第二个配置文件中暴露了数据库的密码信息为n1nj4W4rri0R!
。将此密码尝试和jimmy和joanna用户进行匹配之后发现位jimmy的ssh密码,成功获取到了用户。
方法二
其实第二个方式是我最开始想到的方法,只不过因为有点简单会剧透,所以放在第二个方法来说。使用以下命令来寻找文件中包含“passwd”、“password”等等一系列可能表示暴露口令的字符串就可以找到密码。
1 | grep -rn “passwd” ./ |
joanna
登录到jimmy用户的目录下,发现并没有想要的文件user.txt。那么就是说user flag在joanna用户的目录下。那么就向joanna发起进攻。首先现在我们只有jimmy用户,所以先执行如下命令找一找jimmy用户可以进入那些目录。
发现此用户拥有/var/www/internal/
目录的权限。
1 | find / -type d -user jimmy |
进入这个目录,其中包含了三个文件:login.php
、logout.php
和main.php
。在第三个文件中发现了如下图中的语句。
那么是不是只要执行这个php文件就可以获取到joanna的私钥了?赶紧执行以下,果然还是跳出了permission denied。
看一下端口状态,发现有个可疑的高端口建立了tcp连接,会不会是正在执行这个文件呢?
使用curl访问一下这个地址,返回了login.php的源代码,看来这个端口就是用来执行/var/www/internal
目录中的文件的,赶紧访问一下main.php,惊喜的发现了私钥。
可是我开始疑惑,/var/www/internal
目录是属于jimmy用户的,同时之前的步骤也证实了jimmy是没有权限获取joanna目录的文件的。我先讲main.php文件中获取rsa私钥的那句话注释掉,再访问52846端口,发现更改后的文件被执行了,没有获取到私钥。接着我又将注释取消再次访问端口,rsa私钥被重新获取了。为什么呢?是什么进程执行了这个文件,并且拥有joanna目录的权限?我在这里想了很久没想通,后来问了一位朋友,在他指导下发现了在apache配置文件路径/etc.apache2/sites-available
中有一个internal.conf文件,配置了一个虚拟主机,运行在52846端口,文件路径就是/var/www/internal
,并且以joanna用户运行。
问题解决之后就可以愉快的继续做靶机了。将joanna的私钥下载到本地快乐连接ssh,发现需要passphrase
,可以理解为保护rsa私钥的口令。
用开膛手杰克john the ripper
工具破解一发,血腥忍者bloodninjas
。

Root
root权限的获取很简单,查看一下joanna能以root权限执行的命令。看到有一个不用密码就能执行的命令。
打开nano,control+R读取文件,直接获得root.txt。