编码绕过C3P0利用

极客

唉,编码绕过又来了?聊聊C3P0这个“老朋友”的利用姿势


兄弟们,姐妹们,咱就是说,搞网络安全这行,每天跟漏洞打交道,真的是又爱又恨,你说C3P0这玩意儿,多少年的老组件了,怎么到现在还是有人在上面栽跟头呢?今天咱不聊那些虚头巴脑的理论,就踏踏实实、掏心窝子地聊聊,我最近在实战里头,怎么一步步踩过那个“编码绕过”的坑,最后把C3P0给“拿捏”住的。

你要是光看网上的那些POC,哎呀,千篇一律,看着挺唬人,但真到自己上手了,哎,怎么就不出网呢?怎么就被WAF拦成筛子呢?我跟你说,问题往往就出在这个编码绕过上,你想想,人家防守方也不是吃素的,现在稍微上点档次的WAF,哪个不盯着com.mchange.v2.c3p0这几个关键字?你要是直接原封不动地把Payload怼上去,那不亚于在靶场上举着个大喇叭喊“我是黑客”,人家不拦你拦谁?

所以啊,这就得动点脑子了,我那会儿碰到一个目标,老站点,用的是Spring,一瞅就是C3P0连接池,我心里头那个乐啊,感觉KPI在向我招手,结果呢?好家伙,我刚把经典的jndi字符串打过去,那边WAF立马响应,直接给我来个403 Forbidden,鲜红鲜红的,就跟嘲笑我似的。

我当时就有点上头,但转念一想,嘿,这不正是练手的好机会吗?编码绕过的思路不就来了吗?你们知道吗,WAF的检测规则再牛逼,它也是基于字符串匹配的,我们只需要在中间插入一些语义不变但字节码不同的变化,就能让WAF“眼瞎”。

我当时试了好几种,比如把com替换成c%6fm试试?不行,直接给我拦了,然后又试了试在mchange中间塞个注释符?哎,还是不行,现在的WAF学聪明了,说实话,当时急得我是抓耳挠腮,一口烟没抽完就掐了,太他妈烦人了!

天无绝人之路!后来我灵机一动,想到了Unicode编码和二次解码的骚操作,你们可能不知道,某些中间件或者框架在处理请求参数时,会进行多次解码,这就给了我们绝佳的机会,我把Payload里的关键字符,比如c3p00,或者点号,给强行替换成%u3002这种全角形式,或者用%25套一层URL编码,让WAF解码一次看不懂,等到了应用层再被解码一次,就变回了原型。

就这么着,我构造了一个极其扭曲、但确实能用的Payload,当那一串乱码似的玩意儿发过去,看着WAF那边的日志,卧槽!居然放行了!我当时那个心情,真比大夏天灌了一瓶冰镇可乐还舒坦,然后紧接着,C3P0的老规矩,利用com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase的反序列化,配合JndiRefForwardingDataSource去拉取我VPS上的恶意类,直接一个内存马落地,拿下!

讲真,这次经历给我最大的感触就是,编码绕过不是死记硬背几个替换规则就完事儿了的,你得去了解背后的原理,你得去猜这个站点的解码链是什么,C3P0这东西虽然老,但利用起来是真的舒服,稳定、回声大,但前提是,你得先过掉WAF这一关,而这关键中的关键,就是把这个“编码”玩得明明白白。

好了各位,今天这波掏心窝子的分享就到这里,你要是也爱好研究这些乱七八糟的渗透技术,或者想跟我一样在实战里“阴”一下那些顽固的WAF,咱们可以私下交流交流,毕竟这年头,一个人闭门造车,真的不如大家一起碰撞一下火花。

编码绕过C3P0利用

对了,如果你也是个网络安全爱好者,无论是想入门还是想进阶,都可以加我Q一起聊聊:123456789(备注“漏洞”就行),咱们下回见!

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

目录[+]

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