Ecology9 SQLi

admin 2025年6月24日23:29:20评论13 views字数 1323阅读4分24秒阅读模式
前言
前段时间运气好捡到的一个注入,简单讲讲原理。
漏洞分析
漏洞页面为:/js/hrm/getdata.jsp,这块在EC9内置存在大量文件形式以及类形式的安全规则,通过分析SecurityMain逻辑以及SecurityRuleCommForbidden等安全规则得到该页面可访问,除此之外在EC9中其实存在很多SQL拼接点,重点在于EC9不知道从什么版本开始在请求处理过程中会对请求对象包装并重写方法以达到安全过滤的目的,也导致我们直接传参带有SQL注入Payload会被转为圆角字符无法实现拼接注入,所以切入点就是找存在解码或解密的功能点(例如EC9前一个注入点就是找的一个AES加解密点),而getdata.jsp正符合该条件,其内部会对参数进行二次URL解码,分析JSP页面逻辑相关SQL点均已做了处理(测试版本为74,5月最新版本),不过在其末尾当cmd不在预定义处理逻辑分支的时候会执行如下代码
Ecology9 SQLi
这里调用到 AjaxManager#getData 方法,其主要逻辑在此处的proc方法里面
Ecology9 SQLi
在proc方法中根据cmd进行不同处理,分析这里逻辑发现存在多个看着可以注入的点,不过测试发现仅几个可用,原因为SecurityRuleGetData中进行一些安全校验,分析该安全规则发现自定义不同cmd的和相关参数做了不同处理,而且看得出来应该是就历史爆洞的修复逻辑,除此之外这里面针对于参数的校验逻辑也存在几种,例如本次漏洞其中一处点的利用参数arg0的校验,可以看到就进行解码以及特征字符串判断('、%)
Ecology9 SQLi
Ecology9 SQLi
由于不能出现这两个特殊字符所以只能找数字型注入点(无需闭合'),而proc方法中刚好存在符合条件的点,例如savect
Ecology9 SQLi
Ecology9 SQLi
Ecology9 SQLi
Ecology9 SQLi
Ecology9 SQLi
这里获取参数解码调用
weaver.framework.BaseManager#get(java.lang.Comparable)并最终在weaver.hrm.chart.dao.HrmChartSetDao#find 方法中拼接实现SQL注入,且为数字型注入,不需要担心 ' 问题,不过在利用构造POC的时候还是需要解决该问题,因为此处点位是一个盲注点,在实战利用需要利用延时判断执行成功与否,在SQLServer中wait for后面那段常量字符串需要'包裹,解决方法也简单,变量+concat,最后就是在发包时候需要URL编码所有字符。
declare @delaytime nvarchar(100)/**/set @delaytime=concat(char(48),char(58),char(48),char(58),char(53))/**/waitfor delay @delaytime 
以上就漏洞点的部分,除此之外较新版本EC9默认自带RASP,相比前面这些漏洞点的寻找后面绕过RASP更有以上,不过考虑其思路应该在其他应用可复用暂不公开(没必要自己卷自己,不过可以简单提示下存在两种思路绕过),至于漏洞发现也简单个人是找的sink回溯找source。
结语
朋友给我发了个分析pdf里面分析了个任意SQL执行,哥们咱就是说这规则加上去客户被打了真好交差吗。

原文始发于微信公众号(安全之道):Ecology9 SQLi

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月24日23:29:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Ecology9 SQLihttps://cn-sec.com/archives/4195912.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息