소스 정보
- 저장소
- cdxiaodong/cain-agent
- 최근 소스 활동
- 2026년 8월 24일 16:22
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 454
- 포크
- 105
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/cdxiaodong/cain-agent --skill xss명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | xss |
| description | XSS 测试技能 —— 面向真实业务系统,区分渲染上下文(HTML/属性/JS/CSS/URL),覆盖存储型/反射型/DOM 型,对抗 CSP 与输入过滤,产出可复现 PoC |
| phase | test |
| severity_focus | high |
定位:面向真实业务系统的注入验证。核心难点不是找一个能弹
alert的点,而是判断「用户输入最终落在哪个渲染上下文、该上下文的转义是否真实生效、能否在浏览器实际执行」——多数 XSS 误报源于没区分上下文就下结论。
满足以下任一信号即应进入本技能:
endpoints.json 已标注回显点):搜索结果页回显关键词、个人资料页回显昵称/签名、错误页回显输入、列表页回显排序字段。<div>{name}</div>)、属性(<input value="{q}">)、JavaScript 字符串(var q = "{q}";)、CSS(background:url({x}))、URL(<a href="{u}">)——同一参数可能多上下文回显,每处单独评估。location.search 被 innerHTML / document.write / eval / 模板引擎(Vue v-html、React dangerouslySetInnerHTML)消费。script-src 含 unsafe-inline / unsafe-eval / 大量 CDN 域名 / 通配符 ,或存在可被滥用上传 JS 的可信域(JSONP endpoint、CDN 资源)。*对齐 DESIGN §3.1。XSS 的 L1/L2/L3 划分核心是「上下文判定」与「是否真执行」,而非 payload 多寡。
目标:确认用户输入在响应中存在、并定位其渲染上下文,不急于弹窗。
cainxss7f3a),在响应源码中 grep 该标记,定位所有回显位置及其所在上下文(HTML body / 属性值 / script 块 / style / href)。<>"'=()/ \ 这些「上下文元字符」,检查响应中它们是被转义(< / " / \\)、编码(\u003c)、过滤(直接消失)、还是原样保留——每个回显点单独记录「过滤面」。onload / 普通 value / URL href / src);JS 上下文要看字符串定界符、是否在模板字符串 ` 内。目标:证明在该上下文下输入能突破当前上下文进入可执行上下文,并在浏览器真实执行。
< 未转义,用 <img src=x onerror=...> / <svg onload=...>;关键不是 payload 长度,而是确认能注入新的合法 HTML 标签并触发事件处理器。" 未转义,用 "><script>... 闭合标签;若在事件属性内(如 value="{x}" 后跟 onfocus),尝试 autofocus onfocus=...;URL 属性(href)优先用 javascript: 协议而非注入标签。" / ' / `)若未转义,用 ";alert(1)// 闭合字符串;若在模板字符串内需考虑 ${...} 插值逃逸。#hash / ?param= 携带 payload,确认它被 innerHTML 等危险 sink 消费——DOM 型的证据要包含「source → sink 的数据流」,不能只给一个能弹窗的 URL。目标:在存在 WAF / 输入过滤 / CSP 时证明 XSS 仍可达。
<script> 被过滤,换 <svg> / <img> / <body> / <iframe> 等可触发事件的标签;若 onerror= 被过滤,换 onpointerover / ontoggle / onanimationstart 等冷门事件;若 alert 被过滤,换 confirm / prompt / eval / top.name。j)、JS Unicode(\u0061)、URL 编码、混合编码——针对「哪个字符被过滤」逐个变形验证,不一锅端。Content-Security-Policy,判断是否有可滥用点——unsafe-inline 直接可执行;可信 CDN 域 + 该域存在可控制的 JS 资源(如 angular 旧版 ng-includes、JSONP 回调)构成绕过;script-src 'nonce-xxx' 若 nonce 可预测或复用则可绕。CSP 绕过需实锚点,禁止只写「理论上可绕」。data: URI、SVG 内联、mutation XSS(解析器与渲染器差异)——以该组件已知 CVE 为线索而非盲试。什么才算确认 XSS(禁止仅凭「payload 在响应里出现」下结论):
alert / console / 网络回调作为执行证据;纯响应文本匹配只是疑似。scope.yaml 授权范围且持书面授权时运行;对未授权第三方域发 payload(即使测试用)也属越界。alert 成功不足以定级,需确认它在「正常用户访问路径」下可触发(如存储型要在他人访问该页面时触发,而非仅作者本人)。
XSS_EOF
echo "=== xss written, lines: $(wc -l < worktree:skills/web/xss/SKILL.md) ==="