如何将已知表名添加至SQLmap基于时间的会话中?
解决基于时间的数据库表枚举会话进度恢复问题
方案1:直接修改会话SQLite数据库(最准确)
大部分基于时间盲注的工具(比如sqlmap)会用SQLite存储会话进度,你可以手动插入已记录的表名,标记为已完成:
- 找到工具会话目录下的
session.sqlite文件(比如sqlmap的路径是data/sessions/[目标IP]/[会话ID]/session.sqlite) - 用SQLite可视化工具(如DB Browser for SQLite)或命令行
sqlite3打开该文件 - 定位存储已枚举表的表(通常名为
tables),查看其结构:- 以sqlmap为例,
tables表字段包括id(自增主键)、db(目标数据库名)、name(表名)、found(1表示已发现)
- 以sqlmap为例,
- 插入已记录的表名:
- 先查询当前最大ID,确保新插入的ID唯一(或直接依赖自增,不指定ID字段):
SELECT MAX(id) FROM tables; - 逐条插入已知表,替换
target_db为你的目标数据库名:INSERT INTO tables (db, name, found) VALUES ('target_db', 'user_info', 1); INSERT INTO tables (db, name, found) VALUES ('target_db', 'order_list', 1); -- 重复此语句添加所有已记录的表名
- 先查询当前最大ID,确保新插入的ID唯一(或直接依赖自增,不指定ID字段):
- 保存数据库后重启工具,进度会自动跳过已标记的表。
方案2:用排除参数跳过已枚举表(更简单)
如果不想修改数据库,可以通过工具的排除参数跳过已知表,避免重复扫描:
- 将已记录的表名存入文本文件(如
completed_tables.txt),每行一个表名 - 启动盲注工具时添加排除参数,以sqlmap为例:
工具会自动跳过文件中的表,直接从未枚举的表开始扫描。sqlmap -u "目标URL" --time-based -D target_db --exclude-tables @completed_tables.txt
为什么--common-tables参数没用?
--common-tables是让工具优先枚举常见表名(如users、admin),并非将这些表标记为已完成的会话进度,所以无法帮你恢复之前的扫描进度。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

