文章预览
原文由作者授权,首发在奇安信攻防社区 https://forum.butian.net/share/1844 MyBatis 默认是支持OGNL 表达式的,在特定的情况下能从SQL注入转化到RCE的利用。同时在某些情况下还能绕过一些已有的安全机制。 0x00 背景 Mybatis是java生态中比较常见的持久层框架。在MyBatis3开始提供了使用Provider注解指定某个工具类的方法来动态编写SQL。常见的注解有: @SelectProvider @InsertProvider @UpdateProvider @DeleteProvider 跟所有ORM框架一样,若使用不当,会存在SQL注入风险。(只要是通过SQL拼接,都会存在风险。) 在实际业务中发现一处Provider注入的case, 当前漏洞已经修复完毕 。提取关键的的漏洞代码做下复盘。 查看mapper代码,可以看到name参数直接通过SQL拼接的方式进行查询,如果用户可控的话,会存在SQL注入风险: @SelectProvider(type = UserProvider.class, method = "getUserByName") List getUs
………………………………