zoukankan      html  css  js  c++  java
  • PHP代码审计学习(7)——XSS漏洞

    XSS介绍 

      跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Web脚本代码(htmljavascriptcss等),当用户浏览该页面时,嵌入其中的Web脚本代码会被执行,从而达到恶意攻击用户的特殊目的。

      攻击者利用漏洞,可以获取其他合法用户的Cookie身份信息、访问地址等通过获取到的Cookie信息,即可以被攻击者的身份访问Web应用,如获取到管理员的Cookie,就可以以管理员的身份访问应用系统。

    挖掘思路

      XSS漏洞的关键在于寻找没有被过滤的参数,且这些参数传入到输出函数

      经常存在于富文本、图片引用、文字格式设置、论坛留言、用户信息等

    XSS类型分类

      案例参照https://www.jianshu.com/p/4fcb4b411a66

    反射型XSS

      又称非持久型XSS,之所以称为反射型XSS,则是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的。而称为非持久型XSS,则是因为这种攻击方式具有一次性。攻击者通过电子邮件等方式将包含恶意代码的链接发送给受害者,当受害者点击该链接时,恶意代码被传输到目标服务器上,然后服务器将恶意代码“反射”到受害者的浏览器上,从而在该浏览器上执行了恶意攻击脚本。目前大多数浏览器都具有反射型XSS保护功能,所以相对来说反射型的危害相对较低。

      案例

    <html>
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>XSS</title> 
    </head> 
    <body> 
    <form action="" method="get"> 
    <input type="text" name="input">     
    <input type="submit"> 
    </form> 
    <br> 
    <?php 
    echo 'output:<br>'.$_GET['input'];
    ?> 
    </body> 
    </html> 

      上述案例是当将以GET方式提交的字符串输出,因为没有任何过滤所以当提交JS代码时候会触发提交的语句

     

      这个弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如document.cookie就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。

    储存型XSS

      又称持久型XSS,它和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。这种攻击多见于论坛、SNS社交网站、微博等系统,攻击者在发帖、发表文章、发微博的过程中,将恶意脚本连同正常信息一起注入到内容之中,发送到网站服务器储存下来,恶意脚本也永久地被存放在论坛服务器的后端储存器中,当其他用户浏览这个被注入了恶意脚本的内容时,恶意脚本则会在他们的浏览器中得到执行,从而实现攻击目的。

       案例

        <span style="font-size:18px;"><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>  
        <html>  
        <head>  
        <title>XssStorage</title>  
        </head>  
        <body>  
        <h2>Message Board<h2>  
        <br>
        <form action="xss1" method="post">  
        Message:<textarea id='Mid' name="desc"></textarea>  
        <br>  
        <br>  
        Subuser:<input type="text" name="user"/><br> 
        <br>
        <input type="submit" value="submit" onclick='loction="XssStorage.php"'/>  
        </form>  
        <?php  
        if(isset($_POST['user'])&&isset($_POST['desc'])){  
        $log=fopen("sqlStorage.txt","a");  
        fwrite($log,htmlspecialchars($_POST['user'])."
    "); # 在此对用户输入数据$_POST['user']进行过滤
        fwrite($log,$_POST['desc']."
    "); 
        fclose($log);  
        }  
          
        if(file_exists("sqlStorage.txt"))  
        {  
        $read= fopen("sqlStorage.txt",'r');  
        while(!feof($read))  
        {  
            echo fgets($read)."</br>";  
        }  
        fclose($read);  
        }  
        ?>  
        </body>  
        </html></span>  

      当输入字符串时候,先将输入的数据保存在一个地方,可以是文件也可以是数据库,这里是保存在sqlStorage.txt,然后再返回到页面

       我们这边发现只有XSS2弹出,因为htmlspecialchars()函数对用户输入的<>做了转义处理。

       再看一下文件

       可以看到这些都是刚刚输入的保存在文本里的字符,可以明显发现<>被转义了

    DOM型XSS

      基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞

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

      案例参考:https://www.cnblogs.com/wangtanzhi/p/12239918.html

     <?php
    $xss = $_GET['xss'];
    ?>
    <input type="text" id="text" value="<?php echo $xss;?>">
    <div id="print"></div>
    <script type="text/javascript">
        var text = document.getElementById("text");
        var print = document.getElementById("print");
        print.innerHTML = text.value;
    
    </script>
      playload: ?xss=<img src=x onerror=alert(/xss/)>

    杂言

      XSS其实原理很简单,就是闭合标签,不过正因为这个,所以有很多骚姿势,后续还会出XSS系列的闯关游戏,最近被考试和实习问题缠的没时间,系统学习代码审计进度慢下来了,还要去看一下以前一些零碎的东西,害

  • 相关阅读:
    json对象字符串互转
    git stash压栈
    Array、ArrayList和List三者的区别
    弱类型dynamic与var
    使用git初始化项目
    git本地分支关联远程分支
    mysql索引
    js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别
    深入理解JavaScript中的this关键字
    c#读取xml文件
  • 原文地址:https://www.cnblogs.com/Lee-404/p/13198932.html
Copyright © 2011-2022 走看看