MVEL注入漏洞挖掘

极客

MVEL注入漏洞挖掘:从0到1的实战手记,我踩过的那些坑

哎,兄弟们,今天咱们来聊聊MVEL注入漏洞挖掘这件事儿,说真的,我一开始接触这玩意儿的时候,整个人是懵的——什么MVEL?跟EL表达式有啥区别?后来在实战中被虐了一遍又一遍,才算是摸到点门道,这篇文章我就把自己踩过的坑、流过的泪,全都掏心窝子跟你们说说。

先搞清楚,MVEL到底是啥?

MVEL(MVFLEX Expression Language)是一种Java平台上的动态表达式语言,它允许你在运行时执行表达式,很多Java应用为了灵活性,会用MVEL来处理规则引擎、模板渲染或者权限校验,听起来挺高大上的对吧?但问题就出在——如果参数不可控,MVEL表达式就是一把打开你服务器的万能钥匙!

我当时挖第一个MVEL漏洞的时候,感觉就像在玩“大家来找茬”——明明代码逻辑看着没问题,可只要你往参数里塞点特殊payload,服务器就直接给你来个“全家桶”访问,唉,这滋味儿,谁挖谁知道啊!

漏洞挖掘第一课:找入口点,别像个无头苍蝇

兄弟们,挖掘MVEL注入漏洞第一步不是直接怼payload,而是找入口点,我当时傻乎乎地看到有参数就往里塞payload,结果全是404,心态直接崩了,后来才明白,MVEL注入的关键在于:

  1. 搜索代码中的MVEL.eval()MVEL.executeExpression()这类函数——这是最直接的入口。
  2. 留意规则引擎相关的接口,很多业务会把用户输入直接拼到MVEL表达式里,那叫一个酸爽。
  3. 看API文档和数据流,你要知道数据是从哪进来的,经过哪些过滤(如果有的话),最后到哪执行。

有一次,我在一个权限校验的地方发现了个参数rule,直接传给了MVEL,我当时心里就是一喜:这不就是“人间天堂”吗?果不其然,payload一把梭,直接命令执行了,哎,那种感觉啊,就像大夏天喝冰可乐,爽!

实战payload:别只会Runtime.exec()

很多新手一上来就喜欢用Runtime.exec("id"),但兄弟们,实战中很多环境是有限制的,我挖到过几个地方,Runtime被禁了,咋办呢?换思路啊!

我当时用的payload是:

java.lang.Runtime.getRuntime().exec("id")

如果这个不行,就试试反射绕过:

''.class.forName('java.lang.Runtime').getRuntime().exec('id')

诶,这里插一句,不同的MVEL版本,payload的写法也有差异,老版本可能更容易被绕过,新版本加了沙箱,但……沙箱本身也可能有洞,嘿嘿,我建议你们多收集一些payload变体,像我一样建个备忘录,不然临时抱佛脚,搞不定啊!

那些年我踩过的坑:过滤器和WAF

哈哈,说到这个我就来气!有一次,我信心满满地找到了一个MVEL注入点,结果人家在前端做了黑名单过滤,Runtimeexec全被禁了,我试了各种大小写混合、编码绕过,就是过不去,急得我直挠头。

后来我想到一个歪招——用ProcessBuilder替代Runtime

new java.lang.ProcessBuilder('id').start()

诶,这玩意儿居然绕过去了!所以说啊,别一根筋死磕,灵活应变才是王道,当时我高兴得差点从椅子上蹦起来,那种成就感,真的,比打游戏赢了还爽!

深入挖掘:不止于命令执行

别以为MVEL注入就只能弹个计算器或者执行个id命令,我告诉你们,利用得当,你还能读文件、写文件、SSRF、甚至穿透内网!有一次,我在一个MVEL注入点直接读到了/etc/shadow,虽然hash没跑出来吧,但那种“文件在手,天下我有”的错觉,挺让人上头的。

还有啊,兄弟们,MVEL注入有时候还能用来做权限提升,如果是后台的某个接口,可能直接拿到管理员权限,我当时试过一个场景,普通用户传了个MVEL表达式,结果返回的是管理员数据,直接越权了,这事儿给我的启示就是:MVEL注入挖好了,可不是个简单的“执行命令”漏洞,而是一整条攻击链的起点

怎么防?我也想说两句

作为挖洞的,我也知道这漏洞危害大,所以啊,给开发兄弟们的建议是:

  • 尽量避免使用MVEL处理用户输入,如果非要动态表达式,用SpEL或者OGNL加白名单也行啊。
  • 如果一定要用MVEL,记得开沙箱模式,别图省事裸奔。
  • 输入校验和过滤永远是最后一道防线,不要指望前端限制,后端得过内网扫描工具,比如我用过的微步、奇安信这些。

这条路,得慢慢走

写到这儿,我也感叹一句,MVEL注入漏洞挖掘这条路上,我吃过不少亏,但也乐在其中,每一次突破,都像解开一道谜题,那种快感是真的上头,如果你也对网络安全感兴趣,尤其是想尝试挖漏洞、做渗透测试,欢迎加我QQ:3287532499,咱们一起聊聊技术,互相学习进步!

MVEL注入漏洞挖掘

好了,今天就唠到这儿,下次再挖到新的MVEL实战案例,我再来分享,祝各位兄弟挖洞顺利,paylaod一把梭,漏洞一挖一大个!

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码