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