Memcached是一套分佈式的高速緩存系統。它以Key-Value(鍵值對)形式將數據存儲在內存中,這些數據一般是應用讀取頻繁的。正由於內存中數據的讀取遠遠大於硬盤,所以能夠用來加速應用的訪問。本文和你們分享的是Memcache中未受權訪問漏洞利用及修復相關知識,但願對你們學習Memcache有所幫助。html
漏洞成因:前端
因爲memcached安全設計缺陷,客戶端鏈接memcached服務器後 無需認證就 可讀取、修改服務器緩存內容。vim
除memcached中數據可被直接讀取泄漏和惡意修改外,因爲memcached中的數據像正常網站用戶訪問提交變量同樣會被後端代碼處理,當處理代碼存在缺陷時會再次致使不一樣類型的安全問題。後端
不一樣的是,在處理 前端用戶直接輸入的數據時通常會接受更多的安全校驗,而從memcached中讀取的數據則更容易被開發者認爲是可信的,或者是已經經過安全校驗的,所以更容易致使安全問題。緩存
因而可知,致使的二次安全漏洞類型通常 由memcached數據使用的位置(XSS一般稱之爲sink)的不一樣而不一樣, 如:安全
(1)緩存數據未通過濾直接輸出可致使XSS;服務器
(2) 緩存數據 未通過濾代入拼接的SQL注入查詢語句可致使SQL注入;網絡
(3) 緩存數據 存儲敏感信息(如:用戶名、密碼),能夠經過讀取操做直接泄漏;tcp
(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 未受權訪問漏洞。
2、telnet 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