【安全漏洞】ThinkPHP 3.2.3 漏洞复现

这篇具有很好参考价值的文章主要介绍了【安全漏洞】ThinkPHP 3.2.3 漏洞复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

$this->show 造成命令执行

Home\Controller\IndexController 下的index中传入了一个可控参数,跟进调试看一下。

class IndexController extends Controller
{
    public function index($n='')
    {
        $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script></p>Hello '.$n, 'utf-8');
    }
} 

跟进 display()

protected function show($content,$charset='',$contentType='',$prefix='') {
    $this->view->display('',$charset,$contentType,$content,$prefix);
} 

一路跟进到 fetch(),然后一路进入 Hook::listen('view_parse', $params);

public function fetch($templateFile='', $content='', $prefix='') {
    if (empty($content)) {
        $templateFile   =   $this->parseTemplate($templateFile);
        // 模板文件不存在直接返回
        if (!is_file($templateFile)) {
            E(L('_TEMPLATE_NOT_EXIST_').':'.$templateFile);
        }
    } else {
        defined('THEME_PATH') or    define('THEME_PATH', $this->getThemePath());
    }
    // 页面缓存
    ob_start();
    ob_implicit_flush(0);
    if ('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { // 使用PHP原生模板
        $_content   =   $content;
        // 模板阵列变量分解成为独立变量
        extract( $this->tVar, EXTR_OVERWRITE);
        // 直接载入PHP模板
        empty($_content)?include $templateFile:eval('?>'.$_content);
    } else {
        // 视图解析标签
        $params = array('var'=> $this->tVar,'file'=>$templateFile,'content'=>$content,'prefix'=>$prefix);
        Hook::listen('view_parse', $params);
    }
    // 获取并清空缓存
    $content = ob_get_clean();
    // 内容过滤标签
    Hook::listen('view_filter', $content);
    // 输出模板文件
    return $content;
} 

关键地方在这,我们之前 index 里的内容被存入了缓存文件php文件中,连带着我们输入的可控的php代码也在其中,然后包含了该文件,所以造成了命令执行。

public function load($_filename,$vars=null){
    if(!is_null($vars)){
        extract($vars, EXTR_OVERWRITE);
    }
    include $_filename;
} 

sql注入

/Application/Home/Controller/IndexController.class.php 添加一段SQL查询代码。http://localhost/tp323/index.php/Home/Index/sql?id=1 查询入口。

public function sql()
{
    $id = I('GET.id');
    $user = M('user');
    $data = $user->find($id);
    var_dump($data);
} 

传入 id=1 and updatexml(1,concat(0x7e,user(),0x7e),1)--+ ,跟进调试。进入 find() 函数,先进行一段判断,传入的参数是否是数字或者字符串,满足条件的话 $options['where']['id']=input

if(is_numeric($options) || is_string($options)) {
    $where[ $this->getPk()]  =   $options;
    $options                =   array();
    $options['where']       =   $where;
} 

随后进行一个判断 if (is_array($options) && (count($options) > 0) && is_array($pk))getPk()函数是查找mysql主键的函数,显然 $pk 值是 id,不满足条件

$pk  =  $this->getPk(); // $pk='id'
if (is_array($options) && (count($options) > 0) && is_array($pk)) {
    //
} 

随后执行 $options = $this->_parseOptions($options);文章来源地址https://www.toymoban.com/news/detail-531561.html

protected function  _parseOptions($options=array()) {
    if (is_array($options)) {
        $options =  array_merge( $this->options, $options);
    }

    if (!isset($options['table'])) {
        // 自动获取表名
        $options['table']   =   $this->getTableName();
        $fields             =   $this->fields;
    } else {
        // 指定数据表 则重新获取字段列表 但不支持类型检测
        $fields             =   $this->getDbFields();
    }

    // 数据表别名
    if (!empty($options['alias'])) {
        $options['table']  .=   ' '.$options['alias'];
    }
    // 记录操作的模型名称
    $options['model']       =   $this->name;

    // 字段类型验证
    if (isset($options['where']) && is_array($options['where']) && !empty($fields) && !isset($options['join'])) {
        // 对数组查询条件进行字段类型检查
        foreach ($options['where'] as $key=>$val) {
            $key            =   trim($key);
            if (in_array($key, $fields, true)) {
                if (is_scalar($val)) {
                    $this->_parseType($options['where'], $key);
                }
            } elseif (!is_numeric($key) && '_' != substr($key, 0, 1) && false === strpos($key, 

到了这里,关于【安全漏洞】ThinkPHP 3.2.3 漏洞复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ThinkPHP5系列远程代码执行漏洞复现(详细)

    ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于框架对控制器名没有进行足够的检测,会导致在没有开启强制路由的情况下可执行任意方法,从而导致远程命令执行漏洞。 漏洞危害 启动环境 切换到/thinkphp/5.0.23-rce# 目录下 将version改为2,保存并退出 接着执行 此时环境

    2024年02月12日
    浏览(28)
  • Thinkphp5.0.23 rce(远程代码执行)的漏洞复现

    框架介绍: ThinkPHP是一款运用极广的PHP开发框架。 漏洞引入: 其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。 1、访问靶机地址+端口号 进入首页 2、Burp抓包修改传参方式为Po

    2024年02月06日
    浏览(34)
  • ThinkPHP5 5.0.23远程代码执行漏洞+webshell工具连接(复现详细过程)

    目录 漏洞介绍 漏洞复现 1.环境搭建 2.漏洞利用 5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。 1.环境搭建 使用docker容器搭建漏洞环境,进入漏洞文件所在。 cd vulhub/thinkphp/5.0.2

    2024年02月06日
    浏览(78)
  • 多个安全厂商安全设备 远程命令执行漏洞复现

    此文章仅用于技术交流,严禁用于对外发起恶意攻击!!! 该漏洞可执行远程代码 FOFA:body=“/webui/images/default/default/alert_close.jpg”

    2024年02月03日
    浏览(28)
  • 组件安全以及漏洞复现

    A9:2017-使⽤含有已知漏洞的组件 A06:2021-Vulnerable and Outdated Components ​ 组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程

    2024年02月09日
    浏览(31)
  • 【网络安全---漏洞复现】Tomcat CVE-2020-1938 漏洞复现和利用过程(特详细)

    分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记 Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的

    2024年02月08日
    浏览(37)
  • 框架安全-CVE 漏洞复现&Django&Flask&Node.js&JQuery框架漏洞复现

    中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic,JBoos,WebSphere,Jenkins ,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring,Flask,jQuery 等 1、开发框架-PHP-Laravel-Thinkphp 2、开发框架-Javaweb-St2-Spring 3、开发框架-Python-django-Flask 4、开发框架-Javascript-Nod

    2024年02月08日
    浏览(36)
  • 【网络安全】CVE漏洞分析以及复现

    漏洞详情 Shiro 在路径控制的时候,未能对传入的 url 编码进行 decode 解码,导致攻击者可以绕过过滤器,访问被过滤的路径。 漏洞影响版本 Shiro 1.0.0-incubating 对应 Maven Repo 里面也有 【一一帮助安全学习,所有资源获取一一】 ①网络安全学习路线 ②20份渗透测试电子书 ③安全

    2024年02月06日
    浏览(34)
  • 网络安全--wazuh环境配置及漏洞复现

    目录 一、wazuh配置  二、wazuh案例复现 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 查看自身ip wazuh重启: 当我们使用本地的cmd通过ssh一直连接wazuh的时候便会出现十级报错,此次在后台可以明显的看到有爆破的提示扫描,通过分析其具体的数据包以及对应的规则理解到wu

    2024年02月11日
    浏览(28)
  • Apache Tomcat 安全漏洞(CVE-2020-13935)复现

    漏洞详情: Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat中的WebSocket存在安全漏洞,该漏洞源于程序没有正确验证payload的长度。攻击者可利用该漏洞造成拒绝服务(无限循环)。 影响版

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包