MyBatis中Ognl引起的RCE
过完年了,继续肝
记录一个新学到的知识MyBatis中Ognl引起的RCE
奇安信攻防社区-从一道CTF题浅谈MyBatis与Ognl的那些事 (butian.net)
之前没见过,记录一下。
就是mybatis中的在生成sql使用的是${}
、#{}
蛮,并且mysql支持ognl表达式
在封装sql时会解析${}
中的内容,然后导致ognl表达式
常见的场景一般是如下配置:
1 | <select id="getUserByUserName" parameterType="String" resultMap="User"> |
Mybatis的设计者在设计之初就考虑到了这一个风险,实际情况在解析时只会解析原有的${username},解析完毕后再把用户输入的值赋予给他。避免了RCE的利用。
所以总结一下,实战中貌似很鸡肋。因为需要使用Provider注解指定某个工具类的方法来动态编写SQL
,才能利用
例如:
1 | @SelectProvider(type = FindUserByName.class, method = "getUser") |
开发中应该几乎没有人会这样吧!