黑客信息网IDE插件开发_代码审计之多项拼接型SQLi-2

访客4年前黑客文章681

一、背景

代码审计,想必搞安全的同学再熟悉不过了,和标题中的IDE 插件有什么关系呢?莫不是标题党?
偶然挖洞闲暇时,发现了陌陌安全SRC的一个公告SAST开源,赶紧去撸一波源码,最终以看不懂为由挂机了。因此我决定从IDE插件开发学起,撸光它的码子。安全行业难能可贵的是开源精神,谢谢大厂。有请今天的主角momo-code-sec-inspector-java。大家可以先看着源码,看不懂了我们在来看看我下面的从0到1学开发插件。

上一篇介绍完IDEA插件开发的环境准备以及之一个插件开发,从本篇内容开始就对审计不同漏洞类型的代码进行分析,如下表,本篇为1001 拼接SQLi

编号规则名称修复建议一键修复
1001多项式拼接型SQL注入漏洞T
1002占位符拼接型SQL注入漏洞T
1003Mybatis注解SQL注入漏洞TT
1004Mybatis XML SQL注入漏洞TT
1005RegexDos风险TT
1006Jackson反序列化风险TT
1007Fastjson反序列化风险TT
1008Netty响应拆分攻击TT
1009固定的随机数种子风险TT
1010XXE漏洞TT
1011XStream反序列化风险TT
1014脆弱的消息摘要算法T
1015过时的加密标准T
1016XMLDecoder反序列化风险T
1017LDAP反序列化风险TT
1018宽泛的CORS Allowed Origin设置T
1019SpringSecurity关闭Debug模式TT
1020硬编码凭证风险T
1021"@RequestMapping" *** 应当为 "public"TT
1022Spring 会话固定攻击风险TT
1023不安全的伪随机数生成器TT
1024OpenSAML2 认证绕过风险TT
1025IP地址硬编码T

二、 插件代码分析

2.1 知识储备

java_sec_code

提供了java漏洞代码示例,非专业程序猿请勿模仿,这是漏洞代码,漏洞代码,漏洞代码

代码审计官方示例

提供代码审计模板,可以git clone下来以此为模板

PSI理解

PSI是IDEA 插件开发里面一个特殊命名(Program Structure Interface)

PSI负责解析文件并创建语法和语义代码模型,以支持jetbrains的所有产品语言

通俗的来讲,PSI文件就是一棵大树,那这棵大树就是文件,大树上有很多枝丫,这些枝丫就是PSI element,枝丫上的所有小枝丫都是element
image

PsiViewer 插件安装

这个插件便于我们理解代码中重写 *** 的选择,也是IDEA开发获取psi element的一个辅助工具PsiViewer

也可以在plugin中搜索安装

image

官方SDK文档
SDK文档

2.2 项目结构图

image

2.3 代码审计流程

1、从plugin.xml 读取功能类及相关介绍描述

2、功能类继承IDEA 相关API,例如代码审计需继承

查看功能类

image-20210218140335655.png

进入BaseSQLi,这个类是检测SQL注入的一些前置条件,可以通过里面的 *** 来检测sql语句是否满足这些条件
image-20210218140424887.png

进入MomoBaseLocalInspectionTool后2个父类就是LocalInspectionTool
image-20210218140556873.png

3、功能类遍历正在浏览/编辑的java文件,利用我们重写的功能类 *** 匹配来发现有问题代码

4、将问题代码高亮显示,并提供问题详情和修复建议

image-20210218140700519.png

5、使用ALT + ENTER 自动修复
image-20210218140719383.png

修复后代码样例

image-20210218140804568.png

2.4 拼接SQL注入代码审计

下面是漏洞代码

下面是功能类

变量

如果匹配了代码审计规则,就会代码高亮,并显示问题msg

变量

如果有修复方案,ALT + ENTER会显示修复 msg

变量
修复建议提示名称(alt + enter后的名称)和帮助提示
image.png

*** 是用来访问PSI 文件的一个父类 *** ,返回PSI element,所有审计代码都在重写这个 *** 。

就是当前查看/编辑文件对象,也就是 LocalInspection类的实例,通过 *** 里面的rule来找到有问题的代码段后返回。
image-20210218152344246.png

PSI 元素中拼接的String(拼接的必须带变量) ,约定元素名为: PsiPolyadicExpression
image-20210218154558432.png

所以重写的 *** 为:来寻找拼接SQLi
image-20210218154714334.png

中的局部变量List exps是MoExpressionUtils类的实例,将拼接语句split 后分为3段,保存进 list。
image-20210218165620128.png

是exps利用stream() *** 将list 元素转换为 string
image-20210218172301732.png

①判断转换后的expstr是否是sql 语句,如果是sql 格式,②则再判断 exps LIST中的元素type是否为String,如果是则将String s append 进入 StringBuilder *** 中,通过for循环最终将 *** 添加到List sql_segments中。如果segments为空则idea告警为(字符串拼接有多种方式String.format也可以拼接),否则为拼接型SQLi

image-20210220094215167.png

①判断代码 BaseSQLi.java

②判断代码先判断是否在定义的三个类型 type中
image-20210220094800389.png

使用PsiViewer来查看 exps的type类型
image-20210219185058696.png

对判断结果进行告警
image-20210219191013948.png
image-20210220095130608.png
image-20210220095113116.png

三、总结

本篇讲的是拼接型SQLI 审计讲解,陌陌安全代码中还判断了是否是占位符型的SQLi,其实是多余了,因为在重写的 *** 后,接收的expression 只有 PsiPolyadicExpression, 占位符SQL注入的类型是PsiMethodCallExpression。如有不对之处还请大家评论区帮忙更正,谢谢!我下一节讲占位符SQLi类型,请关注我,及时看到更新哦。
image-20210220102932847.png

相关文章

ai智能语音机器人怎么样(2018AI智能语音机器人排

ai智能语音机器人怎么样(2018AI智能语音机器人排

美萍电销机器人是什么 美萍智能电销机器人是美萍网络技术有线公司研发的一款适用于产品业务或服务推广需求的语音营销服务产品! 通过语音平台,群呼潜在客户群体,并模拟销售员工沟通进行信息筛选的人工智...

如何悄悄登陆领导的微信,又不被发现

孩子胃口好吃得多才能长得好,所以说大家都比较希望看到孩子有满满的食欲,不过孩子吃不进去怎么办,孩子总是没有食欲应该怎么做呢,友谊长存小编就来说说吧。 孩子什么时候吃饭比较好 6个月 宝宝6个月大...

区块链是什么?什么叫区块链

区块链是什么?什么叫区块链

一、区块链的定义 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。特点是:各个区块相互监督,互不干扰,一个损害,不受其他影响,数据不可篡改。即去中心化、可扩展化、去...

男生惦记一个女生会有哪些表现呢 不被对方发现

如果爱情真的可以全部毒药都不被入侵,并且是无懈可击的,那么最后就没有那么多麻烦了,所以有时候是因为不断的失望,最后让失望一直萦绕在心头,舍不得放手,必须要完美,最后第一个转身的人就变成了最痛苦的一个。...

房产知识:公积金贷款购房需要个税完税凭

相信现在有很多的朋友们对于公积金贷款购房需要个税完税凭证吗?都想要了解吧,那么今天小编就来给大家针对公积金贷款购房需要个税完税凭证吗?进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 一...

怎么找黑客社群(社群怎么找)

现在微信社群比较多!让别人拉你进去!或者搜索关键字QQ群加入 选一个好的社群才能对自己有帮助,新生大学社群才是你的不二选择 这么受欢迎的群,还用问靠谱吗?口碑很好的,新生大学社群我自己就加入了,对我帮...