如何使用SQLancer檢測DBMS中的邏輯漏洞
關(guān)于SQLancer
SQLancer,全稱為Synthesized Query Lancer,該工具是一款針對數(shù)據(jù)庫管理系統(tǒng)DBMS的自動化安全測試工具。該工具可以幫助廣大研究人員輕松識別應(yīng)用程序?qū)崿F(xiàn)中的邏輯漏洞。我們這里所指的邏輯漏洞,即能夠?qū)е翫BMS獲取錯誤結(jié)果集的安全漏洞(比如說忽略數(shù)據(jù)記錄等等)。
SQLancer能夠在下面兩個階段進(jìn)行操作:
- 數(shù)據(jù)庫生成:此階段的目標(biāo)是創(chuàng)建一個填充有數(shù)據(jù)的數(shù)據(jù)庫,并向DBMS輸入測試用例以嘗試識別和檢測不一致數(shù)據(jù)庫狀態(tài)。隨后,該工具將會創(chuàng)建一個隨機(jī)表,并隨機(jī)選擇SQL語句來生成、修改和刪除數(shù)據(jù)。除此之外,該工具還會使用其他類型的語句(如創(chuàng)建索引和視圖以及設(shè)置DBMS特定選項的語句)來測試目標(biāo)DBMS;
- 測試:此階段的目標(biāo)是針對生成的數(shù)據(jù)庫檢測邏輯錯誤。
工具要求
- Java 8或以上版本;
- Maven(Ubuntu安裝:“sudo apt install maven”);
- 需要測試的DBMS(項目中帶有SQLite,而SQLite是一款嵌入式DBMS)。
工具安裝&使用
廣大研究人員可以使用下列命令將該項目源碼克隆至本地,然后創(chuàng)建一個JAR,并開啟SQLancer來測試SQLite,此過程使用的是非優(yōu)化引用引擎結(jié)構(gòu)(NoREC):
- git clone https://github.com/sqlancer/sqlancer
- cd sqlancer
- mvn package -DskipTests
- cd target
- java -jar sqlancer-*.jar --num-threads 4 sqlite3 --oracle NoREC
執(zhí)行之后,工具每5秒會打印一次處理信息。SQLancer可能會找出SQLite中的漏洞,在報告漏洞信息之前,請確保處理信息仍在打印。我們可以按下CTRL + C組合鍵手動停止SQLancer的運行。如果SQLancer沒有找出漏洞,那么它將會一直運行下去。我們可以使用“--num-tries”來控制SQLancer在找到多少漏洞之后停止運行。除此之外,我們也可以使用“--timeout-seconds”來指定SQLancer允許執(zhí)行的最大超時。
如果SQLancer在沒有參數(shù)的情況下執(zhí)行,工具則會輸出所有可用的選項和命令。
支持的DBMS
由于各種DBMS使用的SQL形式差異很大,因此需要針對不同的DBMS采用單獨的實現(xiàn)方式:
- SQLite
- MySQL
- PostgreSQL
- Citus
- MariaDB
- CockroachDB
- TiDB
- DuckDB
- ClickHouse
項目地址
SQLancer:【GitHub傳送門】