《开发人员安全编码实战培训》课件——33-代码执行相关方法.pptxVIP

《开发人员安全编码实战培训》课件——33-代码执行相关方法.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第33讲代码执行相关方法与漏洞修复

引言

PHP支持可变函数的概念:如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它。这就意味着PHP中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数。

小测试

可变函数造成代码执行的原理是什么?

学习目标

能描述PHP可变函数的作用

能使用可变函数进行测试,能进行代码执行漏洞修复

增强维护代码安全的意识

array_filter()

语法:arrayarray_filter(array$array[,callable$callback[,int$flag=0]])

作用:依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则array数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

参考代码:

?php

$array[0]=$_GET[a];

array_filter($array,assert);

?

array_filter()

当PHP版本为7时,报错。

usort(),uasort()

语法:boolusort(array$array,callable$value_compare_func)

用法:本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

参考代码1:

?php

error_reporting(0);

$sort_by=$_GET[sort_by];

$sorter=strnatcasecmp;

$databases=array(1234,4321);

$sort_function=return1*.$sorter.($a[.$sort_by.],$b[.$sort_by.]);;

usort($databases,create_function($a,$b,$sort_function));

?

Payload:?sort_by=]);}phpinfo();/*

usort(),uasort()

参考代码2:

?php

$data=$_GET[data];

$arr[0]=$data;

$arr[1]=x;

functioncmp_func($a,$b){

@assert($a);

@assert($b);

}

usort($arr,cmp_func);

?

Payload:?data=phpinfo();

PHP可变函数

PHP支持可变函数的概念:如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它。这就意味着PHP中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数。

当PHP支持可变函数中有参数时,那就可以通过参数传递任意代码,造成任意代码执行。

PHP可变函数

参考代码:

?php

functionfoo(){

echofoo;

}

functionbar($arg=){

echobar;

}

functionechoit($string){

echoechoit;

}

$func=$_REQUEST[func];

echo$func();

?

程序希望通过传入的参数,执行相应的函数,例如输入foo时,执行foo()函数,传入bar时,执行bar()函数,传入echoit时,执行echoit()函数。

PHP可变函数

执行结果

PHP可变函数

但是当传输参数为phpinfo时,执行了phpinfo(),如下所示(两个版本的PHP都能利用):

PHP可变函数

若参数也设计为可传入,代码为:

?php

functionfoo(){

echofoo;

}

functionbar($arg=){

echobar;

}

functionechoit($string){

echoechoit;

}

$func=$_REQUEST[func];

$string=$_REQUEST[string];

echo$func($string);

?

PHP可变函数

若服务器为Linux系统,payload为?func=systemstring=id会调用system函数,执行系统命令id返回当前用户的信息。

代码执行漏洞的防护

对于eval()函数一定要保证,用户不能轻易接触eval的参数或者用正则严格判断输入的数据格式。

对于

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档