代码注入漏洞以及修复方法

1.漏洞概述

PHP代码执行漏洞指应用程序本身过滤不严格,用户可以通过请求将代码注入到程序中执行,类似于SQL注入漏洞,可以把SQL语句通过网页注入到SQL服务执行,而PHP代码执行漏洞则是可以把代码注入应用到网站后端中,如果漏洞没有特殊的过滤,相当于直接有一个web后门存在,该漏洞主要由动态代码执行函数的参数过滤不严格导致。

2.技术概述

执行PHP代码写入WebShell

3.风险概述

控制网站甚至服务器


4.黑盒测试

在自己搭建的平台上表单处键入 phpino()语句

这条语句在后端中没有被当做正常字符串信息显示出来而是当做PHP代码执行

接下来我们在键入一个能写webshell的语句

显示正常

服务器中已经被写入了一个webshell

5.查看源码,可以看见动态代码执行函数eval,该函数将字符串直接以PHP代码形式执行,反斜杠‘\’作为转义符号将从表单提交的数据转义成了字符串,这样就构成了代码注入的漏洞,即输入的代码被转义为字符串又被eval以php形式执行。


6.修复方案

业内最新的修复方案基于黑名单的思想,将一些函数必有的符号进行过滤。

<?php

//判断字符串包含函数
function checkstr($str,$find){
    $find_str = $find;
    $tmparray = explode($find_str,$str);   //explode()函数把字符串通过某个指定的字符拆分为数组。$str为原始字符串  $findstr为 
    if(count($tmparray)>1){               //要查找的字符,如果存$findstr 那么这个字符串就会被拆分成两份或者两份以上 那么数组里的元素就在两个或者两个以上
    return true;
    } else{
    return false;
    }
}
     /*判断请求表单字段含下划线,左括号,右括号,分号 */
if(isset($_REQUEST['submit']) && !checkstr($_REQUEST['name'],';') && !checkstr($_REQUEST['name'],'(')  && !checkstr($_REQUEST['name'],')')  && !checkstr($_REQUEST['name'],'_')&& !checkstr($_REQUEST['email'],';') && !checkstr($_REQUEST['email'],'(')  && !checkstr($_REQUEST['email'],')')  && !checkstr($_REQUEST['email'],'_')&& !checkstr($_REQUEST['message'],';') && !checkstr($_REQUEST['message'],'(')  && !checkstr($_REQUEST['message'],')')  && !checkstr($_REQUEST['message'],'_')){

/*用filter过滤特殊编码*/    
 //filter 函数编码,过滤特殊字符HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。
    $name = filter_var($_REQUEST["name"],FILTER_SANITIZE_SPECIAL_CHARS); //filter 函数编码,过滤特殊字符HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。 

    $email = filter_var($_REQUEST["email"],FILTER_SANITIZE_SPECIAL_CHARS); //filter 函数编码,过滤特殊字符HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。

    $message = filter_var($_REQUEST["message"],FILTER_SANITIZE_SPECIAL_CHARS); //filter 函数编码,过滤特殊字符HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。
    
    @eval("\$var1 = $name;"); 
    echo $var1; 

    @eval("\$var2 = $email;"); 
    echo $var2; 

    @eval("\$var3 = $message;"); 
    echo $var3;



}else{

   echo "<b>请勿提交非法字符</b>";
    
}

?>


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值