1:打开环境,翻译看看意思,随便传一个参数如图,随意传参获取到smarty提示,有可能是模板注入
2:审计一下代码,preg_match后面就是代表这些被过滤了,环境地质+./template.html就是假的答案,就想到了抓包看看
还是看了别人的才知道个东西叫模板注入,要验证一下是不是模板注入,像这样,114.67.175.224:18407/?flag.txt?a={4*4}里面的4*4随便你,后面代码后面会多出一个像这样的
3:构造payload
补充
php命令执行函数有
https://www.php.net/exec
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文件读取函数
printr() fread() fgets() vardump()
用scandir函数去查找关于flag的文件,还有获取flag文件内容:/index.php?f={print_r(scandir("/"))}
/index.php?f={var_dump(scandir("/"))},发现重要东西,_12686这个文件夹名字就不一样了,先搞它
在后面粘贴上,/index.php?f={fread(fopen("/_12686","r"),4096)}
4096是啥,我也不晓得
得到flag
4:呃呃呃4096是什么,速度?看到博客的,知道的,qql告诉我吧
还有一个大佬的博客,我就是看了·他的payload我才做出来