溫馨提示×

溫馨提示×

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

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

ThinkPHP框架的用法

發(fā)布時間:2021-06-18 10:38:29 來源:億速云 閱讀:116 作者:chen 欄目:編程語言

這篇文章主要介紹“ThinkPHP框架的用法”,在日常操作中,相信很多人在ThinkPHP框架的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ThinkPHP框架的用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

ThinkPHP簡介

ThinkPHP 是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發(fā)框架 ,創(chuàng)立于2006年初,遵循Apache2開源協(xié)議發(fā)布,是為了敏捷WEB應用開發(fā)和簡化企業(yè)應用開發(fā)而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。并且擁有眾多的原創(chuàng)功能和特性,在社區(qū)團隊的積極參與下,在易用性、擴展性和性能方面不斷優(yōu)化和改進,已經成長為國內最領先和最具影響力的WEB應用開發(fā)框架,眾多的典型案例確??梢苑€(wěn)定用于商業(yè)以及門戶級的開發(fā)。

漏洞簡述

盡管ThinkPHP 5.0.x框架采用了參數化查詢方式,來操作數據庫,但是在 insert 和 update 方法中,傳入的參數可控,且無嚴格過濾,最終導致本次SQL注入漏洞發(fā)生。

以ThinkPHP框架 5.0.x sql注入漏洞進行分析

thinkphp官網下載5.0.15版本: http://www.thinkyisu.com/down/1125.html 。搭建好數據庫,數據庫為tp,表名為user,其中有兩個字段id和username。

修改數據庫配置信息 application/database.php,在application/config.php 中打開調試和trace。

在 application/index/controller/Index.php 中Index類中添加方法:

public  function testsql()
    {
        $username = input('get.username/a');
        db('user')->where(['id'=> 1])->insert(['username'=>$username]);
    }

解釋如下:

http://127.0.0.1/thinkphp/  public/        index.php/   index/   index/   index
       域名       網站目錄    對外訪問目錄    入口文件       前臺     控制器    方法名

擴展:

其中關于 updatexml 函數UPDATEXML (XML_document, XPath_string, new_value);

第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc

第二個參數:XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網上查找教程。

第三個參數:new_value,String格式,替換查找到的符合條件的數據

作用:改變文檔中符合條件的節(jié)點的值

訪問payload,就可以觸發(fā)漏洞了。

漏洞分析

首先,我們知道 insert 方法存在漏洞,那就查看 insert 方法的具體實現。

通過input獲取到參數后,username變量情況如下:

跟入insert,thinkphp/library/think/db/Query.php

然后執(zhí)行insert語句

$sql = $this->builder->insert($data, $options, $replace);

跟入 thinkphp/library/think/db/Builder.php

跟入parseData至 thinkphp/library/think/db/Builder.php

可以看出$val是數組,且根據$val[0]值為inc,會通過switch語句進入到’inc’:

此處的parseKey,即thinkphp/library/think/db/builder/Mysql.php

此處并未對傳入的$key進行更多的過濾與檢查,將其與前面經過parseKey的結果進行拼接后返回給result

至此注入成功。

漏洞修復

https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b

在進行dec和inc操作之前對$val[1]的值進行了再次確認。

總結

第一次審計Thinkphp框架   ,結合Thinkphp5.0手冊以及網上教程完成此次漏洞的審計。

到此,關于“ThinkPHP框架的用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

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

AI