XSS漏洞

一、XSS漏洞简介

XSS(Cross-Site Scripting):跨站脚本攻击,为不与层叠样式表的缩写混淆,将跨站脚本攻击缩写为XSS。

XSS漏洞是一种在Web应用中常见的安全漏洞,它允许用户将恶意代码植入Web页面,当其他用户访问此页面,植入的恶意代码就会在其他用户的客户端执行。

二、XSS的分类

1、反射型XSS漏洞

利用反射型XSS漏洞植入的恶意代码不会存储在服务器端,一般通过搜索页面,需要构造植入恶意代码的Web页面,诱骗受害者访问该页面,才能触发攻击。

2、存储型XSS漏洞

利用存储型XSS的恶意代码存储在服务器中,一般通过留言板、个人信息、文章发表等功能的页面中。如果页面对用户输入的数据过滤不严格,恶意用户会将恶意代码存储到服务器中。这类XSS漏洞代码非常严重,因为恶意代码会存储到服务器中,客户端每次访问服务器都会触发恶意代码。

3、DOM型XSS漏洞

DOM型XSS漏洞是基于文档对象模型(Document Object Model)的一种XSS漏洞。

三、反射型XSS

漏洞代码分析:

<?php
if(isset($_GET['name'])){
    $name=$_GET['name'];
    echo "<h2>"."Hello".$name."<h2>";
}else{
    echo "参数错误";
}

输入以下测试语句:

http://127.0.0.2/name.php?name=zhang

会输出Hellozhang,如图3.1所示。

图3.1 输入name=zhang的返回结果

 输入以下测试语句:

 http://127.0.0.2/name.php?name=<script>alert('xss')</script>

会执行植入的XSS恶意代码,触发弹窗,如图3.2所示。

图 3.2 利用反射型XSS漏洞的效果

 分析:某些情况下,用户输入的内容会直接通过浏览器显示,因为浏览器会识别HTML标签和JavaScript代码,因此在没有对用户输入的内容做过滤时,当用户提交的内容存在JavaScript代码时会直接被浏览器识别并执行。

四、存储型XSS

漏洞代码分析:

if(array_key_exists("message",$_POST) $$ $_POST['message'] != null){
    $message=escape($link,$_POST['message']);
    $query="insert into message(content,time) values ('message',now())";
    $result=execute($link,$query);
    if(mysqli_affected_rows($link)!=1){
        $html.="<p>数据库出现异常,提交失败!</p>";
    }
}

 上述代码将用户提交的表单内的值以POST形式提交到message数据表中,由于代码没有对提交的内容做限制以及过滤,当用户上传恶意的JavaScript代码时同样会被上传到数据库中,如图4.1所示

图 4.1 上传至数据库的内容

 由于恶意代码被Hack上传至服务器,所以当其他用户访问该页面时,恶意代码都会被调用并且由用户的浏览器执行。如图4.2 所示。

图 4.2 普通用户访问时页面

 五、DOM型XSS

5.1、简介

DOM是W3C组织推荐的处理可扩展标记语言的标准编程接口,可以使程序和脚本能够动态访问和更新文档内容、结构以及样式。

DOM:通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口,这个入口就是DOM,所以在DOM型的XSS漏洞中,DOM可以看成是一个访问HTML的标准程序接口。

特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作)。

5.2、漏洞代码分析

<div id="xssd_main">
    <script>
        function domxss(){
            var str=document.getElementByla("text").value;
            document.getElementById("dom").innerHTML = "<a href=' " +str+ " '>what do you see?</a>
        }
    </script>
    <input id="text" name="text" type="text" value="" />
    <input id="button" type="button" value="click me" onclick="domxss()" />
    <div id="dom"></div>
</div>

上述代码var str = document.getElementbyId("text“).value;和<input id ="text"  ...../>意思是把我们输入 的东西(字符串)赋值给str,然后document.getElementById("dom").innerHTML = <a href='"str"' ..../>把这个字符串整合到a这个标签中的href(属性) 里在吧a标签写到dom这个标签中,最后<div id="dom"></div>执行这个标签。

5.3、实列

通过构造'><img src="#" οnclick="alert(document.cookie)" >获得cookie。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值