从「会用」到「说得清原理」—— Burp 抓包、SQL 联合注入、Web / Crypto 路线。
127.0.0.1 = 你自己的电脑,8080 = 端口
| 情景模式名 | Burp |
| 代理协议 | HTTP |
| 代理服务器 | 127.0.0.1 |
| 代理端口 | 8080 |
切到 Burp 模式 → 开 Intercept on
→ 访问 http:// 网站就能抓到包
浏览器和服务器中间插一个 Burp,它就是中间人。点下面的开关看区别。
HTTP 明文,Burp 直接就能看
HTTPS 信任 Burp CA 后,Burp 分别和两边建 TLS
🪪 证书 = 身份证件,证明「我是这个网站」
✍️ CA 用私钥签名,浏览器用公钥验签
🛡 好处:防中间人、防重放攻击
打过 CTF 的 RSA 题就懂了:非对称加密
一把 公钥 + 一把 私钥
CA 用私钥签,浏览器用公钥验
😱 没配证书:抓到的是 TLS/SSL 加密的密文,看不懂,浏览器还报警
📥 把 Burp CA 装进受信任根证书
😎 装完:看到的就是明文,也就是正常状态
双击 cacert.der → 安装证书
存储位置:当前用户 / 本地计算机
【关键】选「将所有的证书都放入下列存储」
→ 浏览 → 受信任的根证书颁发机构
→ 下一步 → 完成 → 安全警告选「是」
Firefox 有独立证书系统,不认系统里那份
设置 → 搜「证书」→ 查看证书
→ 证书颁发机构 → 导入 cacert.der
【关键】勾选「信任由此证书颁发机构来标识网站」
| 层 | 加上什么 | 变成 |
|---|---|---|
| 应用层 | 生成 HTTP 报文 | HTTP 报文 ← Burp 看这层 |
| 传输层 | + TCP 头 | TCP 段 |
| 网络层 | + IP 头 | IP 数据报 / IP 包 |
| 数据链路层 | + 帧头 | 数据帧 |
| 物理层 | 变成电信号 | 比特流 |
Wireshark 看的是整颗洋葱;
Burp 只剥到应用层。
· 参数在 URL 里 —— 就是浏览器地址栏那一串
· 没有请求体
· 会留在服务器日志和浏览器记录里,不安全
· 参数在请求体里(空行之后)
· 登录、提交表单常用 POST
· 不显示在 URL 上
GET /Less-1/?id=1 HTTP/1.1Host: 靶场地址User-Agent: Mozilla/5.0Cookie: PHPSESSID=abc123
POST /login.php HTTP/1.1Host: 靶场地址Content-Type: application/x-www-form-urlencodedCookie: PHPSESSID=abc123username=admin&password=123
HTTP/1.1 200 OKServer: nginxContent-Type: text/html; charset=utf-8Set-Cookie: PHPSESSID=abc123<html><body>...</body></html>
Proxy 抓 → Repeater 改 → Intruder 爆
抓包。拦截 · Forward · Drop · HTTP history
👉 看「发了什么」
改包重放。改一下、点一下、再发一次
👉 试各种 payload
自动化爆破。参数标 §1§,塞字典批量跑
👉 批量试
| id | username | password |
|---|---|---|
| 1 | admin | admin888 |
| 2 | Dumb | Dumb |
| 3 | Angelina | I-kill-you |
列:竖着看,每一列是一个字段
行:横着看,每一行是一条记录
| 库 | 数据仓库,叫 security |
| 表 | 存一类东西,users 存用户 |
| 列 | 字段:id / username / password |
| 行 | 一条记录:admin / admin888 |
CTF Web 题 90% 是 MySQL
用户输入被拼进 SQL,就被当成 代码 执行了 —— 下面自己动手改改看。
MySQL 5.0+ 自带的元数据库
存的全是「结构信息」:
有哪些库 · 有哪些表 · 有哪些字段
5.0 以下没这个库 —— 只能靠猜表名和字段名
| table_schema | 所属数据库名 |
| table_name | 表名 |
| table_type | BASE TABLE / VIEW |
| table_schema | 所属数据库名 |
| table_name | 所属表名 |
| column_name | 字段名 |
| data_type | 字段数据类型 |
| 字符型 Less-1 | 数字型 Less-2 | |
|---|---|---|
| 源码 | id='[输入]' | id=[输入] |
| 两边有引号 | ✅ 有 | ❌ 没有 |
| 要闭合吗 | ✅ 要 | ❌ 不用 |
| 要注释吗 | ✅ 要 | ❌ 不用 |
| 典型 payload | 1' --+ | 1 and 1=1 |
结果能显示在页面上
前后 SELECT 列数相同
或能查 information_schema
能读元数据库
❌ 常见错误:union select 1,group_concat(table_name) from information_schema.tables where table_schema='challenge',3 #
→ 报错 near '3#'' at line 1:,3 写到了 FROM 后面!逗号必须在 select 和 from 之间 ✅ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenge' #
点上面的步骤按钮,左边是请求、右边是靶场返回(教学模拟)。重点是每一步"看什么、得出什么结论"。
| 被过滤 | 绕法 |
|---|---|
| 空格 | /**/ → union/**/select |
| union select | 大小写 UnIoN SeLeCt / 双写 |
| 注释符 | 换 #、-- - |
| 逗号 | join / substr 逐字符 |
| 关键字 | 编码 / 大小写 / 双写 / 拆注释 |
本质:WAF 看字符串,数据库认语法
联合注入只是 SQL 注入的入门类型
抓包,找 ?id=1
1' → 报错
1' --+ → 正常 ✔
order by → 列数 3
union select → 爆完
题目信息 · 漏洞判断
闭合判断 · 列数判断
显示位 · 爆库表列数据
完整 payload
修复建议(必写)
--+ 被过滤 → #
空格被过滤 → /**/
只回显一列 → group_concat
information_schema 被禁 → 盲注
不是只拿 flag,而是学一套 流程。
移位密码,枚举 25 种位移就能出答案。演示:把 KHOOR 移 3 位 → HELLO。
换位密码,不换字母只换顺序,枚举栏数即可还原。
多表替换。看频率、猜密钥长度,是凯撒的进阶版。
摩斯:. - 加空格;培根:A/B 两种字符,5 位一组。
特征识别:Base64 结尾常有 =,大小写字母 + 数字;
Base32 只有大写字母和数字 2-7。
工具认不出时,先丢进 CyberChef 的 Magic 乱炖一遍。
1 Burp = 中间人代理,抓 HTTP 包
2 证书 = 公钥身份证,装了才信任
3 包结构 = 起始行 + 头 + 空行 + 体
4 有引号 = 字符型,无引号 = 数字型
5 联合注入 = 有回显 + 列数一致
6 昔涟4 是案例,流程比 flag 重要
昔涟4 是案例,Burp 是操作台,
路线是地图,古典密码是兴趣入口。
| 项目 | 关键点 |
|---|---|
| Burp 抓包 | 浏览器 → Burp → 服务器 |
| 证书 | 公钥身份证,CA 签发 |
| 包结构 / 模块 | 起始行+头+空行+体;Proxy 抓、Repeater 改、Intruder 爆 |
| 快捷键 | Ctrl+R / Ctrl+I |
| 注入类型 | 有引号 = 字符型,无引号 = 数字型 |
| 联合注入 | 闭合 → order by → union → 显示位 → 爆库表列 |
| 核心 payload | ?id=-1' union select 1,database(),version() --+ |
| 注释 / 分隔 | --+ #(%23) -- -;0x3a 或 ':' |
⚠️ 仅用于授权靶场 / CTF / 本地环境