XSS漏洞

XSS漏洞

一、XSS漏洞原理

XSS,即跨站脚本攻击,是指攻击者利用Web服务器中的应用程序或代码漏洞,在页面中嵌入客户端脚本(通常是一段由JavaScript编写的恶意代码,少数情况下还有ActionScript、VBScript等语言),当信任此Web服务器的用户访问Web站点中含有恶意脚本代码的页面或打开收到的URL链接时,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。

当应用程序没有对用户提交的内容进行验证和重新编码,而是直接呈现给网站的访问者时,就可能会触发XSS攻击。

二、XSS漏洞的危害

(1)窃取管理员帐号或Cookie。入侵者可以冒充管理员的身份登录后台,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
(2)窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
(3)网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
(4)发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

三、简单的反射型xss实例

设置漏洞环境

首先,我们需要一个包含XSS漏洞的Web应用。我们可以使用一个简单的示例页面来模拟漏洞。以下是一个基本的示例代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>XSS漏洞示例</title>
</head>
<body>
    <h1>欢迎来到我们的网站!</h1>
    <input type="text" id="userInput" placeholder="在此输入内容">
    <button onclick="displayInput()">提交</button>
    <p id="output"></p>
    <script>
    function displayInput() {
        var userInput = document.getElementById("userInput").value;
        document.getElementById("output").innerHTML = "您输入的内容是:" + userInput;
    }
</script>
</body>
</html>

在这个示例中,用户输入的内容将被显示在页面上。然而,由于没有对用户输入进行过滤和转义,攻击者可以注入恶意脚本。

复现XSS漏洞

尝试在输入框中输入以下内容:

<script>alert("恶意脚本被执行!")</script>

点击“提交”按钮,你将会看到一个弹窗显示“恶意脚本被执行!”。这就是一个简单的反射型XSS漏洞。

XSS线上靶场—Warmups

网址

https://xss.pwnfunction.com/

1、Ma Spaghet!

关键代码分析:

spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"

1、URLSearchParams接口定义了一些实用的方法来处理URL的查询字符串。

URLSearchParams()是一个可以操作查询字符串的对象。

常用方法: 1、构造查询字符串 2、获取查询字符串参数

2、innerHTML:它是一个字符串,用来设置或获取位于对象起始和结束标签内的HTML。相当于获取HTML当前标签的起始和结束里面的内容。

使用get方法传递URL,没有其他过滤方式,我们尝试使用绕过一下

请添加图片描述

没有弹窗,我们再找找原因?

由于是因为

所以换成

<img src=1 onerror=alert(1337)>

再试试,成功了

在这里插入图片描述

2、Area 51

<!-- Challenge -->
<div id="pwnme"></div>

<script>
    var input = (new URL(location).searchParams.get('debug') || '').replace(/[\!\-\/\#\&\;\%]/g, '_');
    var template = document.createElement('template');
    template.innerHTML = input;
    pwnme.innerHTML = "<!-- <p> DEBUG: " + template.outerHTML + " </p> -->";
</script>
  • 正则过滤了输入的debug参数
  • 搞了个template把输入包裹进了注释

输入123看看

?debug=123

在这里插入图片描述

<!–是多行注释,所以换行的思路基本不可行

这里查了查

因为HTML中没有嵌套注释的概念,所以可以用新的注释打破了旧的注释
而因为浏览器不喜欢在意外发送时呈现php源代码,所以它会变异成<!–php–>
这种变异会产生新的注释,于是打破旧的注释
做个尝试

?debug=<?php>123

在这里插入图片描述

这样就简单了

?debug=<?php>

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值