WEB攻防—XSS跨站&反射型&存储型&DOM型

发布于:2025-04-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

前言

更新这个系列主要是为了重学Top10,因为感觉自己对于Top10的了解还是不够深入,所以重头再来一遍,温故而知新,可以为师矣。

漏洞原理

XSS又叫跨站脚本攻击,其核心原理是攻击者通过向网页注入恶意的JS脚本代码,当其他用户访问该页面时,这些脚本会在用户的浏览器中执行,从而实施攻击。

简单来说,js代码能做什么,XSS就能做什么攻击:

盲打(不知道哪些地方存在XSS,直接能插XSS的地方都插入试试),COOKIE盗取,凭据窃取,页面劫持,网络钓鱼,权限维持等

XSS漏洞又分为三类,分别是反射型、存储型、DOM型。

反射型

这个比较好理解,攻击者插入恶意的JS代码,当前浏览器页面立马执行,且不会将恶意代码永久存储在服务器上,这种攻击需要用户主动触发(如点击恶意链接)。

首先我们编写一个简单的PHP代码,接受参数 id 然后输出。

<?php

$code = $_GET['id'];

echo $code;

?>

OK,那么假如我现在把 1 换成JS代码会发生什么呢,可以看到是弹出窗口了,说明浏览器页面执行了我们的JS代码。

F12查看源码,可以看到我们插入的JS语句。

我们还可以利用嵌套去指向一个外部网站,如果把外部网站做成和目标一样的网站,当受害者访问这个地址就会访问到攻击者定义好的网站,那受害击一旦输入账号密码后,攻击者就能获取到账号密码,完成一个钓鱼攻击。

查看源码里面有我们的JS代码。

存储型

上面说的反射型XSS执行完就没了,并不会保存起来,而存储形XSS是一种恶意脚本被永久存储在目标服务器(如数据库、文件系统或日志)中的XSS攻击类型。当其他用户访问包含这些存储数据的页面时,恶意脚本会自动加载并在其浏览器中执行。由于攻击无需用户主动触发且影响范围广。

我们用这个小皮面板演示一下。

可以看到假如我们登录失败的话,操作记录这里会把我们失败的用户名给记录下来。

我们把用户名改为下面的xss语句,密码随便,构造一个登录失败的请求,使其记录在操作记录里面。

<script>alert("xss")</script>

此时我们再换正确的账号密码登录上去,触发xss语句。

只要我们刷新或者重新登录都会触发XSS语句,这就是存储型XSS。

DOM型

DOM型XSS(跨站脚本攻击)是一种完全在客户端发生的安全漏洞,其核心在于恶意输入通过JavaScript操作DOM(文档对象模型)时未经过适当处理,导致攻击者能够在受害者浏览器中执行任意代码,反射型和存储型需要经过服务端,而DOM型则不需要,网页中的JavaScript代码直接使用来自用户控制的数据源(如URL参数location.hashlocation.search,或document.cookie等),这些数据被动态插入到DOM中,且未进行安全处理。

下面是一个简单的JS代码,我们用它来演示一下DOM型XSS。

<html>
    <head>
        <title>DOM-XSS</title>
        <script src="https://code.jquery.com/jquery-1.6.1.min.js"></script>
        <script>
            var hash = location.hash
            if(hash){
                var url = hash.substring(1)//hash.substring(1)会去掉#,提取剩余内容赋值给url
                location.href = url        //location.href = url会让浏览器跳转到url指定的地址
            }
        </script>
    </head>
    <body>
        DOM-XSS

    </body>
</html>

接着再刷新一下页面,就跳转到百度了。

DOM操作就是取浏览器上面的值或者表单里的值进行操作,不经过服务端处理就执行了,这种就属于DOM型XSS,所以如果要挖DOM型漏洞,一定要查看网页源代码并在HTML代码中找到相关js代码。

这里网上找到一个例子,可以看到这里JS代码接收了一个参数url,然后再跳转到指定的url地址。

直接拼接一下百度地址。

随即跳转到百度。

弹窗

漏洞发现

那么在实战中如何发现XSS漏洞呢,从以上实验不难发现,反射型和存储型的XSS都是接受输入数据,输出显示数据后解析执行。也就是说只要有交互的地方都可以插入一个XSS语句进行测试,像登录框(前提是会记录登录失败的用户)、留言板、评论区等都有可能出现存储型XSS,DOM型则是需要自己去看浏览器的JS代码才行。

总结

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。


网站公告

今日签到

点亮在社区的每一天
去签到