当前位置:网站首页>thinkphp3.2.3日志包含分析
thinkphp3.2.3日志包含分析
2022-06-22 09:53:00 【Sk1y】
thinkphp3.2.3日志包含分析
入口点修改
入口点在\Application\Home\Controller\IndexController.class.php中

我们将这个初始的index代码进行修改,这里的第6行,如果不是这样的话,会有一点问题,这个之后会详细分析
我刚开始的调试过程中,第6行为 $this->assign('value',$value);,这个会导致一个问题,之后会分析
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index($value=''){
$this->assign($value);
$this->display();
}
}
调用流程图

调试分析
assign
首先查看assign的过程

在第122行,调用了assign函数

ThinkPHP\Library\Think\View.class.php中定义的assign()

到这里就会发现一个问题,这里会创建一个tVar[‘name’]=$value,而这个name的值就是value,就是之后一切数组嵌套的原因,这是因为我的最开始的\Application\Home\Controller\IndexController.class.php中写的有问题

我们将assign的第一个参数删除,那么在assign()函数中,就会满足if条件,进行第38行

然后执行display的时候,tVar中才是一个键值对,而不是value中又有一个键值对

display
从最开始的display开始

然后在ThinkPHP\Library\Think\View.class.php的第125行,进行赋值,将tVar传值给了$params

在ThinkPHP\Library\Think\Hook.class.php的listen函数中,第89行,将$params传入exec函数

然后ThinkPHP\Library\Think\Hook.class.php的exec中,第119行,将params传入run函数

在ThinkPHP\Library\Behavior\ParseTemplateBehavior.class.php的run函数这里,data其实就是params,然后将data[‘var’]传入fetch函数

在ThinkPHP\Library\Think\Template.class.php中,第75行,将上面的传入的data[‘var’]赋值为this->tVar,然后77行,将this->tVar传入load函数

在ThinkPHP\Library\Think\Storage\Driver\File.class.php中第77行进行判断,然后再78行进行extract赋值,但是因为是嵌套数组,所以其实是整了个value数组,但是value没定义,如左边的变量

所以其实这个display(),就是整一个params,然后一路传参,然后利用最后第78行的extract赋值,覆盖_filename,进行文件包含
我的问题在于刚开始的params是个嵌套数组,多嵌套了一层,这就是问题所在!!!
所以将最开始的 $this->assign('value',$value);删除第一个参数即可
poc分析
m参数指定文件夹,c参数指定控制器,a参数指定方法,value参数就是我们的可控参数
首先传参m
index.php?m=--><?=phpinfo();?>

然后在Application\Runtime\Logs\Common\22_06_14.log中有记录

得到日志文件的路径,然后文件包含执行任意命令
index.php?m=Home&c=Index&a=index&value[_filename]=.\Application\Runtime\Logs\Common\22_06_14.log
关于日志文件生成
日志文件有两类,日志以天为单位进行记录
Application\Runtime\Logs\Common\22_06_14.log
Application\Runtime\Logs\Home\22_06_14.log

当调试模式开启

不报错的情况下,在Application\Runtime\Logs\Home\中生成日志
报错的情况下,在Application\Runtime\Logs\Common中生成日志

当调试模式关闭

不报错的情况下,不生成日志
报错的情况下,在Application\Runtime\Logs\Common中生成日志

关于payload
index.php?m=Home&c=Index&a=index&value[_filename]=.\Application\Runtime\Logs\Common\22_06_14.log
三个参数分别是模块,控制器,操作
这里m参数指定文件夹,c参数指定控制器,a参数指定方法,value参数就是我们的可控参数
thinkphp采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作,下面是一个标准的URL访问格式:
第一种访问方式
http://localhost:/thinkphp/index.php/Home/Index/index 入口文件/模块/控制器/操作
第二种访问方式(传参数)
http://localhost:/thinkphp/index.php?m=Home&c=Index&a=index 传三个参数
参考链接
边栏推荐
- 秋招秘籍B
- Win+sublime Text3 + go 1.9.2 environment setup diagram
- Philosopher‘s Walk Gym 分治+分形
- [Luogu] P1083 [NOIP2012 提高组] 借教室(线段树)
- AttributeError: module ‘skimage.draw‘ has no attribute ‘circle‘
- Redis 切片集群的数据倾斜分析
- 使用 Matplotlib 这么久,竟不知道数据可以动起来
- Debian10配置RSyslog+LoganAlyzer日志服务器
- Software engineering topics
- 编译basalt时出现的报错
猜你喜欢

Mapping multiple exit servers on ENSP

【深度学习】不得了!新型Attention让模型提速2-4倍!

DHCP中继代理

被曝泄露超 1.7 亿条隐私数据,学习通回应:尚未发现明确证据

【科普】一文弄懂监督式学习、非监督式学习以及强化式学习

Overview of microservice architecture

VS2022连接sqlserver数据库教程

Should the theme of the IDE be bright or dark? Here comes the ultimate answer!

抖音实战~手机号一键注册登录流程(验证码)

前 AMD 芯片架构师吐槽,取消 K12 处理器项目是因为 AMD 怂了!
随机推荐
Read the history of it development in one breath
SQL编程task06作业-秋招秘籍ABC
Redis 切片集群的数据倾斜分析
Ctfshow web realizes killing through one question
通过docker安装mysql(5.7+8.0)并配置主从复制(GTID+增强半同步)
Mapping Multi - export Server on ENSP
Pytorch实现波阻抗反演
PAT甲级 - 1010 Radix(思维+二分)
Attack and defense world web practice area beginner level
[cmake命令笔记]find_path
FileZilla server prompts 550 could not open file for reading when downloading files (illustration)
[Luogu] P1083 [NOIP2012 提高组] 借教室(差分)
6-32 construction of linked list by header insertion method
使用ELK保存Syslog、Netflow日志和审计网络接口流量
全力以赴把防汛救灾措施落细落实落到位 坚决守护好人民群众生命财产安全
坚决打好打赢防汛救灾这场硬仗 全力保障人民群众生命财产安全
在ensp上做多出口服務器映射
Qt编写物联网管理平台36-通信协议
Software engineering topics
Record a time when Kali encounters vmtools button gray install vmtools