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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 命令执行漏洞,指的是可以执行系统命令或者应用指令(如cmd或者bash命令)的漏洞简单说就是用户输入的数据被当作系统命令来执行,php的命令执行漏洞主要基于一些函数的参数过滤不全而导致

知识点

命令执行漏洞,指的是可以执行系统命令或者应用指令(如cmd或者bash命令)的漏洞

简单说就是用户输入的数据被当作系统命令来执行,php的命令执行漏洞主要基于一些函数的参数过滤不全而导致

命令执行函数

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

第一步.环境搭建

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

第二步.漏洞复现

定位shell_exec()发现

1shell_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,最后发现如下

1$backupFileName = self::BACKUP_DIR . "/" . core\utils\str_replace(array("/", "\\", ".", "'"), "", $fileName);

发现$fileName我们可能控制

所以就可以进入后台系统

提交抓包查看

发现$fileName我们可控

所以就有了思路:

既然使用了shell_exec()函数执行mysqldump并且是cmd

那么我们就可以使用&符号执行多条语句来写shell

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

继续跟进$fileName = core\utils\Env::getRequest("filename");

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

发现成功写入文件

在上面审计的代码中,我们发现控制传入的$fileName中,.会被替换成空,并且拼接.sql

但是因为在备份的时候执行cmd命令,这就可以使用切割法来切割PATHEXT环境变量.就不会被过滤

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

连接菜刀就好了

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
45 4
|
6月前
|
Shell Linux
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
54 0
|
7月前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
39 4
|
安全 Windows
记一次“上传”命令执行的绕过案例
记一次“上传”命令执行的绕过案例
109 0
|
Linux Perl
【linux】解决文件名中带空格,命令执行出错的问题
【linux】解决文件名中带空格,命令执行出错的问题
753 0
|
Shell
【Shell篇】循环查找某个目录的脚本文件并打印运行
这段代码是/build/envsetup.sh文件最后一段代码,搜索了源代码中所有的vendorsetup.sh脚本。
282 0
|
Shell Linux Perl
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
shell 定义绝对路径,出错 sed: 未找到命令,脚本功能:替换某一行内容
|
Shell
SHELL脚本递归循环,文件名包含空格的处理办法
SHELL脚本递归循环,文件名包含空格的处理办法
184 0