整体浏览了一下代码,大概翻了一下。大概就能明白为什么总是报出来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*/

请注意

  1. 在函数initData中,是直接使用sql语句进行数据库查询。没有使用任何其他封装架构。
  2. sql语句中使用了类变量_docId,但是使用之前没有做任何过滤
  3. 类变量_docId赋值是在构造函数中,构造函数的参数paramString直接赋值给类变量_docId,没有进行任何过滤
  4. 这里完全可以肯定,如果这个类被直接用在某个请求中,有出现漏洞的可能
  5. 这个类就完全不符合不信任原则,不是每个开发人员都会对系统的所有输入进行完全检查,只要有任何地方出现可以被绕开的可能性,那就马上会把整个系统暴露在攻击者的面前

另外我看到如上面这种类,基本上是整个系统的常态,这就是怪不得厂商不断发布sql注入和xss跨站攻击的补丁的原因。架构设计的不合理性,在一次一次的需求迭代过程中,不断的被各种摧毁再重建。

国产软件漏洞分析系列3:泛微OA e-cology 8.1代码审计(1)相关推荐

  1. 国产软件CVE漏洞分析系列:泛微OA系统 漏洞编号:SSV-91661

    今天开始扒拉一下各种国产软件已经公布的漏洞,有些公司自己把漏洞保密起来,其实真是傻啦吧唧的,以为不让大家知道,漏洞就不存在吗!没办法,可能也是为了上市公司的股价吧.普通人对于漏洞的理解还是有点狼来了的 ...

  2. 国产软件漏洞分析系列2:泛微OA e-cology 8/9 安全补丁分析之file

    首先我们看一下FileManage类 package ecology.classbean.weaver.file; public class FileManage 关注到增加了一个import类Fil ...

  3. php eteams,应用安全 - 软件漏洞 - 泛微OA漏洞汇总

    SQL注入 前台SQL注入 用户名:admin' or password like 'c4ca4238a0b923820dcc509a6f75849b' and 'a'='a 密码: 1 验证页面参数 ...

  4. 泛微OA系统多版本存在命令执行漏洞

    0x01漏洞描述 泛微OA办公系统是一款协调办公软件. 泛微协同商务软件系统存在命令执行漏洞,攻击者可利用该漏洞获取服务器权限. 0x02漏洞危害 攻击者可以通过精心构造的请求包在受影响版本的泛微OA ...

  5. 0day安全:软件漏洞分析技术(第2版)

    0day安全:软件漏洞分析技术(第2版) 基本信息 作者:王清   张东辉   周浩   王继刚   赵双 丛书名:安全技术大系 出版社:电子工业出版社 ISBN:9787121133961 上架时间 ...

  6. 机器学习:软件漏洞分析

    Software Vulnerability Analysis and Discovery Using Machine-Learning and Data-Mining Techniques: A S ...

  7. 书评第003篇:《0day安全:软件漏洞分析技术(第2版)》

    本书基本信息 丛书名:安全技术大系 作者:王清(主编),张东辉.周浩.王继刚.赵双(编著) 出版社:电子工业出版社 出版时间:2011-6-1 ISBN:9787121133961 版次:1 页数:7 ...

  8. oracle 权限问题9017,泛微OA 曝出WorkflowCenterTreeData接口注入漏洞(限oracle数据库)

    玄蜂安全团队10月10日了解到.泛微OA又双叒叕曝出了一个高危漏洞.其存在点是企业使用Oracle数据库在其系统的WorkflowCenterTreeData接口处会因为内置SQL语句拼接不严导致的一 ...

  9. 泛微OA V8 SQL注入漏洞和文件上传漏洞

    fofa语句 app="泛微-协同办公OA" SQL注入 在泛微OA V8中的getdata.jsp文件里,通过gatData方法将数据获取并回显在页面上,而在getData方法中 ...

最新文章

  1. 通过sqlserver日志恢复误删除的数据
  2. 特征工程:特征生成,特征选择(三)
  3. 包含绑定变量的sql进行调优需注意一点
  4. java 正序a~z_Flutter MapString, dynamic 、ListString a-z 排序
  5. 程序环境——翻译环境与执行环境
  6. 【视频】vue动态绑定css样式
  7. 如果有人问你什么是大数据?不妨说说这10个典型的大数据案例
  8. C#使用CurrentUICulture切换语言
  9. android高通WiFi,高通QCA9377 WiFi蓝牙模块芯片介绍,
  10. Ubuntu对CPU进行测试
  11. python列表所有元素平均值_python—组合数据类型
  12. Ionic3 Demo
  13. 【MySQL】不建议使用分区表
  14. PSI_压力阻塞信息
  15. 企业WiFi认证 保护企业的信息
  16. 【协程】MyCoroutine轻量级协程框架代码详细剖解
  17. 推荐了这些好书,你看过几本啦?
  18. 数学建模--数学规划模型Python实现
  19. 爬虫易烊千玺影响力榜单(利用浏览器驱动的方法)
  20. 发那科机器人回原位置先上升_发那科机器人自动碰撞恢复功能

热门文章

  1. python-关于爬虫爬取36kr数据
  2. 基于JAVA的图片相似度比对
  3. 主数据管理实施四部曲概论
  4. 联播大业王恒:国债期货上市后的三种股票有望成为流行品种
  5. 云海麒麟服务器管理中心起火,云海麒麟与中标麒麟联合构建安全可控服务器
  6. 期货反向跟单的路还能走多远?
  7. geoip是什么 linux_GeoIP安装使用
  8. 分屏状态下分出的屏幕提示超出显示范围
  9. 安卓USB绑定RNDIS驱动的详细安装教程
  10. bootstrap搜索下拉框:bootstrap-select