课程 |《PHP代码审计之RCE漏洞》

阅读量    3505 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

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代码执行漏洞等相关漏洞代码分析以及漏洞复现。

扫描下方二维码直接跳转至课程页面

课程视频地址:https://www.aqniukt.com/my/course/13995

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多