memcached存储java对象时,可能存在篡改对象导致的注入代码执行漏洞。

memcached介绍:http://baike.baidu.com/view/794242.htm

大家经常会发现,大量web应用把memcached的端口对外,而又未做ip限制,导致缓存被攻击者控制利用。

例如:修改一些数据,进行XSS或sql注射攻击等常规利用!

但如果是个java的memcached应用,因为使用的是文本协议,而提供的java client实际上是直接存入java对象的。

例如:value存储的是一个java Bean(存储时,序列化之类的环节暂时不去考虑它!),如图:

memcached存储java对象时,可能存在篡改对象导致的注入代码执行漏洞

结合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

留言评论(旧系统):

dashige @ 2013-02-24 01:43:26

好像是跟mysql数据库有关的东西,小菜没接触过呢。。。

本站回复:

╮(╯_╰)╭