這篇文章主要介紹了ThinkPHP框架 5.0.x sql注入漏洞示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、西市ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的西市網(wǎng)站制作公司
ThinkPHP簡(jiǎn)介
ThinkPHP 是一個(gè)免費(fèi)開(kāi)源的,快速、簡(jiǎn)單的面向?qū)ο蟮?輕量級(jí)PHP開(kāi)發(fā)框架 ,創(chuàng)立于2006年初,遵循Apache2開(kāi)源協(xié)議發(fā)布,是為了敏捷WEB應(yīng)用開(kāi)發(fā)和簡(jiǎn)化企業(yè)應(yīng)用開(kāi)發(fā)而誕生的。ThinkPHP從誕生以來(lái)一直秉承簡(jiǎn)潔實(shí)用的設(shè)計(jì)原則,在保持出色的性能和至簡(jiǎn)的代碼的同時(shí),也注重易用性。并且擁有眾多的原創(chuàng)功能和特性,在社區(qū)團(tuán)隊(duì)的積極參與下,在易用性、擴(kuò)展性和性能方面不斷優(yōu)化和改進(jìn),已經(jīng)成長(zhǎng)為國(guó)內(nèi)最領(lǐng)先和最具影響力的WEB應(yīng)用開(kāi)發(fā)框架,眾多的典型案例確保可以穩(wěn)定用于商業(yè)以及門(mén)戶(hù)級(jí)的開(kāi)發(fā)。
漏洞簡(jiǎn)述
盡管ThinkPHP 5.0.x框架采用了參數(shù)化查詢(xún)方式,來(lái)操作數(shù)據(jù)庫(kù),但是在 insert 和 update 方法中,傳入的參數(shù)可控,且無(wú)嚴(yán)格過(guò)濾,最終導(dǎo)致本次SQL注入漏洞發(fā)生。
以ThinkPHP框架 5.0.x sql注入漏洞進(jìn)行分析
thinkphp官網(wǎng)下載5.0.15版本: http://www.thinkphp.cn/down/1125.html 。搭建好數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)為tp,表名為user,其中有兩個(gè)字段id和username。

修改數(shù)據(jù)庫(kù)配置信息 application/database.php,在application/config.php 中打開(kāi)調(diào)試和trace。


在 application/index/controller/Index.php 中Index類(lèi)中添加方法:
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 域名 網(wǎng)站目錄 對(duì)外訪(fǎng)問(wèn)目錄 入口文件 前臺(tái) 控制器 方法名
擴(kuò)展:
其中關(guān)于 updatexml 函數(shù)UPDATEXML (XML_document, XPath_string, new_value);
第一個(gè)參數(shù):XML_document是String格式,為XML文檔對(duì)象的名稱(chēng),文中為Doc
第二個(gè)參數(shù):XPath_string (Xpath格式的字符串) ,如果不了解Xpath語(yǔ)法,可以在網(wǎng)上查找教程。
第三個(gè)參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)
作用:改變文檔中符合條件的節(jié)點(diǎn)的值
訪(fǎng)問(wèn)payload,就可以觸發(fā)漏洞了。

漏洞分析
首先,我們知道 insert 方法存在漏洞,那就查看 insert 方法的具體實(shí)現(xiàn)。
通過(guò)input獲取到參數(shù)后,username變量情況如下:
.jpg)
跟入insert,thinkphp/library/think/db/Query.php
.jpg)
然后執(zhí)行insert語(yǔ)句
$sql = $this->builder->insert($data, $options, $replace);
跟入 thinkphp/library/think/db/Builder.php
.jpg)
跟入parseData至 thinkphp/library/think/db/Builder.php
.jpg)
可以看出$val是數(shù)組,且根據(jù)$val[0]值為inc,會(huì)通過(guò)switch語(yǔ)句進(jìn)入到’inc’:
此處的parseKey,即thinkphp/library/think/db/builder/MySQL.php
.jpg)
此處并未對(duì)傳入的$key進(jìn)行更多的過(guò)濾與檢查,將其與前面經(jīng)過(guò)parseKey的結(jié)果進(jìn)行拼接后返回給result
至此注入成功。
漏洞修復(fù)
https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b
.jpg)
在進(jìn)行dec和inc操作之前對(duì)$val[1]的值進(jìn)行了再次確認(rèn)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ThinkPHP框架 5.0.x sql注入漏洞示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
本文標(biāo)題:ThinkPHP框架5.0.xsql注入漏洞示例分析
當(dāng)前網(wǎng)址:http://chinadenli.net/article24/jijoce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)