| 0 前言在 2019 年的 CISCN 《Laravel1》 一题中,寻找利用链可以找到这样一个语句: $f($this-namespace.$item['key'], null) 
 这时候有 2 种思路: 文件读取命令执行
 由易到难吧。先考虑文件读取,直接利用文件读取相关的函数读取 flag 文件。但经过测试使用 file_get_contents无法回显。这时候就需要用其他的文件读取函数进行测试,平时就需要积累这些函数的用法。 1 文件读取函数file_get_contents   
fread
fgets
fgetss
file
parse_ini_file
readfile    
highlight_file  
show_source 
 
<?php
print(sprintf("%'-10s%-'-30s", '-', 'file_get_contents').PHP_EOL);
echo file_get_contents('flag.txt');
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'fopen fread').PHP_EOL);
$file = fopen("flag.txt","rb");
echo fread($file,1024);     
fclose($file);
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'fopen fgets').PHP_EOL);
$file = fopen("flag.txt","r");      
echo fgets($file, 4096);        
fclose($file);
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'fopen fgetss').PHP_EOL);
$file = fopen("flag.txt","r");     
echo fgetss($file, 4096);        
fclose($file);
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'readfile').PHP_EOL);
echo readfile("flag.txt");      
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'file').PHP_EOL);
print_r(file('flag.txt'));      
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'parse_ini_file').PHP_EOL);
echo parse_ini_file("flag.txt");        
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'show_source').PHP_EOL);
show_source('flag.txt');
echo PHP_EOL;
print(sprintf("%'-10s%-'-30s", '-', 'highlight_file').PHP_EOL);
highlight_file('flag.txt');
echo PHP_EOL;
?>
 2 总结在 CTF 中至少应该掌握下面这些函数,做题的时候才能得心应手。 (以后慢慢补充) 这些函数可以在 Seay 源码审计系统的正则表达式中找到(目前没发现更全的总结),或者基于 Seay 的审计插件 maduit 中。 |