最近研究的东西有些碎片化,简单记录记录
CodeQL是一个开源的代码审计引擎,距离发布有些时间了。最近看其他师傅的公众号又开始写用codelqlpy(写好检测规则的项目)来审计代码,我也用项目来审下最新版的Springblade来看看有啥新鲜的东西。
安装步骤省略,进入运行项目,代码审计就运行以下三条命令:
python main.py -t C:Users13740IdeaProjects3SpringBlade
codeql database create out/database/SpringBlade --language=java --command="C:Users13740hacktoolCodeQLpy-masterCodeQLpy-masteroutdecoderun.cmd" --overwrite
python main.py -d C:Users13740hacktoolCodeQLpy-masterCodeQLpy-masteroutdatabaseSpringBlade
首先运行python main.py -t C:Users13740IdeaProjects3SpringBlade
maven会编译项目文件
运行codeql database createout/database/SpringBlade --language=java --command="C:Users13740hacktoolCodeQLpy-masterCodeQLpy-masteroutdecoderun.cmd" --overwrite
为springblade生成codeql的数据库,方便之后进行代码审计分析source(输入)和sink(输出)
运行
python main.py -d C:Users13740hacktoolCodeQLpy-masterCodeQLpy-masteroutdatabaseSpringBlade
开始代码审计,审计的时间很漫长,基本跑完才只发现了硬编码的东西
去SinkPath的代码里追踪看看,发现只是写死的默认密码123456
说明在重置密码和导入用户时,会设置密码默认为123456,算不上什么漏洞(弱口令?)
再手动分析下老版本的${ew.customSqlSegment}造成的SQL注入
上面的占位符允许用户自定义sql语句拼接到查询语句中,造成SQL注入
全局搜一下,发现新版里面还是带着这个语句的
在导出行政区划这个接口里面
测试一下,发现报错语句被过滤了
日志中显示SQL过滤语句被命中了
进代码看下,过滤的很全,增删改查语句都被过滤了
但是报错语句只过滤了updatexml,是不是还有其他报错语句可用
翻了下使用示例,发现除了extractvalue和updatexml其他的报错注入似乎都要依赖select,而select被过滤了,就只有extractvalue可以简单用用
能回显几个Mysql的函数值,比如数据库名称、路径、用户名等
不过SQL查数据什么的就不用想了,属于是被围追堵截,查不出来的
原文始发于微信公众号(HackingWiki漏洞感知):代审工具CodeQLpy的简单使用与Springblade SQL注入修复简析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论