Memcached是一套分布式的高速缓存系统。它以Key-Value(键值对)形式将数据存储在内存中,这些数据一般是应用读取频繁的。正由于内存中数据的读取远远大于硬盘,所以能够用来加速应用的访问。本文和你们分享的是Memcache中未受权访问漏洞利用及修复相关知识,但愿对你们学习Memcache有所帮助。html
漏洞成因:前端
因为memcached安全设计缺陷,客户端链接memcached服务器后 无需认证就 可读取、修改服务器缓存内容。vim
除memcached中数据可被直接读取泄漏和恶意修改外,因为memcached中的数据像正常网站用户访问提交变量同样会被后端代码处理,当处理代码存在缺陷时会再次致使不一样类型的安全问题。后端
不一样的是,在处理 前端用户直接输入的数据时通常会接受更多的安全校验,而从memcached中读取的数据则更容易被开发者认为是可信的,或者是已经经过安全校验的,所以更容易致使安全问题。缓存
因而可知,致使的二次安全漏洞类型通常 由memcached数据使用的位置(XSS一般称之为sink)的不一样而不一样, 如:安全
(1)缓存数据未通过滤直接输出可致使XSS;服务器
(2) 缓存数据 未通过滤代入拼接的SQL注入查询语句可致使SQL注入;网络
(3) 缓存数据 存储敏感信息(如:用户名、密码),能够经过读取操做直接泄漏;tcp
(4) 缓存数据 未通过滤直接经过system()、eval()等函数处理可致使命令执行;分布式
(5) 缓存数据 未通过滤直接在header()函数中输出,可致使CRLF漏洞(HTTP响应拆分)。
… …
漏洞利用:
漏洞的利用根据所形成二次漏洞的不一样,可在缓存变量中构造相应的payload。
针对memcached未受权访问漏洞缓存数据的抓取,可以使用 go-derper工具。
注: memcached服务器基本操做及go-derper工具使用方法参见连接。
漏洞攻击DEMO:
http://niiconsulting.com/checkmate/2013/05/memcache-exploit/
1、登陆机器执行netstat -an | more命令查看端口监听状况。回显0.0.0.0:11211表示在全部网卡进行监听,存在memcached 未受权访问漏洞。
2、telnet IP 11211, 或 nc -vv11211,提示链接成功表示漏洞存在(telnet链接成功后是一个黑框,执行Memcached命令stats)。
memcache stats命令详解
参数 | 值 | 描述 |
---|---|---|
pid | 7862 | memcache服务器进程ID |
uptime | 12617972 | 服务器已运行秒数 |
time | 1320756409 | 服务器当前Unix时间戳 |
version | 1.4.5 | memcache版本 |
pointer_size | 64 | 操做系统指针大小 |
rusage_user | 1.731736 | 进程累计用户时间 |
rusage_system | 251.421778 | 进程累计系统时间 |
curr_connections | 41 | 当前链接数量 |
total_connections | 848 | Memcached运行以来链接总数 |
connection_structures | 46 | Memcached分配的链接结构数量 |
cmd_get | 164377 | get命令请求次数 |
cmd_set | 58617 | set命令请求次数 |
cmd_flush | 0 | flush命令请求次数 |
get_hits | 105598 | get命令命中次数 |
get_misses | 58779 | get命令未命中次数 |
delete_misses | 0 | delete命令未命中次数 |
delete_hits | 0 | delete命令命中次数 |
incr_misses | 0 | incr命令未命中次数 |
incr_hits | 0 | incr命令命中次数 |
decr_misses | 0 | decr命令未命中次数 |
decr_hits | 0 | decr命令命中次数 |
cas_misses | 0 | cas命令未命中次数 |
cas_hits | 0 | cas命令命中次数 |
cas_badval | 0 | 使用擦拭次数 |
auth_cmds | 0 | 认证命令处理的次数 |
auth_errors | 0 | 认证失败数目 |
bytes_read | 262113283 | 读取总字节数 |
bytes_written | 460023263 | 发送总字节数 |
limit_maxbytes | 536870912 | 分配的内存总大小(字节) |
accepting_conns | 1 | 服务器是否达到过最大链接(0/1) |
listen_disabled_num | 0 | 失效的监听数 |
threads | 4 | 当前线程数 |
conn_yields | 0 | 链接操做主动放弃数目 |
bytes | 1941693 | 当前存储占用的字节数 |
curr_items | 476 | 当前存储的数据总数 |
total_items | 58617 | 启动以来存储的数据总数 |
evictions | 0 | LRU释放的对象数目 |
reclaimed | 48830 | 已过时的数据条目来存储新数据的数目 |
3、使用端口扫描工具nmap进行远程扫描:nmap -sV -p 11211 --script=memcached-info IP。
11211/tcpopen memcached
| memcached-info:
| ProcessID 18568
| Uptime 6950 seconds
| Servertime SatDec 31 14:16:10 2011
| Architecture 64 bit
| UsedCPU (user) 0.172010
| UsedCPU (system) 0.200012
| Currentconnections 10
| Totalconnections 78
| Maximumconnections 1024
| TCPPort 11211
| UDPPort 11211
|_ Authentication no
漏洞修复:
1、配置memcached监听本地回环地址127.0.0.1。
[root@local ~]# vim /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1" #设置本地为监听
[root@local ~]# /etc/init.d/memcached restart #重启服务
2、当memcached 配置为监听内网IP或公网IP时, 使用主机防火墙(iptalbes、 firewalld等)和 网络防火墙对memcached服务端口 进行过滤。
参考:
http://blog.nsfocus.net/
http://blog.csdn.net/qq_32506555/article/details/53581809
http://gdd.gd/1072.html
https://www.cnblogs.com/Alight/p/3546400.html