学php看漏洞代码,PHP代码审计学习(5)——代码执行漏洞

标签:user   配置   字符   应用   定义   漏洞   通过   就是   来替

代码执行

代码执行是指应用程序本身过滤不严,当应用在调用一些字符串函数的时候用户可以通过请求将代码注入到应用中执行。

存在于eval()、assert()、preg_replace()、call_user_func()、array_map()以及动态函数中,很难通过黑盒测试查找。

挖掘思路

1:用户能够控制函数输入

2:存在可执行的危险函数

常见危险函数

1、eval和assert

这俩两个函数原本作用就是动态执行代码,所以他们的参数直接就是PHP代码

phpif(isset($_REQUEST[‘cmd‘])){

$cmd= ($_REQUEST["cmd"]);

system($cmd);//eval($cmd);

echo "$cmd";

die;

}?>

因为对传入没有过滤,所以直接传入PHP代码

?cmd=phpinfo();

2、preg_replace函数

对字符串进行正则处理,一般挖掘的时候是都是绕过正则的

phppreg_replace("/\[(.*)\]/e",‘\\1‘,$_GET[‘str‘]);?>

第一组是匹配中括号的的内容,\\1作为第一组的结果填充,这里是直接执行代码,所以

?str=[phpinfo()]

就能直接执行phpinfo()

3、回调函数

call_user_func()和array_map()等都有调用其他函数的功能,过滤不严且传入参数可控,就可以调用函数来执行代码

php$b="phpinfo()";call_user_func($_GET[‘a‘],$b);?>

当传入assert函数的时候,就可以执行phpinf()

?a=assert

4、动态函数执行(重点)

因为PHP的特性,PHP函数可以由字符串拼接,我们可以用一个变量名去代替一个函数

php$_GET[‘a‘]{$_GET[‘b‘]};?>

接受a的参数作为函数,b的为函数的参数,所以传入

?a=assert&b=phpinfo()

就会打印PHP的信息

修复

1、尽量不要执行外部的应用程序或命令

2、使用自定义函数或函数库来替代外部应用程序或命令的功能

3、使用escappeshellarg函数来处理命令的参数

4、使用sare_mode_exec_dir来指定可执行的文件路径

5、将执行的参数做白名单限制,在代码或配置文件中限制某些参数

PHP代码审计学习(5)——代码执行漏洞

标签:user   配置   字符   应用   定义   漏洞   通过   就是   来替

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值