RCE漏洞全称为远程命令/代码执行漏洞(英文为remote command/code execute),可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
本文中将对Thinkphp5.0.X代码执行漏洞进行简单的分析。
漏洞影响版本:ThinkPHP5.0.X 代码执行漏洞
漏洞成因:控制器过率不严,结合直接返回类名的代码操作,导致可以用命名空间的方式来调用任意类的任意方法
影响范围:ThinkPHP5.0.X-5.0.23
EXP:
/index.php?s=/index/\think\app/invokefunction&function=phpinfo&vars[0]=100
/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
一般入口文件是在站点根目录下的public目录下的index.php文件:
在框架引导文件中调用APP类的run函数,后发现进入autoload自动加载类
发现代码在寻找think\app的类
查找think\app类所对应的类文件的物理路径,并包含
途中在think\app类文件中86行,发现filter过率函数(换空)
在app类文件的103行放出可调度的信息dispatch,这个代表提交路由的状态模式,而这个变量是由routeCheck函数返回,我们进入routeCheck函数查看
发现routeCheck函数为路由检查函数,跟进后发现我们提交的路由为合理路由,并没有过滤 (path里的路径为index/think\app/invokefunction)
继续往下,发现使用Route:parseUrl函数对路由进行解析,将模块/控制器/函数/参数从我们提交的路由中分离出来,分别加载
在route:parseUrl中使用ParseUrlPath对路径由/进行分割,发现我们提交的\think\app并没有被分割开来
继续往下发现解析控制器的内容,没有任何过滤,这样使得我们可以调用框架中任何控制器的类文件
往下发现可以任意执行类的任意函数,传入任意参数
到现在位置,我们可以调用任意类文件中的任意函数
继续在app类文件执行往下,发现exce函数
app类文件的invokefunction函数中,function为我们传入的phpinfo,这里使用到了反射类,将传入的函数对象反射,最后通过invokeArgs执行。
关于反射类执行类的函数:
以上内容选择安全牛课堂《PHP代码审计之RCE漏洞》课程
本课程您还将学习到UsualTool后台getshell入门审计、pluck漏洞代码、zzzphp远程代码执行漏洞审计、PbootCMS远程代码执行漏洞审计、ecshop日志文件代码执行漏洞审计、Empire后台代码执行getshell、Thinkphp5.0.X代码执行漏洞等相关漏洞代码分析以及漏洞复现。
扫描下方二维码直接跳转至课程页面
发表评论
您还未登录,请先登录。
登录