XSS基础

一、XSS漏洞介绍

       跨站脚本攻击(Cross-Site Scripting)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。他允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。恶意用户利XSS代码攻击成功后,可能得到很高的权限、私密网页内容、回话和cookie等各种内容。

二、XSS漏洞原理

1、反射型XSS

       反射型XSS又称非持久型XSS,这种攻击方式具有一次性。

       攻击方式:攻击者通过电子邮件等方式,将包含XSS代码的恶意链接发送给目标于用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

1.1 反射型XSS攻击

       当访问http://192.168.1.101/xss/xss1.php,在输入框输入"><img src=1 οnerrοr=alert(/xss/) />提交时,url即为http://192.168.1.101/xss/xss1.php?xss_input_value="><img src=1 οnerrοr=alert(/xss/) />输出到页面的HTML代码变为<input type ="text" value=""><img src =1 οnerrοr=alert(/xss/) />。可以看到,输入的双引号闭合了value属性的双引号,输入的>闭合了input标签的<,导致输入的<img src=1 οnerrοr=alert(/xss/) />变成了HTML标签:

<input type="text" value=""><img src=1 onerror=alert(/xss/) />">

       在浏览器渲染时,执行了<img src =1 οnerrοr=alert(/xss/) />,JS函数alert()导致浏览器弹框,显示"/xss/"。

1.2反射型XSS代码分析

       在反射型XSS PHP代码中,通过GET获取参数xss_input_value的值,然后通过echo输出一个input标签,并将xss_input_value的值放入input标签的value中。当访问xss_input_value="><img src=1 οnerrοr=alert(/xss/) />时,输出到页面的HTML代码变为<input type="text" value=""><img src=1 οnerrοr=alert(/xss/) />">,此段HTML代码有两个标签,<input>标签和<img>标签,而<img>标签的作用就是让浏览器弹框显示“/xss/”,代码如下:

<htnl>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>XSS 利用输出的环境构造代码</title>
</head>
<body>
    <center>
    <h6>把输入的字符串输出到input里的value属性里</h6>
    <form action="" method="get">
        <h6>请输入你想显现的字符串</h6>
        <input type="text" name="xss_input_value" value="输入"><br />
        <input type="submit">
    </form>
    <hr>
    <?php
            if (isset($_GET['xss_input_value'])){
                echo '<input type="text" value="'.$_GET['xss_input_value'].'">';
                }else{
                        echo '<input type="text" value="输入">';
                }
    ?>
    </center>
</body>
</html>

2、存储型XSS

       存储型XSS又称持久型XSS,攻击脚本将被永久的存放在目标服务器的数据库或文件中,具有很高的隐蔽性。

       攻击方式:这种攻击方式多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久的被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。

        例如,恶意攻击者在留言板中加入以下代码:

<script>alert(/hacker by hacker/)</script>)

        当其他用户访问留言板时,就会看到一个弹窗。可以看到,存储型XSS的攻击方式能够将恶意代码永久的嵌入一个页面中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击。

2.1存储型XSS攻击

        存储型XSS页面实现的功能是:获取用户输入的留言信息、标题和内容,然后将标题和内容插入到数据库中,并将数据库的留言信息输出到页面上。

        当用户在标题处写1,内容处写2时,数据库中的数据:

idtitlecontent
112

       当输入标题为<img src=1 οnerrοr=alert(/xss/) />,然后将标题输入到页面时,页面执行了<img src=1 οnerrοr=alert(/xss/) />,导致弹出窗口。此时,这里的XSS是持久性的,也就是说任何人访问时该URL都会弹出一个显示“/xss/”的框。

2.2存储型XSS代码分析

        在存储型XSS的PHP代码中,获取POST参数title和参数content,然后将参数插入数据库表XSS中,接下来通过select查询将表XSS中的数据查询出来,并显示到页面上,代码如下:

<htnl>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>留言板</title>
</head>
<body>
    <center>
    <h6>输入留言内容</h6>
    <form action="" method="post">
        标题:<input type="text" name="title"><br />
        内容:<textarea name="content"></textarea><br />
        <input type="submit">
    </form>
    <hr>
    <?php
                $con=mysqli_connect("localhost","root","123456","test");
                if (mysqli_connect_errno())
                {
                    echo "链接失败:" . mysqli_connect_error();
                }
                if(isset($_POST['title'])){
                        $result1 = mtsqli_query($con,"insert into xss('title','content')                         
     VALUES('".$_POST['title']."','".$_POST['content']."')");
                }
                $result2 = mtsqli_query($con,"select * from xss");
                echo "<table border='1'><tr><td>标题</td><td>内容</td></tr>";
                while($row = mysqli_fetch_arry($result2))
                {
                    echo "<tr><td>".$row['title'] . "</td><td>" . $row['content']."     
     </td>";
                }
                echo "</table>";
    ?>
    </center>
</body>
</html>

        当用户在标题处写入<img src=1 οnerrοr=alert(/xss/) />时,数据库中的数据如图:

idtitlecontent
1<img src=1 οnerrοr=alert(/xss/) />11

        当将title输出到页面时,页面执行了<img src=1 οnerrοr=alert(/xss/) />,导致弹窗。

3、DOM型XSS

       DOM全程Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。

       DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

       HTML的标签都是节点,而这些节点组成了DOM的整体结构--节点树。通过HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。

       在网站页面中有很多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务端交互,它只发生在客户端处理数据的阶段。

       攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值