<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址:http://drops.wooyun.org/papers/865

    0x00 Memcache簡介


    Memcache是一個高性能的分布式的內存對象緩存系統,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。

    Memcache是danga的一個項目,最早是LiveJournal 服務的,最初為了加速 LiveJournal 訪問速度而開發的,后來被很多大型的網站采用。

    Memcached是以守護程序方式運行于一個或多個服務器中,隨時會接收客戶端的連接和操作。

    0x01 搭建Memcache服務


    yum install memcached 
    

    安裝memcache服務端

    yum -y install php-pecl-memcache 
    

    安裝php擴展操作memcache

    php -m | grep memcache 
    

    查看php擴展是否安裝成功

    memcached -d -m 100 -u root -l x.x.x.x -p 11211 -c 512 -P /tmp/memcached.pid
    

    參數說明:

    -d選項是啟動一個守護進程;
    -m是分配給Memcache使用的內存數量,單位是MB,我這里是100MB;
    -u是運行Memcache的用戶,我這里是root;
    -l是監聽的服務器IP地址我這里指定了服務器的IP地址x.x.x.x;
    -p是設置Memcache監聽的端口,我這里設置了11211,最好是1024以上的端口;
    -c選項是最大運行的并發連接數,默認是1024,我這里設置了512,按照你服務器的負載量來設定;
    -P是設置保存Memcache的pid文件,我這里是保存在 /tmp/memcached.pid;
    

    想要結束memcache進程

    kill `cat /tmp/memcached.pid` 
    

    設置開機啟動

    chkconfig memcached on 
    

    phpMemcachedAdmin圖形化界面,操作memcache,類似phpmyadmin

    http://blog.elijaa.org/index.php?pages/phpMemcachedAdmin-Installation-Guide

    最新版默認界面

    enter image description here

    Execute Commands on Servers那里可以執行命令。

    當然了用telnet其實是一樣的。

    0x02 memcache匿名訪問危害


    在烏云提交的漏洞當中,有很多因為memecache限制不嚴格,導致信息泄露的問題:

    WooYun: memcached未作IP限制導致緩存數據可被攻擊者控制

    WooYun: 通過Memcache緩存直接獲取某物流網用戶密碼等敏感數據

    WooYun: 56.com memcached端口可以遠程使用

    從memcache中獲取信息通常是先查看items信息:

    stats items

    enter image description here

    stats cachedump <item: id> <返回結果數量,0代表返回全部>
    

    enter image description here

    除了查看信息,通用可以修改刪除信息。

    phpMemcachedAdmin執行命令那里也有個可以搜索key的腳本,并且支持正則匹配。

    0x03 查找可匿名訪問memcache的方式


    memcache默認是11211端口,可使用nmap掃描有開11211端口的服務器。

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

    然后telnet上,執行下

    stats items
    

    看看是否有返回結果。

    0x04安全配置


    Memcache服務器端都是直接通過客戶端連接后直接操作,沒有任何的驗證過程,這樣如果服務器是直接暴露在互聯網上的話是比較危險,輕則數據泄露被其他無關人員查看,重則服務器被入侵,因為Mecache是以root權限運行的,況且里面可能存在一些我們未知的bug或者是緩沖區溢出的情況,這些都是我們未知的,所以危險性是可以預見的。

    內網訪問

    最好把兩臺服務器之間的訪問是內網形態的,一般是Web服務器跟Memcache服務器之間。普遍的服務器都是有兩塊網卡,一塊指向互聯網,一塊指向內網,那么就讓Web服務器通過內網的網卡來訪問Memcache服務器,我們Memcache的服務器上啟動的時候就監聽內網的IP地址和端口,內網間的訪問能夠有效阻止其他非法的訪問。

    # memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
    

    Memcache服務器端設置監聽通過內網的192.168.0.200的ip的11211端口,占用1024MB內存,并且允許最大1024個并發連接

    設置防火墻

    防火墻是簡單有效的方式,如果卻是兩臺服務器都是掛在網的,并且需要通過外網IP來訪問Memcache的話,那么可以考慮使用防火墻或者代理程序來過濾非法訪問。 一般我們在Linux下可以使用iptables或者FreeBSD下的ipfw來指定一些規則防止一些非法的訪問,比如我們可以設置只允許我們的Web服務器來訪問我們Memcache服務器,同時阻止其他的訪問。

    # iptables -F
    # iptables -P INPUT DROP
    # iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
    # iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT
    

    上面的iptables規則就是只允許192.168.0.2這臺Web服務器對Memcache服務器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

    97av