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

阅读量45005

发布时间 : 2021-09-28 18:00:12

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

本文由安全牛课堂原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/253535

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
安全牛课堂
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66