来源:FreeBuf.COM链接:https://www.freebuf.com/vuls/240578.html前言SQL注入漏洞是WEB安全中最常见的漏洞之一。它们已使用Java中的各种ORM框架进行了预编译。
使用中,注射问题也越来越少。 Java Web应用程序的多个框架的组合常常使新手代码审核员感到害怕。
他们不知道如何开始。他们希望以Mybatis框架使用不当引起的SQL注入问题为例,向新手提供一些想法。
1. Mybatis的SQL注入Mybatis的SQL语句可以在基于注释的类方法的顶部编写,并且更多信息以xml的方式写入xml文件。 Mybatis中的SQL语句需要由我们自己手动编写或由生成器自动生成。
编写xml文件时,Mybatis支持两个参数符号,一个是#,另一个是$。例如:id =“ queryAll”; resultMap =“ resultMap” SELECT * FROM NEWS WHERE ID =#{id}使用预编译,$使用拼接SQL。
在Mybatis框架下,在以下三种情况下容易发生SQL注入漏洞:1.模糊查询从标题为'%#{title}%&#39的新闻中选择*;在这种情况下,使用#program将报告错误,新手程序员将#号更改为$,这样,如果java代码级别未处理用户输入的内容,将不可避免地导致SQL注入漏洞。正确编写:从新闻中选择*,例如concat('%',#{title},'%')之类的消息。
2.当查询多个ID时,使用in之后的多个参数在in#之后,相同的消息将报告错误,从(* {{ids})中id中的新闻中选择*。 item =“ item” open =”((“ separatosr =”,“ close =”)”>#{ids} 3.排序之后,应将此场景映射到Java级别,设置一个字段/数组表名,仅允许用户传递索引值。
这样可以确保传入的字段或表名称在白名单中。应该注意的是,在由mybatis-generator自动生成的SQL语句中,order by也使用$,并且like和in都没有问题。
二,实际作战思路我们使用开源cms进行分析,java sql注入问题适合于反向推理,首先搜索xml查找可能的注入漏洞→反向推送到DAO→然后到实现类→通过以下方式找到前台URL调用链,找到使用点,让我们不再谈论它。 1.将想法导入项目“想法”主页,单击“从版本控制获取”,输入https://gitee.com/mingSoft/MCMS.git完成下载,然后等待maven下载项目。
2.搜索$ Keyword Ctrl + Shift + F调用“在路径中查找”,过滤后缀xml,根据需要使用Dao xml根据文件名搜索$关键字,以IContentDao.xml为例,双击打开,按Ctrl + F搜索$,在16个数据库中查找前三个以进行数据库选择,跳过,通过暂时将其搁置,继续查看可疑的顺序,继续往下看,查找多个常见的拼接,这一点更易于使用,让我们以此为例进行更深入的研究,仅搜索id。前端的输入在哪里? 3.搜索映射对象Mybatis的选择ID与要映射的对象名称相对应。
我们使用getSearchCount作为关键字搜索映射的对象,并搜索分别对应于映射对象的IContentDao.java,IContentDaoimpl.java和McmsAction.java,该对象的实现类和前端控件直接跳转到控制器类,发现只有categoryIds与目标参数id相似,需要进一步确认。返回IContentDao.java,继续反向查找id作为getSearchCount的最后一个参数,alt + F7查看调用链并转移到ContentBizImpl,确认前端参数为categoryIds,然后返回McmsAction,该参数由BasicUtil接收。
getString,跟进BasicUtil.getString并继续跳转到SpringUtil.getRequest(),前端未处理,SQL注入是真正的锤子确认项目正在运行,构造sql语句http:// loc alhost:8080 /ms-mcms/mcms/search.do?categoryId=1%27)%20%20or+updatexml(1,concat(0x7e,(SELECT+%40%40version),0x7e),1)%23获得mysql版本5.7。 27,验证注入是否存在。
3.总结我特别推荐一种高质量的内容共享架构+算法。如果您没有关注,则可以长按以遵循它:长按以订阅更多令人兴奋的内容▼如果您已了解,请单击以查看,由衷感谢您是Mybatis sql注入审核的基本方法,我们还没有分析几点,也有问题,新手可以尝试。