CTF实战:用Sqlmap破解表单输入型SQL注入题(输入账号密码/username&password)

目录

引言

[步骤1:用Burp Suite捕获表单请求](#步骤1:用Burp Suite捕获表单请求)

步骤2:用Sqlmap获取数据库名称

参数解释:

输出示例(根据题目环境调整):

步骤3:获取目标数据库中的表名

参数解释:

输出示例:

步骤4:获取表中字段及数据

参数解释:

输出示例(关键部分):

注意事项与扩展技巧

总结


引言

在CTF(网络安全竞赛)中,SQL注入是最经典的题型之一。其中,​​表单输入型注入 (即通过POST请求提交的表单参数触发注入)尤为常见------无论是Web安全入门练习,还是高阶攻防对抗,这类题目都能很好地考察选手对SQL注入原理的理解与工具运用能力。

以下面的题目为例:

步骤1:用Burp Suite捕获表单请求

表单注入的核心是​​拦截POST请求​ ​,并将请求保存为Sqlmap可识别的格式(.txt)。具体操作如下:

  1. 打开目标页面,找到需要提交数据的表单(例如登录框、搜索框等)。
  2. 启动Burp Suite,配置浏览器代理(默认端口8080),确保流量经过Burp。
  3. 在表单中填写任意数据(如用户名填test,密码填123),提交表单。
  4. 在Burp的"Proxy"标签页中,找到刚提交的POST请求(状态码通常为200或302),右键选择"Send to Repeater"(发送到重放模块)。
  5. 点击"Repeater"标签,确认请求的Body部分包含表单参数(例如username=test&password=123)。

保存信息到txt文件里(这里保存到target.txt文件里):

步骤2:用Sqlmap获取数据库名称

目标:通过表单参数(如username)触发注入,获取目标数据库的所有库名。

进入cmd执行命令(注意要在sqlmap目录下):

bash 复制代码
python sqlmap.py -r target.txt -p username --batch --dbs
参数解释:
  • -r target.txt:指定读取之前保存的请求文件。
  • -p username:指定注入参数(即表单中可能被注入的字段,这里是username)。
  • --batch:自动确认所有交互选项(省去手动输入的麻烦)。
  • --dbs:枚举目标服务器上的所有数据库。
输出示例(根据题目环境调整):

这里看到有一个名为geek的数据库(非系统库,大概率是题目目标库),后续操作将围绕它展开。

步骤3:获取目标数据库中的表名

目标:在geek数据库中,找到可能存储用户数据的表(如user、users等)。

执行命令:

bash 复制代码
python sqlmap.py -r target.txt -p username --batch -D geek --tables
参数解释:
  • -D geek:指定要操作的目标数据库(geek)。
  • --tables:枚举该数据库下的所有表。
输出示例:

这里看到两个表:geekuser和l0ve1ysq1。根据CTF常见命名习惯,l0ve1ysq1(可能是"love1ysql1"的变形)更可能是存储敏感数据的表(比如Flag),优先排查它。

步骤4:获取表中字段及数据

目标:从l0ve1ysq1表中提取字段名和具体数据(尤其是Flag)。

执行命令:

bash 复制代码
python sqlmap.py -r target.txt -p username --batch -D geek -T l0ve1ysq1 --dump
参数解释:
  • -T l0ve1ysq1:指定要操作的表(l0ve1ysq1)。
  • --dump:导出该表的所有数据(包括字段名和内容)。
输出示例(关键部分):


最终,我们在id=16的记录中找到了Flag:flag{898d3190-8bd7-4677-b553-8142542ae251}!

注意事项与扩展技巧

  1. ​参数选择​ :如果-p指定的参数(如username)未被注入,Sqlmap会提示"parameter not injectable",此时需尝试其他参数(如password)。
  2. ​绕过过滤​ :若题目中对关键字(如UNION、SELECT)做了过滤,可通过--tamper参数使用绕过脚本(如space2comment用注释符替换空格)。
  3. ​手动验证​ :Sqlmap虽强大,但CTF中可能存在"反套路"设计(如需要结合报错注入、布尔盲注)。建议先手动验证注入点类型(通过输入'看是否报错),再决定是否完全依赖工具。

总结

本次实战演示了如何用Sqlmap快速破解表单输入型SQL注入题:从Burp抓包保存请求,到通过--dbs、--tables、--dump逐步获取数据库结构与数据,最终定位Flag。

(注:本文实验环境为模拟场景,请勿用于非法渗透测试。)

相关推荐
新*14 小时前
Elasticsearch 7.17 的 SQL 到底能查到什么?一次踩坑记录
后端·sql·elasticsearch·查询
这个DBA有点耶2 天前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
曾令胜2 天前
云服务器被攻击后分析恶意脚本修复漏洞
网络安全·安全威胁分析
瑞雪兆丰年兮2 天前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Decay__2 天前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
瑞雪兆丰年兮2 天前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web
菩提小狗2 天前
每日安全情报报告 · 2026-11-09
网络安全·漏洞·cve·安全情报·每日安全
freejackman3 天前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
东姬AI3 天前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6