TP5 RCE利用链改造

原因

在对某网站浸透过程中,经过报错页面发现网站架构为ThinkPHP 5.0.23,存在method RCE破绽。但是,运用常规payload提示__construct关键字被禁用,因而payload无法生效。但是这个破绽的关键点不在于__construct办法,而是Request类的method办法能够让我们调用类中的恣意办法,因而,开端寻觅另一条应用链。

剖析

  • 破绽应用点
    • Request类的method办法能够让我们调用类中的恣意办法

  • 剖析
    • 该类为ThinkPHP的恳求类,主要寄存恳求中的各种信息,没有办法直接执行代码,但是经过filter链能够间接执行代码
  • 难点:
    • 之前的payload都是经过__construct函数覆写恳求中的参数信息以及filter链,从而控制调用的函数以及参数
    • filter函数仅能注册filter链,无法覆写参数
  • 思绪
    • 经过filter链将无法控制的参数引导到能够控制的参数

结构

  • 由于官网不再提供5.0.23版本的下载,此处运用5.0.22完好版做实验,下载地址
  • PHP版本:7.3.4

开启debug形式

0. filter链

  • 开启debug形式下,进入我们filter链的第一个参数为server[REQUEST_METHOD],即字符串POST
  • 调用堆栈如图所示

1. phpinfo

  • phpinfo函数能够承受一个整数作为参数,但是,当传入的参数为0的时分,不会输出任何信息,因而intval函数无法运用

  • 需求寻觅一个函数能够承受字符串作为参数,并可以返回一个不为0的整数,以供后续phpinfo运用
  • 此处运用error_report函数,原型如下:

  • 因而结构POC如下
post :  0=error_reporting&1=phpinfo&_method=filter
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像死王0