1、memcache前端
漏洞描述:memcached是一套分佈式的高速緩存系統。它以Key-Value(鍵值對)形式將數據存儲在內存中,這些數據一般是應用讀取頻繁的。正由於內存中數據的讀取遠遠大於硬盤,所以能夠用來加速應用的訪問。因爲memcached安全設計缺陷,客戶端鏈接memcached服務器後無需認證就可讀取、修改服務器緩存內容。python
2、手工驗證shell
1 #操做指令 2 # stats //查看memcache 服務狀態 3 # stats items //查看全部items 4 # stats cachedump 32 0 //得到緩存key 5 # get :state:264861539228401373:261588 //經過key讀取相應value,得到實際緩存內容,形成敏感信息泄露
通常端口11211vim
1 Xshell:\> telnet 219.94.193.*** 11211 2 3 4 Connecting to 219.94.193.***:11211... 5 Connection established. 6 Escape character is '^@]'. 7 stats 8 STAT pid 2259 9 STAT uptime 20493827 10 STAT time 1513170227 11 STAT version 1.2.6 12 STAT pointer_size 32 13 STAT rusage_user 501.860705 14 STAT rusage_system 482.892589 15 STAT curr_items 3 16 STAT total_items 4 17 STAT bytes 1503803 18 STAT curr_connections 5 19 STAT total_connections 362 20 STAT connection_structures 7 21 STAT cmd_get 1569 22 STAT cmd_set 4 23 STAT get_hits 1569 24 STAT get_misses 0 25 STAT evictions 0 26 STAT bytes_read 1515293 27 STAT bytes_written 1185375980 28 STAT limit_maxbytes 67108864 29 STAT threads 4 30 END
漏洞利用後端
除memcached中數據可被直接讀取泄漏和惡意修改外,因爲memcached中的數據像正常網站用戶訪問提交變量同樣會被後端代碼處理,當處理代碼存在缺陷時會再次致使不一樣類型的安全問題。緩存
不一樣的是,在處理前端用戶直接輸入的數據時通常會接受更多的安全校驗,而從memcached中讀取的數據則更容易被開發者認爲是可信的,或者是已經經過安全校驗的,所以更容易致使安全問題。安全
因而可知,致使的二次安全漏洞類型通常由memcached數據使用的位置(XSS一般稱之爲sink)的不一樣而不一樣,如:服務器
(1)緩存數據未通過濾直接輸出可致使XSS;網絡
(2)緩存數據未通過濾代入拼接的SQL注入查詢語句可致使SQL注入;分佈式
(3)緩存數據存儲敏感信息(如:用戶名、密碼),能夠經過讀取操做直接泄漏;
(4)緩存數據未通過濾直接經過system()、eval()等函數處理可致使命令執行;
(5)緩存數據未通過濾直接在header()函數中輸出,可致使CRLF漏洞(HTTP響應拆分)。
修復:
一、配置memcached監聽本地迴環地址127.0.0.1。
1 [root@local ~]# vim /etc/sysconfig/memcached 2 OPTIONS="-l 127.0.0.1" #設置本地爲監聽 3 [root@local ~]# /etc/init.d/memcached restart #重啓服務
二、當memcached配置爲監聽內網IP或公網IP時,使用主機防火牆(iptalbes、firewalld等)和網絡防火牆對memcached服務端口進行過濾。
三、最小化權限運行
使用普通權限帳號運行,如下指定memcached 用戶運行
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
四、配置帳戶、密碼