關於ThinkPHP框架的審計

2020-08-08 14:48:47
下面 下麪由框架教學欄目給大家介紹有關ThinkPHP框架的審計,希望對需要的朋友有所幫助!

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框架 ,結合Thinkphp5.0手冊以及網上教學完成此次漏洞的審計。

以上就是關於ThinkPHP框架的審計的詳細內容,更多請關注php中文網其它相關文章!