文章目录
闲扯
影响版本
搭建复现
分析
闲扯
无,略。
影响版本
5.0.0~~5.0.18
5.1.0~~5.1.10
搭建复现
之前5.0.12的被我插入了好多自己的代码,懒得删了= =直接去下5.0.18的,
http://www.thinkphp.cn/donate/download/id/1141.html
然后在application\index\controller\Index.php 把index改成这样,调用漏洞函数:
发现访问报错,查看日志,找不到assign()函数:
全局搜索找到它,然后加上,现在index类就变成了:
再去访问,还是报错,查看日志,不存在模板文件:
自己创建目录创建文件,index.html文件内容随意:
然后在public目录下放一张图片马:
访问:
/public/index.php/index/index/index?cacheFile=shell.jpg
分析
get()函数就是获取字段的,不需要跟。
跟入assign()
thinkphp\library\think\Controller.php 144
然后又跳入了另一个assign()
thinkphp\library\think\View.php 92
我以为是在这里发生覆盖的,结果看到后面的值发现不是:(以前学习变量覆盖的时候都没找到这个函数,知识点+1)
然后进入fetch()函数:
thinkphp\library\think\Controller.php 118
跳转到另一个fetch()
thinkphp\library\think\View.php 148
一直跟呀跟,不知道过了多久,跟到了
thinkphp\library\think\Template.php 160行 fetch()函数
在188行的地方跳转到了read()函数里
thinkphp\library\think\template\driver\File.php 43 read()
到这里的时候,如果$vars不为空,且是数组的话,就调用extract函数进行覆盖,而且第二个参数是默认的:
再看看现在的参数值:
哦吼,覆盖之后变成了这样,然后调用了下面的include 进行包含:
按道理来说,include完成之后,页面应该就直接回显了,但是我在fetch()函数里,把echo注释之后,就不能回显了?
找到了这个:不过还是有一点不太明白的样子,略。
还剩下缓存文件rce和版本6的洞,冲冲冲。
原文链接:
https://blog.csdn.net/qq_43622442/article/details/108976791