DVWA闯关XSS(Reflected)

低级难度

源代码:

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

可以看到系统直接使用了name参数,没有做任何过滤

<script>alert(/一个嚣张的XSS/)</script>

在这里插入图片描述

中级难度

源代码:

<?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>替换为空,但是可以双写绕过,并且str_replace区分大小写,也可以大小写绕过
方法1:双写绕过

<sc<script>ript>alert(/一个嚣张的XSS/)</script>

在这里插入图片描述
方法2:大小写绕过

<scRipt>alert(/一个嚣张的XSS/)</script>

在这里插入图片描述

高级难度

源代码:

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

可以看见系统用了正则匹配,道导致大小写和双写绕过失效,但是可以使用事件驱动,让靶机因为无法出现一个不存在的图片而出发错误,出现弹窗。

<img src=1 onerror=alert(/xss/)>

在这里插入图片描述

不可能难度

源代码:

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

系统使用了htmlspecialchars把我们XSS要用到的一些预定义字符转化为HTML实体,导致无法再进行反射型XSS攻击。
预定义字符包括:"'<>&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值