代码注入漏洞以及修复方法
2016-10-12 17:32
1046 查看
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>";
}
?>
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>";
}
?>
相关文章推荐
- ThinkPHP框架任意代码执行漏洞的利用及其修复方法
- 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法
- ThinkPHP框架任意代码执行漏洞的利用及其修复方法
- Angularjs MVC 以及 $scope 作用域 Angularjs 模块 的 run 方法 以及依赖注入中代码压缩问题
- phpMyFAQ 2.7.1发布 修复代码注入漏洞
- 检查Linux Bash安全漏洞以及各环境修复解决方法
- AngularJS基础——MVC、$scope的作用域、依赖注入的代码压缩以及run方法
- Linux Bash安全漏洞以及各环境修复解决方法
- DEDECMS去除后门隐患和漏洞以及冗余代码的方法
- 阿里提示Discuz uc.key泄露导致代码注入漏洞的解决方法
- Discuz!uc.key泄露导致代码注入漏洞uc.php的解决方法
- Strtus2再爆漏洞,以及修复方法
- PHPCMS V9专题模块注入漏洞的分析与修复方法
- 如何获取C#中方法的执行时间以及其代码注入详解
- 向其他进程注入代码的三种方法(转)
- 向其他进程注入代码的三种方法
- 动网论坛上传文件漏洞的原理以及攻击的代码实现
- 转:向其他进程注入代码的三种方法
- select挡住div的解决方法以及frame问题和IE、FLASH与实用代码
- 向其他进程注入代码的三种方法