zoukankan      html  css  js  c++  java
  • Memcache未授权访问漏洞利用及修复

    Memcached是一套分布式的高速缓存系统。它以Key-Value(键值对)形式将数据存储在内存中,这些数据通常是应用读取频繁的。正因为内存中数据的读取远远大于硬盘,因此可以用来加速应用的访问。本文和大家分享的是Memcache中未授权访问漏洞利用及修复相关知识,希望对大家学习Memcache有所帮助。

      漏洞成因:

    由于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工具使用方法参见链接。

      漏洞攻击DEMO

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


     

      漏洞检测:

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

      2telnet 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

    memcached 常用命令及使用说明

  • 相关阅读:
    logstash过滤器使用ruby把时间格式转UNIX_MS
    logstash使用“|”切分日志报错:Exception caught while applying mutate filter {:exception=>"Invalid FieldReference: `message[1]`"}
    win10安装FileBeat
    win10安装ELK
    向量组的秩一定是有的吗?
    SCIE与SCI的区别
    安装MIUI+出现无法定位程序输入点 GetDpiForWindow 于动态链接库 USER32.dll上如何解决?
    photoshop反色
    二值图像像素交换
    矩阵翻转
  • 原文地址:https://www.cnblogs.com/SzSec/p/7865229.html
Copyright © 2011-2022 走看看