- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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的参数或者用正则严格判断输入的数据格式。
对于
您可能关注的文档
- 《景观规划设计》课件——中国城市景观公共空间发展历程.pptx
- 《开发人员安全编码实战培训》课件——32-代码执行漏洞简介.pptx
- 《Photoshop》课件——界面与基本介绍.pptx
- 《餐饮服务》课程知识解析——“1.餐饮服务行业概述”.pdf
- 《餐饮服务》课程知识解析——“3.餐饮服务人员职业素养要求”.pdf
- 《餐饮服务》课程知识解析——“4.餐饮服务礼仪规范(仪容仪表、言行举止)”.pdf
- 《餐饮服务》课程知识解析——“5.餐饮服务沟通技巧与客户关系维护”.pdf
- 《餐饮服务》课程知识解析——“6.餐饮服务安全与卫生管理基础”.pdf
- 《餐饮服务》课程知识解析——“8.迎宾接待服务规范”.pdf
- 《餐饮服务》课程知识解析——“9.点餐服务技巧(菜品推荐、特殊需求处理)”.pdf
文档评论(0)