若是你的Zabbix的Admin口令太弱或者使用了默認口令(Admin/zabbix),而被***破解了口令的話,Zabbix服務器在***面前就已經毫無抵抗力了。***能夠建立「system.run[command,<mode>]」監控項執行命令,甚至獲取服務器shell,獲取root權限。linux
先介紹下「system.run[command,<mode>]」,這個監控項是agent自帶的,使zabbix server能夠遠程在agent的機器上執行任意命令。方法有二:一是創建監控項,二是經過zabbix_get命令直接遠程調用。使agent啓用這個監控項要在配置文件裏設置EnableRemoteCommands=1。命令執行權限限制於zabbix agent的啓動用戶,若是你爲了方便,把agent的啓動用戶設置爲root的話(AllowRoot=1),這是很是危險的。shell
下面模擬一個場景,展現***在獲取Zabbix Admin口令的狀況下,如何獲取服務器的shell,甚至root權限:安全
這裏利用NetCat(nc)命令打開shell,若是你的系統是RedHat/CentOS系列,nc能夠經過yum下載到。bash
選擇【Administration】->【Scripts】,建立一個script,以下圖:服務器
「Execute on」選擇Zabbix server,「Commands」裏輸入:ide
mkfifo /tmp/tmp_fifo cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -l 2222 > /tmp/tmp_fifo
上面的意思是打開一個shell,監聽2222端口。spa
進入【Dashboard】界面,在下面隨便點擊一個Host,會彈出一個「Scripts」選項卡,點擊上面建立的「create shell」,這樣上面的命令就會被執行。.net
到zabbix server服務器上能夠看到2222號端口已經在監聽了。3d
下面咱們在本身的機器上,用nc命令鏈接到server的shell:server
上圖顯示咱們成功獲取了zabbix服務器的shell,並且是root權限!這是由於個人zabbix server是以root啓動的。
下面說一下如何對zabbix安全加固,防止這種狀況發生:
一、很重要的一點,zabbix的登陸口令必定要複雜,不要用默認口令或弱口令。
二、zabbix的server和agent都不要以root啓動,不要設置AllowRoot=1。
三、禁止agent執行system.run,不要設置EnableRemoteCommands=1。
四、常常打安全補丁,若是系統內核版本太低有漏洞的話,即便在zabbix用戶下照樣能獲取root權限。
參考
sohu漏洞案例:
http://www.wooyun.org/bugs/wooyun-2013-023089
Netcat 命令: