0
点赞
收藏
分享

微信扫一扫

XSS渗透与防御——(二)XSS

颜路在路上 2022-03-12 阅读 179

第二章 XSS

1 XSS(Cross Site Script)基础和分类

1.1 反射型XSS

在这里插入图片描述

  • 比如在如下网页源码中

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

​ 第6行将用户输入**(可能是用户名,也可能是留言)**未经处理直接输出显示,如果用户输入<script>alert('XSS');</script>,则会发生

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjtexc7P-1646906084250)(E:\Docs\mashibing\渗透与防御\XSS\images\ReflectedXSS演示.png)]

  • 当然源码可能将<script>标签 过滤

    $name = str_replace( '<script>', '', $_GET[ 'name' ] );

    那么在输入时使用大写<Script>或者复写<scri<script>pt>

  • 也可能将大小写都屏蔽了:

    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    那么就要换一个标签,比如:

    <img src="" onerror="alert('XSS')">

    <audio src="" onerror="alert('XSS')">

    <video src="" onerror="alert('XSS')">

  • 也可能使用了htmlspecialchars函数来转义字符$name = htmlspecialchars( $_GET[ 'name' ] );

在这里插入图片描述

那么html的各种脚本就失效了。

1.2 存储型XSS

在这里插入图片描述

  • 比如在如下网页源码中

    <?php                                                                            //1.
    if( isset( $_POST[ 'btnSign' ] ) ) {                                             //2.
        // Get input                                                                 //3.
        $message = trim( $_POST[ 'mtxMessage' ] );                                   //4.
        $name    = trim( $_POST[ 'txtName' ] );                                      //5.
        // Sanitize message input                                                    //6.
        $message = stripslashes( $message );                                         //7.
        $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));                                                      //8.
        // Sanitize name input                                                       //9.
        $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));                                                      //10.
        // Update database                                                           //11.
        $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";                                                                             //12.
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );                                                                                    //13.
        //mysql_close();                                                             //14.
    }                                                                                //15.
    ?>                                                                               //16.
    

​ 第8行对用户输入未经处理就显示出来,如果用户输入<script>alert('XSS');</script>,则会产生与上文讲到的反射型XSS同样的结果。

在这里插入图片描述

  • 同样的,可能将<script>标签过滤了、将大小写屏蔽、转义字符等。

2 pikachu和DVWA靶场搭建

2.1 pikachu

2.1.1 下载

GitHub下载地址

由于近来GitHub访问速度屡刷新低,经常无法打开,所以我给出国内可以快速访问的地址:

Gitee下载地址

2.1.2 安装

  1. 安装phpstudy 在这里插入图片描述

  2. 新建网站

    在这里插入图片描述

  3. 修改pikachu配置文件,用于初始化数据库

    修改配置文件WWW\pikachu\WWW\inc\config.inc.php
    在这里插入图片描述
    根据注解修改即可

    在这里插入图片描述

    打开网址+端口号,单击安装/初始化,等待完毕后即可使用。

  4. XSS后台

    需要先将配置文件修改后才可使用

    WWW\pikachu\pkxss\inc\config.inc.php
    在这里插入图片描述

2.2 DVWA

2.2.1 下载

网页下载

GitHub下载地址

Gitee下载地址

2.2.2 安装

把DVWA解压后放在phpstudy的WWW路径下,后续操作与pikachu安装相同,注意这里配置文件需要自己先修改后缀名。

在这里插入图片描述

默认用户名密码为admin/password

2.3 其他XSS平台

https://github.com/78778443/xssplatform

Kali中命令行输入beef-xss,默认用户名密码是beef/123456

3 XSS检测和利用

3.1 XSSER

地址:https://xsser.03c8.net

Kali中命令行输入xsser即可安装使用

xsser -u url --cookie=COOKIE

xsser -De "google" -d "search.php?q="

3.2 XSSTRIKE

git clone https://github.com/s0md3v/XSStrike

Gitee下载地址

检测命令:

#Get类型
python3 xsstrike.py -u 'url'
#POST类型
python3 xsstrike.py -u 'url' --data 'name=1'

4 XSS防御

  • 入口:正则识别关键字并处理,替换成别的字符

  • 出口:htmlspecialchars函数实体化字符

  • WAF 防火墙

    Github下载

    Gitee下载

  • mod_security需要配合Apache使用

举报

相关推荐

0 条评论