国产软件漏洞分析系列3:泛微OA e-cology 8.1代码审计(1)
整体浏览了一下代码,大概翻了一下。大概就能明白为什么总是报出来sql注入、xss跨站脚本攻击了。
我随便拿了一个类来给大家分析一下:
/* */ import java.io.File;
/* */ import java.io.FileInputStream;
/* */ import java.io.IOException;
/* */ import java.util.ArrayList;
/* */ import java.util.zip.ZipInputStream;
/* */ import weaver.conn.RecordSet;
/* */ import weaver.file.DocAttachment;
/* */ import weaver.general.Util;/* */
/* */ public class DocAttachment
/* */ {
/* */ private String _docId;
/* */ private ArrayList _attachNames;
/* */ private ArrayList _attachSizes;
/* */ private ArrayList _attachIds;
/* */
/* */ public DocAttachment(String paramString) {
/* 28 */ this._docId = paramString;
/* 29 */ this._attachNames = new ArrayList();
/* 30 */ this._attachSizes = new ArrayList();
/* */
/* 32 */ this._attachIds = new ArrayList();
/* 33 */ setFileSize();
/* */ }
/* */
/* */
/* */
/* */
/* */
/* */ public void initData() {
/* 41 */ if (this._docId == null || this._docId.equals("")) {
/* */ return;
/* */ }
/* */
/* 45 */ String str1 = "";
/* 46 */ RecordSet recordSet = new RecordSet();
/* 47 */ str1 = "SELECT t2.imagefileid,t2.imagefilename, t2.filerealpath, t2.iszip FROM DocImageFile t1, ImageFile t2 WHERE t1.docid = " + this._docId + " AND t1.imagefileid = t2.imagefileid";
/* */
/* */
/* 50 */ String str2 = "";
/* 51 */ File file = null;
/* */
/* 53 */ recordSet.executeSql(str1);
/* 54 */ while (recordSet.next()) {
/* */
/* */ try {
/* 57 */ file = new File(Util.null2String(recordSet.getString("filerealpath")));
/* */
/* 59 */ if (file.exists())
/* */ {
/* 61 */ this._attachNames.add(Util.null2String(recordSet.getString("imagefilename")));
/* 62 */ long l = 0L;
/* 63 */ str2 = Util.null2String(recordSet.getString("iszip"));
/* 64 */ if (str2.equals("1")) {
/* 65 */ ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
/* 66 */ if (zipInputStream.getNextEntry() != null) {
/* 67 */ while (zipInputStream.read() != -1) {
/* 68 */ l++;
/* */ }
/* 70 */ this._attachSizes.add(String.valueOf(l));
/* */ }
/* */
/* 73 */ zipInputStream.closeEntry();
/* 74 */ zipInputStream.close(); continue;
/* */ }
/* 76 */ l = file.length();
/* 77 */ this._attachSizes.add(String.valueOf(l));
/* */ }
/* */
/* 80 */ } catch (IOException iOException) {
/* 81 */ iOException.printStackTrace();
/* */ }
/* */ }
/* */ }
/* */
/* */
/* */ public void setFileSize() {
/* 88 */ if (this._docId == null || this._docId.equals("")) {
/* */ return;
/* */ }
/* */
/* 92 */ String str1 = "";
/* 93 */ RecordSet recordSet = new RecordSet();
/* 94 */ str1 = "SELECT t2.imagefileid,t2.imagefilename, t2.filerealpath, t2.iszip FROM DocImageFile t1, ImageFile t2 WHERE t1.docid = " + this._docId + " AND t1.imagefileid = t2.imagefileid and (t2.fileSize='0' or t2.fileSize is null)";
/* */
/* */
/* 97 */ String str2 = "";
/* 98 */ File file = null;
/* */
/* 100 */ recordSet.executeSql(str1);
/* 101 */ while (recordSet.next()) {
/* */
/* */ try {
/* 104 */ file = new File(Util.null2String(recordSet.getString("filerealpath")));
/* 105 */ this._attachNames.add(Util.null2String(recordSet.getString("imagefilename")));
/* 106 */ this._attachIds.add(Util.null2String(recordSet.getString("imagefileid")));
/* 107 */ if (file.exists()) {
/* */
/* */
/* */
/* 111 */ long l = 0L;
/* 112 */ str2 = Util.null2String(recordSet.getString("iszip"));
/* 113 */ if (str2.equals("1")) {
/* 114 */ ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
/* 115 */ if (zipInputStream.getNextEntry() != null) {
/* 116 */ while (zipInputStream.read() != -1) {
/* 117 */ l++;
/* */ }
/* 119 */ this._attachSizes.add(String.valueOf(l));
/* */ }
/* */
/* 122 */ zipInputStream.closeEntry();
/* 123 */ zipInputStream.close(); continue;
/* */ }
/* 125 */ l = file.length();
/* 126 */ this._attachSizes.add(String.valueOf(l));
/* */ continue;
/* */ }
/* 129 */ this._attachSizes.add("-1");
/* */ }
/* 131 */ catch (IOException iOException) {
/* 132 */ iOException.printStackTrace();
/* */ }
/* */ }
/* 135 */ for (byte b = 0; b < this._attachIds.size(); b++) {
/* 136 */ recordSet.executeSql("update ImageFile set fileSize = '" + (String)this._attachSizes.get(b) + "' where imagefileid = " + (String)this._attachIds.get(b));
/* */ }
/* */ }/* 146 */ public ArrayList getAttachmentNames() { return this._attachNames; }/* 154 */ public ArrayList getAttachmentSizes() { return this._attachSizes; }
/* */ }/* Location: D:\WEAVER\ecology\classbean\!\weaver\file\DocAttachment.class* Java compiler version: 6 (50.0)* JD-Core Version: 1.0.2*/
请注意
- 在函数initData中,是直接使用sql语句进行数据库查询。没有使用任何其他封装架构。
- sql语句中使用了类变量_docId,但是使用之前没有做任何过滤
- 类变量_docId赋值是在构造函数中,构造函数的参数paramString直接赋值给类变量_docId,没有进行任何过滤
- 这里完全可以肯定,如果这个类被直接用在某个请求中,有出现漏洞的可能
- 这个类就完全不符合不信任原则,不是每个开发人员都会对系统的所有输入进行完全检查,只要有任何地方出现可以被绕开的可能性,那就马上会把整个系统暴露在攻击者的面前
另外我看到如上面这种类,基本上是整个系统的常态,这就是怪不得厂商不断发布sql注入和xss跨站攻击的补丁的原因。架构设计的不合理性,在一次一次的需求迭代过程中,不断的被各种摧毁再重建。
国产软件漏洞分析系列3:泛微OA e-cology 8.1代码审计(1)相关推荐
- 国产软件CVE漏洞分析系列:泛微OA系统 漏洞编号:SSV-91661
今天开始扒拉一下各种国产软件已经公布的漏洞,有些公司自己把漏洞保密起来,其实真是傻啦吧唧的,以为不让大家知道,漏洞就不存在吗!没办法,可能也是为了上市公司的股价吧.普通人对于漏洞的理解还是有点狼来了的 ...
- 国产软件漏洞分析系列2:泛微OA e-cology 8/9 安全补丁分析之file
首先我们看一下FileManage类 package ecology.classbean.weaver.file; public class FileManage 关注到增加了一个import类Fil ...
- php eteams,应用安全 - 软件漏洞 - 泛微OA漏洞汇总
SQL注入 前台SQL注入 用户名:admin' or password like 'c4ca4238a0b923820dcc509a6f75849b' and 'a'='a 密码: 1 验证页面参数 ...
- 泛微OA系统多版本存在命令执行漏洞
0x01漏洞描述 泛微OA办公系统是一款协调办公软件. 泛微协同商务软件系统存在命令执行漏洞,攻击者可利用该漏洞获取服务器权限. 0x02漏洞危害 攻击者可以通过精心构造的请求包在受影响版本的泛微OA ...
- 0day安全:软件漏洞分析技术(第2版)
0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清 张东辉 周浩 王继刚 赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...
- 机器学习:软件漏洞分析
Software Vulnerability Analysis and Discovery Using Machine-Learning and Data-Mining Techniques: A S ...
- 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》
本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...
- oracle 权限问题9017,泛微OA 曝出WorkflowCenterTreeData接口注入漏洞(限oracle数据库)
玄蜂安全团队10月10日了解到.泛微OA又双叒叕曝出了一个高危漏洞.其存在点是企业使用Oracle数据库在其系统的WorkflowCenterTreeData接口处会因为内置SQL语句拼接不严导致的一 ...
- 泛微OA V8 SQL注入漏洞和文件上传漏洞
fofa语句 app="泛微-协同办公OA" SQL注入 在泛微OA V8中的getdata.jsp文件里,通过gatData方法将数据获取并回显在页面上,而在getData方法中 ...
最新文章
- 通过sqlserver日志恢复误删除的数据
- 特征工程:特征生成,特征选择(三)
- 包含绑定变量的sql进行调优需注意一点
- java 正序a~z_Flutter MapString, dynamic 、ListString a-z 排序
- 程序环境——翻译环境与执行环境
- 【视频】vue动态绑定css样式
- 如果有人问你什么是大数据?不妨说说这10个典型的大数据案例
- C#使用CurrentUICulture切换语言
- android高通WiFi,高通QCA9377 WiFi蓝牙模块芯片介绍,
- Ubuntu对CPU进行测试
- python列表所有元素平均值_python—组合数据类型
- Ionic3 Demo
- 【MySQL】不建议使用分区表
- PSI_压力阻塞信息
- 企业WiFi认证 保护企业的信息
- 【协程】MyCoroutine轻量级协程框架代码详细剖解
- 推荐了这些好书,你看过几本啦?
- 数学建模--数学规划模型Python实现
- 爬虫易烊千玺影响力榜单(利用浏览器驱动的方法)
- 发那科机器人回原位置先上升_发那科机器人自动碰撞恢复功能