DVWA V1.9:Reflected Cross Site Scripting(反射型XSS)

反射型 XSS 介绍

“跨站点脚本(XSS)”攻击是一种注入问题,其中恶意脚本被注入到其他良性的和可信的网站中。
当攻击者使用Web应用程序将恶意代码(通常以浏览器端脚本的形式)发送给不同的最终用户时,会发生XSS攻击。
允许这些攻击成功的缺陷非常普遍,并且在Web应用程序的任何地方使用来自用户的输入在输出中发生,而不验证或编码它。

攻击者可以使用XSS向恶意的用户发送恶意脚本。
终端用户的浏览器没有办法知道脚本不应该被信任,并且将执行JavaScript。

因为它认为脚本来自可信来源,恶意脚本可以访问任何cookie、会话令牌或浏览器保留的其他敏感信息,并与该站点一起使用。
这些脚本甚至可以重写HTML页面的内容。

因为它是一个反射的XSS,恶意代码不存储在远程Web应用程序中,所以需要一些社会工程(例如通过电子邮件/聊天的链接)。
在这里插入图片描述

Low 级别

核心代码

<?php

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

?>

可以看到,代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。

官方提示

低电平将不检查请求输入,然后将其包含在输出文本中使用。

Spoiler: ?name=<script>alert("XSS");</script>.

漏洞利用

输入<script>alert(/xss/)</script>,成功弹框:

在这里插入图片描述
所构造出的xss链接

http://43.247.91.228:81/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E#

Medium 级别

核心代码

<?php

// 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>";
}

?>

可以看到,这里对输入进行了过滤,基于黑名单的思想,使用str_replace函数将输入中的《script》删除,这种防护机制是可以被轻松绕过的。

官方提示

开发人员试图添加一个简单的模式匹配来删除对 《script》 的任何引用,以禁用任何JavaScript。

Spoiler: Its cAse sENSiTiVE.

漏洞利用

输入<sCRipt>alert(/xss/)</sCRipt>,成功弹框:

在这里插入图片描述
所构造出的xss链接

http://43.247.91.228:81/vulnerabilities/xss_r/?name=%3CsCRipt%3Ealert%28%2Fxss%2F%29%3C%2FsCRipt%3E#

High 级别

核心代码

<?php

// 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级别的代码同样使用黑名单过滤输入,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。

官方提示

开发人员现在相信他们可以通过删除模式 “<scrip*t” 来禁用所有JavaScript

Spoiler: HTML events.

漏洞利用

虽然无法使用《script》标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。

输入<img src=1 onerror=alert(/xss/)>,成功弹框:

在这里插入图片描述
所构造出的xss链接

http://43.247.91.228:81/vulnerabilities/xss_r/?name=%3Cimg+src%3D1+onerror%3Dalert%28%2Fxss%2F%29%3E#

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级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为HTML实体,防止浏览器将其作为HTML元素。

官方提示

使用内置PHP函数(如htmlspecialchars()“”它可以逃避任何会改变输入行为的值。

参考链接:
新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS

发布了159 篇原创文章 · 获赞 20 · 访问量 8621

猜你喜欢

转载自blog.csdn.net/qq_43233085/article/details/104092178
今日推荐