<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址: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服務器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线