這篇文章主要介紹“ThinkPHP框架的用法”,在日常操作中,相信很多人在ThinkPHP框架的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ThinkPHP框架的用法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)主營臺前網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,臺前h5小程序制作搭建,臺前網(wǎng)站營銷推廣歡迎臺前等地區(qū)企業(yè)咨詢
ThinkPHP簡介
ThinkPHP 是一個免費開源的,快速、簡單的面向?qū)ο蟮?輕量級PHP開發(fā)框架 ,創(chuàng)立于2006年初,遵循Apache2開源協(xié)議發(fā)布,是為了敏捷WEB應(yīng)用開發(fā)和簡化企業(yè)應(yīng)用開發(fā)而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設(shè)計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。并且擁有眾多的原創(chuàng)功能和特性,在社區(qū)團隊的積極參與下,在易用性、擴展性和性能方面不斷優(yōu)化和改進,已經(jīng)成長為國內(nèi)最領(lǐng)先和最具影響力的WEB應(yīng)用開發(fā)框架,眾多的典型案例確保可以穩(wěn)定用于商業(yè)以及門戶級的開發(fā)。
漏洞簡述
盡管ThinkPHP 5.0.x框架采用了參數(shù)化查詢方式,來操作數(shù)據(jù)庫,但是在 insert 和 update 方法中,傳入的參數(shù)可控,且無嚴格過濾,最終導(dǎo)致本次SQL注入漏洞發(fā)生。
以ThinkPHP框架 5.0.x sql注入漏洞進行分析
thinkphp官網(wǎng)下載5.0.15版本: http://www.thinkyisu.com/down/1125.html 。搭建好數(shù)據(jù)庫,數(shù)據(jù)庫為tp,表名為user,其中有兩個字段id和username。
修改數(shù)據(jù)庫配置信息 application/database.php,在application/config.php 中打開調(diào)試和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
域名 網(wǎng)站目錄 對外訪問目錄 入口文件 前臺 控制器 方法名
擴展:
其中關(guān)于 updatexml 函數(shù)UPDATEXML (XML_document, XPath_string, new_value);
第一個參數(shù):XML_document是String格式,為XML文檔對象的名稱,文中為Doc
第二個參數(shù):XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網(wǎng)上查找教程。
第三個參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)
作用:改變文檔中符合條件的節(jié)點的值
訪問payload,就可以觸發(fā)漏洞了。
漏洞分析
首先,我們知道 insert 方法存在漏洞,那就查看 insert 方法的具體實現(xiàn)。
通過input獲取到參數(shù)后,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是數(shù)組,且根據(jù)$val[0]值為inc,會通過switch語句進入到’inc’:
此處的parseKey,即thinkphp/library/think/db/builder/MySQL.php
此處并未對傳入的$key進行更多的過濾與檢查,將其與前面經(jīng)過parseKey的結(jié)果進行拼接后返回給result
至此注入成功。
漏洞修復(fù)
https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b
在進行dec和inc操作之前對$val[1]的值進行了再次確認。
總結(jié)
第一次審計Thinkphp框架 ,結(jié)合Thinkphp5.0手冊以及網(wǎng)上教程完成此次漏洞的審計。
到此,關(guān)于“ThinkPHP框架的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前標題:ThinkPHP框架的用法
URL網(wǎng)址:http://weahome.cn/article/pcjphc.html