您好,登錄后才能下訂單哦!
這篇文章主要介紹了ThinkPHP框架 5.0.x sql注入漏洞示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
ThinkPHP簡介
ThinkPHP 是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,創立于2006年初,遵循Apache2開源協議發布,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。并且擁有眾多的原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進,已經成長為國內最領先和最具影響力的WEB應用開發框架,眾多的典型案例確保可以穩定用于商業以及門戶級的開發。
漏洞簡述
盡管ThinkPHP 5.0.x框架采用了參數化查詢方式,來操作數據庫,但是在 insert 和 update 方法中,傳入的參數可控,且無嚴格過濾,最終導致本次SQL注入漏洞發生。
以ThinkPHP框架 5.0.x sql注入漏洞進行分析
thinkphp官網下載5.0.15版本: http://www.thinkphp.cn/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]); }
我們本次的 payload 為:
http://127.0.0.1/thinkphp5.0.15/public/index.php/index/index/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1
解釋如下:
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格式,替換查找到的符合條件的數據
作用:改變文檔中符合條件的節點的值
訪問payload,就可以觸發漏洞了。
漏洞分析
首先,我們知道 insert 方法存在漏洞,那就查看 insert 方法的具體實現。
通過input獲取到參數后,username變量情況如下:
跟入insert,thinkphp/library/think/db/Query.php
然后執行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框架 5.0.x sql注入漏洞示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。