作者:
瞌睡龍
·
2014/01/20 17:59
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
最新版預設介面
Execute Commands on Servers那裡可以執行命令。
當然了用telnet其實是一樣的。
0x02 memcache匿名訪問危害
在烏雲提交的漏洞當中,有很多因為memecache限制不嚴格,導致資訊洩露的問題:
WooYun: memcached未作IP限制導致快取資料可被攻擊者控制
WooYun: 透過Memcache快取直接獲取某物流網使用者密碼等敏感資料
WooYun: 56.com memcached埠可以遠端使用
從memcache中獲取資訊通常是先檢視items資訊:
stats items
stats cachedump <item: id> <返回結果數量,0代表返回全部>
除了檢視資訊,通用可以修改刪除資訊。
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伺服器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!