通过切割环境变量绕过限制实现命令执行

admin 2023年5月15日23:46:43评论43 views字数 1371阅读4分34秒阅读模式

环境搭建:

       下载IBOS4.5.5建站系统安装成功后源码审计发现zend加密,使用SeayDzend(PHP解密工具)解密然后进行审计

命令执行漏洞:

        命令执行漏洞指的是可以执行系统命令或者应用指令(如cmd或者bash命令)的漏洞,简单说就是用户输入的数据被当作系统命令来执行,php的命令执行漏洞主要基于一些函数的参数过滤不全而导致

命令执行函数:

    

system('whoami')php会操纵计算机执whoami命令并输出返回结果(目标机器是windows执行cmd命令,是Linux执行bash命令)如果还想写webshell可以尝试cmd命令 echo "<?php @$_REQUEST[8]?>" > 1.php 可以把一句话木马写进1.phpecho exec('whoami')  php去操纵计算机执行whoami命令,并只返回最后一行数据echo shell_exec('whoami')php去操纵计算机执行whoami命令,获取所有数据passthru('whoami')只调用命令,把命令的运行结果原样地直接输出到标准输出设备特殊符号:反引号(``) echo `whoami`实际调用shell_exec()

漏洞复现:

定位shell_exec()发现

shell_exec("{$mysqlBin}mysqldump --force --quick $command1 --add-drop-table $command2 $command3 --host="{$db["host"]}" $command5 --user="{$db["username"]}" --password="{$db["password"]}" "{$db["dbname"]}" $tablesstr > $dumpFile");

使用了

mysqldump用来备份数据库的 而且发现备份的文件名$dumpFile我们有可能控制,跟进$dumpFile最后发现

$backupFileName = self::BACKUP_DIR . "/" . coreutilsstr_replace(array("/", "\", ".", "'"), "", $fileName);

发现$fileName我们可能控制

所以进入后台系统

通过切割环境变量绕过限制实现命令执行

提交抓包查看

通过切割环境变量绕过限制实现命令执行

发现$fileName我们可控

所以就有了思路:

既然使用了shell_exec()函数执行mysqldump并且是cmd那么我们可以使用&符号执行多条语句来写shell。

因为shell_exec(string)可以执行cmd命令,而cmd命令中是使用’&’将多条命令分隔开的,我们传入的参数中先把原有的mysqldump闭合。

但是继续跟进$fileName = coreutilsEnv::getRequest("filename");

因为使用getREQUEST很可能因为兼容性来url解码所以$替换成%26

通过切割环境变量绕过限制实现命令执行

发现成功写入文件
但是因为在上面审计的代码中发现,我们控制传入的$fileName中.会被替换成空并且拼接.sql
但是因为在备份的时候执行cmd命令,这就可以使用切割法来切割PATHEXT环境变量.这样就不会被过滤

通过切割环境变量绕过限制实现命令执行

写shell,最后再使用&将.sql后缀给绕过

通过切割环境变量绕过限制实现命令执行

连接菜刀

通过切割环境变量绕过限制实现命令执行


原文始发于微信公众号(是恒恒呐):通过切割环境变量绕过限制实现命令执行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月15日23:46:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过切割环境变量绕过限制实现命令执行http://cn-sec.com/archives/951844.html

发表评论

匿名网友 填写信息