Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

Memcached 未授权访问/弱口令 检测方案

wpadmin~April 4, 2019 /InfoSec

Memcached 未授权访问/弱口令 检测方案

正文

可以通过 netcat 或者 nmap script 检测。
利用暂略。

漏洞成因

由于 memcached 安全设计缺陷,客户端连接 memcached 服务器后无需认证就可读取、修改服务器缓存内容。

漏洞影响

除 memcached 中数据可被直接读取泄漏和恶意修改外,由于 memcached 中的数据像正常网站用户访问提交变量一样会被后端代码处理,当处理代码存在缺陷时会再次导致不同类型的安全问题。

不同的是,在处理前端用户直接输入的数据时一般会接受更多的安全校验,而从 memcached 中读取的数据则更容易被开发者认为是可信的,或者是已经通过安全校验的,因此更容易导致安全问题。

由此可见,导致的二次安全漏洞类型一般由memcached数据使用的位置(XSS通常称之为sink)的不同而不同,如:

(1)缓存数据未经过滤直接输出可导致XSS;
(2)缓存数据未经过滤代入拼接的SQL注入查询语句可导致SQL注入;
(3)缓存数据存储敏感信息(如:用户名、密码),可以通过读取操作直接泄漏;
(4)缓存数据未经过滤直接通过system()、eval()等函数处理可导致命令执行;
(5)缓存数据未经过滤直接在header()函数中输出,可导致CRLF漏洞(HTTP响应拆分)。

漏洞利用

漏洞的利用根据所造成二次漏洞的不同,可在缓存变量中构造相应的 payload 。
针对 memcached 未授权访问漏洞缓存数据的抓取,可使用 go-derper 工具。
注: memcached 服务器基本操作及go-derper工具使用方法参见链接。

检测指南(无服务器权限)

telnet <target_ip> 11211
nc -vv <target_ip> 11211

弱口令检测可以考虑如下 cli client

python
https://pypi.org/project/Memcached-cli/

node.js
https://www.npmjs.com/package/memcached-cli

或者编写代码连接

https://pypi.org/project/Memcached-cli/

#!/usr/bin/env python2
#coding:utf-8
"""
  Author:  yafeile --<yafeile@163.com>
  Purpose: memcached命令行版本
  Created: Saturday, July 02, 2016
"""

from pymemcache.client.base import Client
from cmd import Cmd

__version__ = '0.1'

class MemcachedCLI(Cmd, object):
    def __init__(self, host, port):
        super(MemcachedCLI, self).__init__()
        self.client = Client((host, port))
        self.prompt = '{0}:{1}>'.format(host, port)
        self.get_action(self.client)

    def get_action(self, client):
        for name in dir(client):
            if not name.startswith('_'):
                attr = getattr(client, name)
                if callable(attr):
                    setattr(self.__class__, 'do_' + name, self._make_cmd(name))
                    doc = (getattr(attr, '__doc__', '') or '').strip()
                    if doc:
                        setattr(self.__class__, 'help_' + name, self._make_help(doc))                    

    def _make_cmd(self, name):
        def handler(self, line):
            parts = line.split()
            try:
                print(getattr(self.client, name)( *parts))
            except Exception as e:
                print('Error:{0}'.format(e))
        return handler

    def _make_help(self, doc):
        def help(self):
            print(' ' * 80)
            print(doc)
        return help

    def do_exit(self, arg):
        """退出CLI"""
        return True

    def default(self, line):
        print("The Memcached Server did not implement this command.")
    do_EOF = do_exit

def main():
    from argparse import ArgumentParser
    args = ArgumentParser(description= 'Memcached命令行版本')
    args.add_argument('-b', '--host', help = 'Memcached监听的地址')
    args.add_argument('-p', '--port',type = int, help = '指定的Memcached端口')
    arg = args.parse_args()
    host = arg.host or '127.0.0.1'
    port = arg.port or 11211
    try:
        MemcachedCLI(host, port).cmdloop()
    except KeyboardInterrupt:
        print('\n')
        SystemExit

if __name__ == '__main__':
    main()%   

Nmap NSE script

nmap -n --open -p 11211 X.X.X.X/24

-n 不做反向DNS解析,以加快扫描速度

nmap -sV -p 11211 –script memcached-info <target_ip>

常见 memcached 协议的命令

http://securityer.lofter.com/post/1d0f3ee7_79e25bb

stats items # 显示各个slab中item的数目

stats slabs # 显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats cachedump 【slab_id】 【limit_num】 #显示某个slab中的前limit_num个key列表

get <key> # 获取/检查KeyValue

stats\r\n # 检查Memcache服务器状态

flush_all # 清空所有键值

quit\r\n # 退出

检测指南(有服务器权限)

# 查看网络情况
netstat -antp | grep "0.0.0.0"

登录机器执行 netstat -an | more命令查看端口监听情况。回显0.0.0.0:11211表示在所有网卡进行监听,存在memcached未授权访问漏洞。

漏洞修复

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 服务端口进行过滤。

iptables -Fiptables -P INPUT DROP
iptables -A INPUT -p tcp -s X.X.X.X --dport11211-j ACCEPT
iptables -A INPUT -p udp -s X.X.X.X --dport11211-j ACCEPT

参考资料

http://blog.nsfocus.net/memcache-unauthorized-access-exploit/

http://niiconsulting.com/checkmate/2013/05/memcache-exploit/

http://securityer.lofter.com/post/1d0f3ee7_79e25bb

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.