关于锚点注入的深入探讨

问题描述

dvwa靶场 high难度下的 dom型XSS关卡的解法很有意思

这关使用了锚点注入的方式,通过在URL后面添加#和script标签,就能使浏览器执行脚本

image-20230413204911747

以下是chatGPT对锚点注入的解释:

锚点注入: 在URL的井号后面添加JavaScript脚本是一种称为“锚点注入”的技术,它可以实现在页面加载时执行JavaScript代码。但是,这种技术并不是所有浏览器都支持,而且也存在一些安全风险。

如果浏览器支持锚点注入,那么在URL的井号后面添加JavaScript脚本是可以运行的。例如,以下URL会在页面加载时弹出一个警告框:

1
http://example.com/page.html#<script>alert('Hello, world!');</script>

但是,为了保证网站的安全性,大多数现代浏览器已经禁止了锚点注入这种技术。因此,不建议在URL中使用锚点注入来执行JavaScript代码,而应该使用更安全的方法,如在HTML文档中嵌入JavaScript代码或在外部JavaScript文件中编写代码。

关键: 在井号后面添加javascript脚本

我当时心想,这么有意思?那么是不是在其他地方也能这么弄? 只需要在URL后面添加上# 和script标签,就能简单实现XSS攻击

后来,我在反射型的XSS靶场试了一遍,不成功。在存储型的XSS靶场也试了一遍,照样不成功。

image-20230421001044917

没有任何反应。。。。

问题解决过程

注意到只有DOM型的XSS靶场才可能用这种方法成功通关,而反射型和存储型的全部失败

那么问题可能就出在不同类型XSS的原理上

回顾DOM型XSS和反射型XSS攻击原理

DOM型XSS:

DOM型XSS漏洞是由于JavaScript代码直接操作了DOM(文档对象模型)而导致的漏洞

反射型XSS:

在反射型XSS攻击中,攻击者需要诱导受害者点击一个带有恶意代码的链接,然后受害者的浏览器会向服务器发送请求,将恶意代码作为参数传递给服务器,服务器再将恶意代码反射回受害者的浏览器执行。

也就是说:

DOM型XSS攻击是客户端通过JavaScript脚本直接将恶意代码插入html页面中的。

而反射型XSS是等待服务端对请求进行处理,在发送回响应页面。恶意代码实际上是由服务器端插入到html页面中的。

STFW

由于反射型XSS漏洞是在后端执行的,因此使用锚点来实现攻击可能会失败,因为浏览器可能会对URL中的锚点进行过滤或忽略,而不会执行其中的JavaScript代码。

至此,问题解决

总结

锚点注入是个好东西,但是只能运用在存在DOM型XSS漏洞的场景。