dvwa——sql盲注

本文详细介绍了SQL注入的概念,区分了低、中、高级别盲注,通过实例展示了如何利用不同的输入方式检测和利用这些漏洞,包括GET、POST和COOKIE。作者强调了防范的重要性,并分享了个人在处理cookie注入时的经验。
摘要由CSDN通过智能技术生成

声明: 本文章仅限于安全技术交流,禁止用于非法途径,如读者作出危害网络安全的行为后果自负,与作者无关!


一、什么是sql注入

SQL注入是一种常见的网络安全漏洞和攻击方式,它利用应用程序对用户输入数据的处理不当,使得攻击者能够在执行SQL查询时插入恶意的SQL代码。通过成功注入恶意代码,攻击者可以执行未经授权的数据库操作,获取敏感信息、篡改数据甚至完全破坏数据库。

二、sql盲注关卡

low

我们先来看他的页面
在这里插入图片描述
发现这里对比普通关卡,不再显示用户名只是显示存在和不存在,这里我们来看一下代码
代码如下(示例):

<?php

if( isset( $_GET[ 'Submit' ] ) ) {
    // Get input
    $id = $_GET[ 'id' ];

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysqli_num_rows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // User wasn't found, so the page wasn't!
        header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

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

?> 

这里发现传入的参数没有使用任何防护的措施。
这里使用exp:

1' or 1=1#

发现这里的回显是存在的,这里就可以证明存在sql注入漏洞。
在这里插入图片描述
盲注对普通的注入的区别,就是他没有了回显位,这里只是看他的一个判断是否存在来进行注入。
这里我们已经知道数据库名为dvwa是四个位置,这里我就简单说一大概。
exp1:

1' and length(database()) > 3 #

在这里插入图片描述

exp2:

1' and length(database()) > 4 #

在这里插入图片描述
这里可以看到我们在判断数据库长度的时候,我们说数据库名长度大于3的时候回显id存在,大于4的时候就回显不存在了,说明数据库名的长度是4位。
接下来来猜解数据库名是什么。
我们可以在给定的字符串中利用substr()函数,从指定位置开始截取指定长度的字符串,分离出数据库名称的每 个位置的元素,并分别将其转换为ASCII码,与对应的ASCII码值比较大小,找到比值相同时的字符,然 后各个击破。
exp:

1' and ascii(substr((select database()),1,1))>50 #

发现发现用户存在说明数据库名的第一位的ascii码大于50

在这里插入图片描述

1' and ascii(substr((select database()),1,1))>100 #

发现发现用户存在说明数据库名的第一位的ascii码小于100
在这里插入图片描述
这里拿出我们的burp来做一个批量判断
还是先抓包,然后发送到的intruder模块进行批量修改
在这里插入图片描述

设置数值
在这里插入图片描述
点击开始攻击
在这里插入图片描述
这里点击状态或者长度进行一个排序可以看到数据库名第一位的ascii码数值为100
我们来查看一下ascii码100对应的是什么
https://www.sojson.com/asciitable.html
在这里插入图片描述
可以看到第一位就是d。
接下来我直接获取数据库名,现在已经知道数据库长度是4位,接下来我们使用burp来设置,还是先抓包,发送到的intruder模块进行修改
在这里插入图片描述


在这里插入图片描述
点击开始攻击

在这里插入图片描述
查看对应的ascii码最后得出来的数据库名称位dvwa。

medium

我们还是先来看页面回显
在这里插入图片描述
接下里看代码

<?php

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

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysqli_num_rows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

    //mysql_close();
}

?>

发现就是换了个提交方式
还是使用burp来抓包
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击攻击
我们来查看最后的结果,点击长度进行过滤
在这里插入图片描述

high

还是先看回显
在这里插入图片描述
代码如下:

?php

if( isset( $_COOKIE[ 'id' ] ) ) {
    // Get input
    $id = $_COOKIE[ 'id' ];

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysqli_num_rows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // Might sleep a random amount
        if( rand( 0, 5 ) == 3 ) {
            sleep( rand( 2, 4 ) );
        }

        // User wasn't found, so the page wasn't!
        header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

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

?>

这里传参的参数是$_COOKIE说明,这里可能会存在cookie注入

我们还是来抓包,(这里要注意看包的内容)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我调的数量有点大,所以时间会比较久
在这里插入图片描述
这里看到我都没跑完…


总结

今天的笔记就写了这个布尔注入,比较难搞的是cookie注入,得能搞清楚是哪个包,才能注入成功,搞cookie注入花了我好长时间,真的太久没搞都忘记了。以上内容为我个人理解,不喜勿喷,如有写错欢迎指出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值