DWVA-1.10学习笔记之一——Brute Force(暴力破解)

讲在前面

暴力破解本身是一个技术含量比较低的手段,即通过穷举所有有可能的字段进行尝试,找到一个正确的结果,从而达到破解的效果。
我个人觉得,暴力破解的难点在于没有一份强大的字典文件去遍历,其次是遍历的时间一般会比较长,在实战中暴力破解一般会是个最差解。

一、Low

1.1 先看代码:
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);

这段代码的意思是:

  1. 如果请求包get的内容是login的话,接收username和password两个参数,对password计算md5摘要
  2. 构建sql语句,并发送到数据库进行查询
  3. 解析返回结果

从代码可以看到,服务器端对输入没有任何验证,因此不仅可以暴力破解,直接注入都是行得通的:
在这里插入图片描述
(这里主要是在sql里面and比or的优先级高,所以运算出的结果是true)

1.2 爆破

打开burpsuite,设置代理,然后开始抓包。
用户名输入admin,密码随意,这里输入123456,抓到的包丢进Intruder:
在这里插入图片描述
payload选择simple list,然后开始攻击:
在这里插入图片描述
可以看到,就password的反应包长度不一样,经手工验证,password即为正确的密码。

二、Medium

2.1 代码
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 ) : 
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值