memcached存储java对象时,可能存在篡改对象导致的注入代码执行漏洞。
memcached介绍:http://baike.baidu.com/view/794242.htm
大家经常会发现,大量web应用把memcached的端口对外,而又未做ip限制,导致缓存被攻击者控制利用。
例如:修改一些数据,进行XSS或sql注射攻击等常规利用!
但如果是个java的memcached应用,因为使用的是文本协议,而提供的java client实际上是直接存入java对象的。
例如:value存储的是一个java Bean(存储时,序列化之类的环节暂时不去考虑它!),如图:
结合memcached文本协议的特征,攻击的基本过程:
-->get <key> java对象的文本(类似获得一个.class的字节码文件)
-->反编译获得源代码
-->写入构造好的恶意java代码重新编译(因为这里是个java Bean(DTO),不会引入其他自定义比较复杂的包结构,所以重新编译难度不高)
-->replace <key> 0 0 <存储大小>
<带有恶意代码的对象文本>
-->应用调用该java对象
-->恶意java代码被执行
所以,理论上是可行的!
//ps:遗憾的是,发现这是个精细活,哥暂时还不是做web安全的,缺少一些环境及条件,一个人的能力也有限(要命的是,明天哥还要去亲戚家拜年,头痛要睡觉了!)。所以,先发在zone里,有条件的,帮哥论证一下可行性!^-^
相关讨论:
1#
upload (%bf%27%bf%27%bf%27%bf%27%) | 2013-02-23 00:03
爪哇
2#
kindle | 2013-02-23 10:46
memcache只是存一些热点数据而已,楼主可以修改key的内容,不过执行不执行取决服务器端脚本是否调用。
3#
请叫我大神 | 2013-02-23 10:49
看场景:)即使不执行,这玩意泄露出的信息还是蛮可观的
4#
shine (shield) | 2013-02-23 11:01
应该是可以的,看清楚是存的java对象,不调用你存着干嘛?
摘自:http://zone.wooyun.org/content/2728
留言评论(旧系统):