zoukankan      html  css  js  c++  java
  • XSS Reflected 测试

     

    前言

    由于最近在做XSS方面的测试,于是找到了DVWA平台进行实验测试,通过这三篇文章让大家了解XSS方面的大概内容,这三篇文章只是把你领进XSS的大门,要想真正深入的学习XSS,你还需要去学习很多东西来提升自己。
    网站测试分为黑盒测试和白盒测试,在这里采用白盒测试来对网站进行XSS漏洞测试,XSS漏洞分为三种:反射型XSS、存储型XSS、DOM型XSS,分别用三篇文章来进行阐述。

    XSS攻击形成原理

    XSS中文名是“跨站脚本攻击”,英文全称是“Cross Site Scripting”。

    XSS也是一种注入攻击,长期以来被列为客户端web安全中的头号大敌,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML、JavaScript)到网页中时,如果用户访问了含有恶意代码的页面,恶意脚本就会被浏览器解析执行导致用户被攻击。

    OWASP TOP 10 威胁多次把XSS列在榜首,常见的危害有:cookie窃取、session劫持、钓鱼攻击、蠕虫、ddos、获取用户真实IP、识别用户浏览器 ··········

    dvwa反射型xss

    反射型XSS:只是简单地把用户输入的数据反射给浏览器,一般出现在URL参数中及网站搜索栏中,只有用户点击恶意链接触发恶意代码的URL,才能受到攻击,只能触发一次,也被称为“非持久型XSS(Non-persistent XSS)”。

    漏洞测试

    low级别

    在输入框里面随便输入一个String(admin),发现显示:Hello admin这句话,同时可以知道数据提交是以GET请求的方式

    查看源码:并没有什么Protect,这是最危险的

    <?php
    
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Feedback for end user
        echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
    }
    
    ?> 

    构造payload,执行最简单的XSS攻击

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%22_XSS_%22%29%3C/script%3E

    当用户触发该URL时就会受到XSS攻击,有弹框出现

    后续测试,利用此漏洞,你也可以尝试去获得用户登陆的Cookie,在这里就不多说了,很容易实现的

    medium 级别

    <?php
    
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Get input
        $name = str_replace( '<script>', '', $_GET[ 'name' ] );
    
        // Feedback for end user
        echo "<pre>Hello ${name}</pre>";
    }
    
    ?> 

    经过代码审计,可以发现medium级别进行了Protect,对GET请求到的的内容进行'<script>'字符串匹配,将内容里出现的该字

    符串替换成空,避免<script>标签造成的XSS攻击,但是<script>标签真的就不能使用了吗,答案是可以使用的,回过头来继续分析此str_replace()函数

    str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

    在这里可以利用str_replace()函数区分大小写的缺点来进行XSS攻击

    构造payload,继续使用<script>标签进行XSS攻击

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3CsCript%3Ealert%28%271111%27%29%3C%2Fscript%3E#

    成功绕过<script>标签的匹配

    另一种绕过方法不使用<script>标签进行XSS攻击,既然str_repalce()函数匹配的是<script>标签,而不匹配其它标签,所以在这里也可以利用<img>标签进行XSS攻击

    构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cimg+src%3D%23+onerror%3Dalert%28%22_XSS_%22%29%3E#

    <img>标签绕过str_replace()

    high 级别

    <?php
    
    header ("X-XSS-Protection: 0");
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Get input
        $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
    
        // Feedback for end user
        echo "<pre>Hello ${name}</pre>";
    }
    
    ?> 

    代码审计之后,发现high级别存在另外一种的Protect,利用preg_replace()函数进行匹配“< s r i p t”等字符,将其置为空,此时<script>标签是不能使用的,不管是大小进行区分写都不可以

    小写<script>标签被过滤

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%22_XSS_%22%29%3C%2Fscript%3E#

    大小写混合<script>标签被过滤

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3CScripT%3Ealert%28%22_XSS_%22%29%3C%2FscriPt%3E#

    上面的既然都不行,就需要利用其它标签进行XSS攻击,此处可以利用 medium 级别 中提到的<img>标签进行绕过preg_replace()函数的Protect

    构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cimg+src%3D%23+onerror%3Dalert%28%22_XSS_%22%29%3E#

    <img>标签成功绕过preg_replace()

    impossible 级别

    <?php
    
    // Is there any input?
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // Check Anti-CSRF token
        checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    
        // Get input
        $name = htmlspecialchars( $_GET[ 'name' ] );
    
        // Feedback for end user
        echo "<pre>Hello ${name}</pre>";
    }
    
    // Generate Anti-CSRF token
    generateSessionToken();
    
    ?> 

    impossible 级别的Protect不能被绕过,由于htmlspecialchars()函数的保护作用

    htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
    
    预定义的字符是:
    
    & (和号)成为 &
    " (双引号)成为 "
    ' (单引号)成为 '
    < (小于)成为 <
    > (大于)成为 >
     
    它的语法如下:
    htmlspecialchars(string,flags,character-set,double_encode)
        其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
    
    可用的引号类型:
    
    ENT_COMPAT - 默认。仅编码双引号。
    ENT_QUOTES - 编码双引号和单引号。
    ENT_NOQUOTES - 不编码任何引号。
    默认是只编码双引号的

    因为输入的所有标签都被转义,所以此处不存在XSS攻击,但是要注意flags属性,使用不当过滤XSS时就会被绕过

  • 相关阅读:
    【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
    使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
    使用delphi 开发多层应用(二十三)KbmMW 的WIB
    实现KbmMw web server 支持https
    KbmMW 服务器架构简介
    Devexpress VCL Build v2014 vol 14.1.1 beta发布
    使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
    KbmMW 4.50.00 测试版发布
    Basic4android v3.80 beta 发布
    KbmMW 认证管理器说明(转载)
  • 原文地址:https://www.cnblogs.com/qftm/p/10317167.html
Copyright © 2011-2022 走看看