被人遗忘的Memcached内存注射

Posted 黑白之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了被人遗忘的Memcached内存注射相关的知识,希望对你有一定的参考价值。


  0x00 写在前面

  wooyun主站也有过Memcached相关漏洞,但大多都是未授权访问,其实即使是部署得当的Memcached,如果碰上安全意识差的程序员哥哥,那么同样会出现Memcached安全风险,导致敏感内存泄露。

  也就是本文要说的Memcached

  0x01 Memcached简介&安全性分析

  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。

  它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

  用白话就是说,当传统web将访问产生的临时数据存储在后端数据库(如user sessions),部署了Memcached的应用会将user sessions以及其他一些敏感信息存储在RAM中,增速同时也减轻后端数据库反复查询带来的负载。

  Memcached创建者Dormando很早就写过两篇文章,告诫开发人员不要用memcached存储Session。但是很多开发者为了性能或者其他原因,依旧把session存储在memcached中。这样做,一旦memcached被,直接将导致管理员或者是用户token泄露。

  0x02 Memcached协议

  当Memcache被部署之后,我们该如何向其中添加数据?我们通过一个cheat sheet了解一下Memcached的协议。

  Memcached的语法由如下元素组成

  {COMMAND}0x20{ARGUMENT}(LF|CRLF)

  command字段有如下几条命令:

  1.存储操作(set, add, replace, append, prepend, cas)

  2.检索操作 (get, gets)

  3.删除操作 (delete)

  4.增减操作 (incr, decr)

  5.touch

  6.slabs reassign

  7.slabs automove

  8.lru_crawler

  9.统计操作(stats items, slabs, cachedump)

  其他操作 (version, flush_all, quit)

  下面给出几个安全测试中有用的命令

  stats cachedump 读取内存中存储的条目

  0x03 Memcached代码实现

  部署好Memcached之后,一个调用Memcached的php代码是这样的。

  可以看到,对Memcached的协议来讲,\r\n是可以用来分割命令的,所以说,我们能直接通过CLRF,将\r\n到将要传入Memcached的元素中(例如cookies),实现命令执行。

  0x04 Memcache Injection实例

  最近的一次ctf中,有一个典型的基于CLRF的Memcache。(目前该站可以访问)

  http://login2.chal.mmactf.link/login

  login as admin

  登录之后的请求是这样的

  恩,memcached出错了,那不就是刚刚提到的error吗?

  > 1234567890

  < ERROR

  说明这里ss的value代入了memcached。

  我们继续在cookies里面:ss=%0astats


  果然返回了memcached的stats

  现在来做我们最想做的一件事情,dump内存中的东西看看:我们利用cachedump

  stats cachedump {slab class} {number of items to dump}

  这里需要介绍下 memcached是以slab class进行分类的 比如:


  终于注入到我们所需要的class中去。

  0x05 参考

  Memcache cheat sheet: http://lzone.de/cheat-sheet/memcached

  Memcached Injection: https://www.blackhat.com/docs/us-14/materials/us-14-Novikov-The-New-Page-Of-Injections-Book-Memcached-Injections-WP.pdf

----------------------------------
要闻、干货、原创、专业
关注“黑白之道” 微信:i77169
华夏黑客同盟我们坚持,自由,免费,共享!


以上是关于被人遗忘的Memcached内存注射的主要内容,如果未能解决你的问题,请参考以下文章

php memcached怎么用

memcached 内存管理 分析(转)

Memcached(高性能内存对象缓存)

高性能内存对象缓存——Memcached

Memcached内存管理核心原理解析

memcached注意事项