zoukankan      html  css  js  c++  java
  • DVWA_XSS(DOM)

    XSS(DOM)是一种基于DOM树的一种代码注入攻击方式,可以是反射型的,也可以是存储型的,所以它一直被划分第三种XSS

    与前两种XSS相比,它最大的特点就是不与后台服务器交互,只是通过浏览器的DOM树解析产生

    除了js,flash等脚本语言也有可能存在XSS漏洞

    关于DOM,墙裂推荐《JavaScriptDOM编程艺术》,写得真的很好

    下面直接开始实践吧!(所有攻击都在火狐浏览器下进行的,谷歌做了XSS filter好烦、、、)

    Low:

    作者太皮了,居然没有做任何的防护和过滤

    Payload:?default=<script>alert("You have been hacked!");</script>

    Medium:

    PHP脚本代码:

    <?php 
    
    // Is there any input? 
    if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { 
        $default = $_GET['default']; 
         
        # Do not allow script tags 
        if (stripos ($default, "<script") !== false) { 
            header ("location: ?default=English"); 
            exit; 
        } 
    } 
    
    ?> 
    

     前端代码:

    		<form name="XSS" method="GET">
    			<select name="default">
    				<script>
    					if (document.location.href.indexOf("default=") >= 0) {
    						var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
    						document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
    						document.write("<option value='' disabled='disabled'>----</option>");
    					}
    					    
    					document.write("<option value='English'>English</option>");
    					document.write("<option value='French'>French</option>");
    					document.write("<option value='Spanish'>Spanish</option>");
    					document.write("<option value='German'>German</option>");
    				</script>
    			</select>
    			<input type="submit" value="Select" />
    		</form>
    

      此时作者对"<script>"标签做了过滤,只能尝试其他的标签了,比如<img>的onerror属性,即img引用出错时会执行onerror中的内容

    Payload:?default=English>/option></select><img src='x' onerror='alert(1)'>

    注意要闭合了前面的标签,当然了,也可以URL编码之后在GET上去。

    High:

    <?php 
    
    // Is there any input? 
    if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { 
    
        # White list the allowable languages 
        switch ($_GET['default']) { 
            case "French": 
            case "English": 
            case "German": 
            case "Spanish": 
                # ok 
                break; 
            default: 
                header ("location: ?default=English"); 
                exit; 
        } 
    } 
    
    ?> 
    

      URL中#号之后的内容,不会被提交到服务器,可以直接与浏览器进行交互

    Payload:?default=English#<script>alert(1)</script>

    Impossbile:

      作者太皮了,居然只告诉我了这一句话:# Don't need to do anything, protction handled on the client side 

  • 相关阅读:
    三种web性能压力测试工具http_load webbench ab小结
    写给加班的IT女生
    C++第9周项目2参考——个人所得税计算器
    C++第9周项目5参考——求一元二次方程的根
    C++程序设计第九周分支结构程序设计上机实践项目
    给编程菜鸟——起跑时的坚持
    C++第9周项目4参考——本月有几天?
    因为涉及到泄密问题,个人博客上SQL优化部分的很多经典案例被删除
    女生真的就不适合学计算机了吗?——答大二女生
    C++第9周项目3参考——利息计算器
  • 原文地址:https://www.cnblogs.com/huangming-zzz/p/9901770.html
Copyright © 2011-2022 走看看