[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

简介: 先提交name1浏览顶部URL栏发现为GET请求

XSS(Reflected)-low level

源代码

<?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>';
}
?>

无任何过滤 可实施XSS注入


姿势

先提交name1

浏览顶部URL栏发现为GET请求

image.png

Payload:GET<script>alert("qiu")</script>

image.png



XSS(Reflected)-medium level

源代码

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


使用 str_replace() 函数将 <script> 标签替换为空


姿势

1.双写绕过

Payload:<scri<script>pt>alert("qiu")</script>

由于str_replace() 函数将<script>标签替换为空,且str_replace函数仅执行一次

Payload将变为<script>alert("qiu")</script>,从而实现了正常XSS语句的注入

image.png


2.大小写绕过

在 PHP 中,变量名、函数名、常量名等标识符都是区分大小写的。

例如,$Qiu 和 $qiu 是两个不同的变量

因此我们可构造Payload如下来绕过限制:

Payload:<Script>alert("qiu")</script>

<sCript>alert("qiu")</script> 及 <ScRIpt>alert("qiu")</script>均可

image.png

XSS(Reflected)-high level

源代码

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


str_replace函数

preg_replace 是 PHP 内置的一个函数,用于使用正则表达式对字符串进行搜索和替换。其语法如下:


preg_replace($pattern, $replacement, $subject);


其中:


$pattern:表示正则表达式模式,用于指定需要搜索的规则;

$replacement:表示替换后的字符串,可以是字符串、数组或回调函数等;

$subject:表示输入的字符串,需要进行搜索和替换的目标字符串。

preg_replace 函数会在 $subject 中搜索符合 $pattern 的子串,并将其用 $replacement 进行替换。如果 $pattern 中包含捕获分组,可以在 $replacement 中使用 $n ($n 表示第 n 个捕获分组)的形式来引用捕获的内容。


下面是一个使用 preg_replace 函数过滤 HTML 标签的简单示例。


$str = "<p>这是一段<b>加粗</b>的文本。</p>";

$pattern = "/<[^>]*>/";

$replacement = "";

echo preg_replace($pattern, $replacement, $str);


上述代码中,定义了一个包含 HTML 标签的字符串 $str。


接着,使用正则表达式 $pattern 匹配其中的标签内容,即 /<[^>]*>/ 表示匹配任意以 < 开头,以 > 结尾的字符串。


然后,将匹配到的标签内容,即<p><b></b></p>用空字符串 $replacement 进行替换,即删除所有标签。


最后,使用 preg_replace 函数输出过滤后的字符串,即不包含 HTML 标签的纯文本内容。结果如下所示:


这是一段加粗的文本。

1

.* 是正则表达式中的一个元字符组合,表示匹配任意数量的任意类型字符。其中.表示匹配任意一个字符,* 表示匹配该字符的数量是 0 到无限个。


例如,a.*b 表示匹配以字母 a 开始,以字母 b 结尾的字符串,并且两端之间包含了任意数量的字符。如 acbc、ab、a-&^%$#@!b 等等都是符合这个正则表达式的字符串。


正则表达式 /<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i 中的 /i 表示忽略大小写。

例如,如果输入的字符串中存在如下标签:


<Script></Script>

1

那么在未加 /i 修饰符时,由于标签名中大小写混合,<Script>无法被/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i完全匹配,因此不会被过滤掉。而当我们加上 /i 修饰符后,就可以忽略大小写,将其正确地匹配并过滤掉。


正则表达式/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i表示匹配包含任意字符的 <script 标签。使用 preg_replace() 函数时,将会过滤所有以<开头、以t结尾的字符串

例如,以下的字符串均可被上述正则表达式匹配到:


<script></script>

<Scri<script>pt></scriUIXpt>

<SCCRIRIPPTTTTTt></scriIIOpt>


如果正则表达式为/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*)>/i,则会过滤所有以<开头,以>结尾的字符串


姿势

切换XSS语句的标签即可绕过限制

Payload:<img src=1 onerror=alert("qiu")>,注入成功:

image.png


XSS(Reflected)-Impossible level

源代码

<?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();
?>


代码审计

检查是否存在名为 name 的 GET 参数,并且该参数不为空;

使用 checkToken() 函数对用户提交的 Anti-CSRF token 进行验证,通过比对 $_REQUEST['user_token'] 和$_SESSION['session_token']的值,防止跨站请求伪造攻击(CSRF);

使用 htmlspecialchars() 函数对用户输入的 name 参数进行 HTML 实体编码,以避免客户端 JavaScript 的执行和 XSS 攻击;

输出经过处理的 name 参数,同时包裹在<pre></pre>标签中,使其能够以预格式化的方式显示,提升了输出信息的可读性。

另外,在该代码中也出现了一些与 CSRF 防御相关的函数调用:


generateSessionToken() 函数用于产生随机的 Session Token,用于 CSRF 防御中防止攻击者利用各种手段获取到合法的 token 值;

checkToken() 函数用于验证用户提交的 Anti-CSRF token 是否合法。在其中,会比对用户提交的 token 值和服务器端存储的 token 值是否一致,如果不一致,则将会触发防御机制。

总结

以上为[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集,读者可躬身实践。

后续将分享[网络安全]DVWA之XSS(Stored)攻击姿势及解题详析合集

我是秋说,我们下次见。

目录
相关文章
|
11天前
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
30 1
|
23天前
|
云安全 缓存 网络协议
如何防护DDoS攻击,筑牢网络安全防线
随着信息技术的飞速发展,网络已成为现代社会不可或缺的一部分,极大地便利了个人社交和商业活动。然而,网络空间在创造无限机遇的同时,也潜藏着诸多威胁,其中分布式拒绝服务攻击(DDoS,Distributed Denial of Service)以其高破坏力和难以防范的特点,成为网络安全领域的一大挑战。本文将从DDoS攻击的原理出发,详细探讨如何有效防护DDoS攻击,以筑牢网络安全防线。
|
2月前
|
监控 安全 网络安全
保护网络免受 DDoS 攻击的最佳实践
【8月更文挑战第24天】
74 1
|
2月前
|
SQL 监控 安全
|
2月前
|
安全 5G 网络安全
无线网络攻击
【8月更文挑战第16天】
36 1
|
2月前
|
监控 安全 JavaScript
对跨站脚本攻击(XSS)的防御策略?
【8月更文挑战第15天】
135 1
|
2月前
|
存储 安全 JavaScript
XSS攻击(Cross-Site Scripting)
【8月更文挑战第11天】
51 2
|
1月前
|
SQL 安全 网络安全
|
2月前
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
41 0
|
2月前
|
存储 安全 JavaScript
解释 XSS 攻击及其预防措施
【8月更文挑战第31天】
71 0
下一篇
无影云桌面