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数据库中,找到可能存储用户数据的表(如userusers等)。

执行命令:

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

这里看到两个表:geekuserl0ve1ysq1。根据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. ​绕过过滤​ :若题目中对关键字(如UNIONSELECT)做了过滤,可通过--tamper参数使用绕过脚本(如space2comment用注释符替换空格)。
  3. ​手动验证​ :Sqlmap虽强大,但CTF中可能存在"反套路"设计(如需要结合报错注入、布尔盲注)。建议先手动验证注入点类型(通过输入'看是否报错),再决定是否完全依赖工具。

总结

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

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

相关推荐
jllllyuz1 小时前
Spring中的事务是如何实现的
数据库·sql·spring
JQLvopkk2 小时前
Web安全学习步骤
网络安全
网安Ruler3 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
CF14年老兵5 小时前
SQL 是什么?初学者完全指南
前端·后端·sql
非极限码农6 小时前
Hive SQL (HQL) 编辑指南
hive·hadoop·sql
衍生星球6 小时前
JSP 程序设计之 JSP 基础知识
java·web·jsp
m0_738120726 小时前
Solar月赛(应急响应)——攻击者使用什么漏洞获取了服务器的配置文件?
运维·服务器·安全·web安全·网络安全
OceanBase数据库官方博客6 小时前
当过滤条件不符合最左前缀时,如何有效利用索引? | OceanBase SQL 优化实践
sql·性能优化·oceanbase·分布式数据库
不似桂花酒6 小时前
数据库小知识
数据库·sql·mysql