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...