目录
前言:
前几天打CTF,遇见了一道这样的题
<?php
$a = $_GET['a'];
$b = $_GET['b'];
echo new $a($b);
?>
显然,题中没有给出任何可利用的class,这便要利用到PHP中的原生类,顾名思义,就是PHP中自带的类
查找文件的原生类:
DirectoryIterator:
该类可配合glob伪协议查找文件,它会创建一个指定目录的迭代器,当遇到echo输出时会触发Directorylterator中的__toString()方法,输出指定目录里面经过排序之后的第一个文件名
例如:
Directorylterator(glob://*flag*)
FilesystemIterator:
这个继承了DirectoryIterator类,利用方法同上
GlobIterator:
通过名字可以看出来,这个具有global性质,可以搜索全局的文件,因此无需借助glob://伪协议
可直接使用:
GlobIterator(*flag*)
读取文件的原生类:
SplFileObject:
当我们通过可查找文件的原生类查找到敏感文件时可用此类,来读取敏感文件内的内容
该类同样通过echo触发SplFileObject中的__toString()方法。(该类不支持通配符,所以必须先获取到完整文件名称才行)
例如:
SplFileObject(flag.php)
但是直接加入文件的的话,它只会返回文件的第一行字符,如果想要返回文件全部内容的话须借助php://filter伪协议
总结:
打CTF还是要多学多练,在题目中所碰到的知识点千奇百怪,还是得多积累,坚持一天一道CTF题