中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP5中的SQL注入漏洞是什么

發布時間:2021-10-11 10:58:59 來源:億速云 閱讀:189 作者:柒染 欄目:網絡管理

今天就跟大家聊聊有關ThinkPHP5中的SQL注入漏洞是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

漏洞概要

本次漏洞存在于 Builder 類的 parseData 方法中。由于程序沒有對數據進行很好的過濾,將數據拼接進 SQL 語句,導致 SQL注入漏洞 的產生。漏洞影響版本: 5.0.13<=ThinkPHP<=5.0.155.1.0<=ThinkPHP<=5.1.5

漏洞環境

通過以下命令獲取測試環境代碼:

composer create-project --prefer-dist topthink/think=5.0.15 tpdemo

composer.json 文件的 require 字段設置成如下:

"require": {
    "php": ">=5.4.0",
    "topthink/framework": "5.0.15"
}

然后執行 composer update ,并將 application/index/controller/Index.php 文件代碼設置如下:

<?php
namespace app\index\controller;
class Index
{
    public function index()
    {
        $username = request()->get('username/a');
        db('users')->insert(['username' => $username]);
        return 'Update success';
    }
}

application/database.php 文件中配置數據庫相關信息,并開啟 application/config.php 中的 app_debugapp_trace 。創建數據庫信息如下:

create database tpdemo;
use tpdemo;
create table users(
    id int primary key auto_increment,
    username varchar(50) not null
);

訪問 http://yoursite/index/index/index?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1 鏈接,即可觸發 SQL注入漏洞 。(沒開啟 app_debug 是無法看到 SQL 報錯信息的)ThinkPHP5中的SQL注入漏洞是什么

漏洞分析

ThinkPHP5中的SQL注入漏洞是什么首先在官方發布的 5.0.16 版本更新說明中,發現其中提到該版本包含了一個安全更新,我們可以查閱其 commit 記錄,發現其修改的 Builder.php 文件代碼比較可疑。ThinkPHP5中的SQL注入漏洞是什么接著我們直接跟著上面的攻擊 payload 來看看漏洞原理。首先, payload 數據經過 ThinkPHP 內置方法的過濾后(不影響我們的 payload ),直接進入了 $this->builderinsert 方法,這里的 $this->builder\think\db\builder\Mysql 類,代碼如下:ThinkPHP5中的SQL注入漏洞是什么Mysql 類繼承于 Builder 類,即上面的 $this->builder->insert() 最終調用的是 Builder 類的 insert 方法。在 insert 方法中,我們看到其調用 parseData 方法來分析并處理數據,而 parseData 方法直接將來自用戶的數據 $val 進行了拼接返回。我們的惡意數據存儲在 $val[1] 中,雖經過了 parseKey 方法處理,當絲毫不受影響,因為該方法只是用來解析處理數據的,并不是清洗數據。ThinkPHP5中的SQL注入漏洞是什么上面,我們看到直接將用戶數據進行拼接。然后再回到 Builder 類的 insert 方法,直接通過替換字符串的方式,將 $data 填充到 SQL 語句中,進而執行,造成 SQL注入漏洞ThinkPHP5中的SQL注入漏洞是什么至此,我們已將整個漏洞分析完了。實際上,上面的 switch 結構中,3種情況返回的數據都有可能造成 SQL 注入漏洞,但是在觀察 ThinkPHP 官方的修復代碼中,發現其只對 incdec 進行了修復,而對于 exp 的情況并未處理,這是為什么呢?實際上, exp 的情況早在傳入 insert 方法前就被 ThinkPHP 內置過濾方法給處理了,如果數據中存在 exp ,則會被替換成 exp空格 ,這也是為什么 ThinkPHP 官方沒有對 exp 的情況進行處理的原因了。具體內置過濾方法的代碼如下:ThinkPHP5中的SQL注入漏洞是什么

漏洞修復

ThinkPHP5中的SQL注入漏洞是什么

攻擊總結

最后,再通過一張攻擊流程圖來回顧整個攻擊過程。ThinkPHP5中的SQL注入漏洞是什么

看完上述內容,你們對ThinkPHP5中的SQL注入漏洞是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石景山区| 呼伦贝尔市| 双辽市| 东乌珠穆沁旗| 郎溪县| 修文县| 德江县| 新丰县| 崇明县| 固原市| 临沭县| 高雄市| 邓州市| 武威市| 泗洪县| 陆丰市| 湾仔区| 隆尧县| 桑植县| 左权县| 介休市| 江西省| 怀远县| 南川市| 武鸣县| 萍乡市| 濉溪县| 印江| 旺苍县| 昭通市| 县级市| 班玛县| 工布江达县| 德令哈市| 肇庆市| 剑阁县| 靖江市| 皋兰县| 恩平市| 铁岭县| 泌阳县|