DVWA靶场刷题

目录

Brute Force

XSS(DOM)

Brute Force

这是一道暴力破解的题目。

low

一、开启burp,打开代理

二、此处我在火狐浏览器中安装了插件,如果没有插件的可以在设置中进行代理选择,其他浏览器也相似,现在进行浏览器的代理设置

1)点击设置
在这里插入图片描述

2)滑到最底部选择设置
在这里插入图片描述

3)进行图中的相应设置(此处因为安装了插件,所以会变成灰色,正常情况下是可选的状态)。
在这里插入图片描述

三、随便输入账号和密码,点击Login,就会跳转到burp里面,然后我们将包发送到Intruder模块。
在这里插入图片描述

因为burp会默认选中一些攻击参数,所以我们要先将其清除。
在这里插入图片描述

然后我们选中要进行爆破的参数,点击Add即可选中(因为这里只是做演示,就只做一个点的爆破,我将账号修改为admin了)。
在这里插入图片描述

之后我们选择payloads
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四、查看一下源码,发现没有任何的防护措施

 <?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Get username
    $user = $_GET[ 'username' ];

    // Get password
    $pass = $_GET[ 'password' ];
    $pass = md5( $pass );

    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $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>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

Medium

medium模式与Low差别不大,查看源码我们会发现,只是输错密码后会禁止2秒钟,但是这样的禁止模式没有多大的用处。

<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $pass = md5( $pass );

    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $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>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        sleep( 2 );
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?> 

High

一、我们抓包会发现多了一个token值,但是burp里面有一个进行token爆破的模块
在这里插入图片描述

二、将包发送到攻击模块

三、选中要爆破的密码和token模块,然后选择Pitchfork
在这里插入图片描述

四、然后到payloadsoptions中进行配置

1)载入字典
在这里插入图片描述

2)然后找到Grep - Extract,点击Add(注意的是,这里的线程还要调为1)
在这里插入图片描述
在这里插入图片描述

3)点击Refetch,选择token值
在这里插入图片描述

4)选择2攻击点,选择Recursive grep模块,点击开始攻击即可
在这里插入图片描述

5)测试结果(因为有时候比较难以判断),测试的方法与Low级别的测试相同
在这里插入图片描述

五、源码分析

<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = stripslashes( $user );
    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $pass = stripslashes( $pass );
    $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $pass = md5( $pass );

    // Check database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $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>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        sleep( rand( 0, 3 ) );
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

其实就是加入了token值进行保护,但是还是不够完善

XSS(DOM)

这是一道DOM型的XSS注入的题目。

low

一、直接点击select,发现提交的内容在网址中显示,所以我们可以得知这是一个GET请求
在这里插入图片描述

二、直接来测试是否存在XSS漏洞,上payload,发现存在XSS漏洞

payload:

在这里插入图片描述

源码分析,这是真的什么都没有啊。

<?php

# No protections, anything goes

?> 

Medium

一、还是一样,参试一下<script>alert(123)</script>,发现什么反应都没有,查看一下源码吧

二、源码分析

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
//我们发现这里把<script给过滤了
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

?> 

那么我们难道就没有其他办法了吗?当然有,而且还有很多种方法进行绕过,这里我们先看看前端代码吧。
在这里插入图片描述
我们是不是可以构造一个让select和option提前闭合的变量,然后在其后面加上img标签进行XSS攻击,不废话了,直接上payload。

payload:
在这里插入图片描述

这里要注意的是,鼠标要移到损坏的图片上方才会触发XSS。

High

一、直接使用<script>alert(1)</script>也还是没用,毕竟人家也是一个High级别的,怎么可能犯这种错误了

二、我们查看前端的代码,发现和Medium模式的是一样的,我们参试一下Medium模式下的payload,但是发现也没有用

三、查看源码,分析一下

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
# 我们在这里发现只能进行这些匹配
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?> 

虽然只有这些匹配,但是我们是不是可以使用&&进行连接?当然是可以的啊!

payload:&&

在这里插入图片描述

如果文章有何不妥之处,请您指出。

更多的DVWA靶场解题思路更新中,敬请期待……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜猴子_x

你的鼓励将是我创造的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值