有關ThinkPHP框架的審計

2021-10-03 21:25:12 字數 2490 閱讀 4520

thinkphp簡介

thinkphp

是乙個免費開源的,快速、簡單的物件導向的 輕量級php開發框架 ,創立於2023年初,遵循apache2開源協議發布,是為了敏捷web應用開發和簡化企業應用開發而誕生的。thinkphp從誕生以來一直秉承簡潔實用的設計原則,在保持出色的效能和至簡的**的同時,也注重易用性。並且擁有眾多的原創功能和特性,在社群團隊的積極參與下,在易用性、擴充套件性和效能方面不斷優化和改進,已經成長為國內最領先和最具影響力的web應用開發框架,眾多的典型案例確保可以穩定用於商業以及門戶級的開發。

漏洞簡述

儘管thinkphp 5.0.x框架採用了引數化查詢方式,來運算元據庫,但是在 insert 和 update 方法中,傳入的引數可控,且無嚴格過濾,最終導致本次sql注入漏洞發生。

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

thinkphp

。搭建好資料庫,資料庫為tp,表名為user,其中有兩個欄位id和username。

我們本次的 payload 為:

解釋如下:

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

至此注入成功。

漏洞修復

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

總結

第一次審計

thinkphp

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

mysql審計框架 mysql審計平台搭建

yearning mysql sql語句審核平台。提供查詢審計,sql審核等多種功能 注意事項 僅依賴mysql資料庫。mysql版本必須5.7及以上版本,請事先自行安裝完畢且建立yearning庫,字符集應為utf8mb4 僅yearning所需mysql版本 yearning日誌僅輸出error...

thinkphp框架的特點

thinkphp的特點點如下 1 高階模型 可以輕鬆支援序列化字段 文字字段 唯讀字段 延遲寫入 樂觀鎖 資料分表等高階特性。2 檢視模型 輕鬆動態地建立資料庫檢視,多表查詢相對簡單。3 關聯模型 讓你以出乎意料的簡單 靈活的方式完成多表的關聯操作。4 模板引擎 系統內建了一款卓越的基於xml的編譯...

thinkphp框架漏洞

thinkphp框架爆出了乙個任意 執行漏洞,其危害性相當的高,漏洞利用方法如下 index.php module aciton param1 index.php module aciton param1 其中的function all代表任何函式,比如 index.php module acito...