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