DVWA下的SQL Injection(Blind)

本文详细介绍了在DVWA中进行SQL Blind Injection的过程,包括利用sqlmap工具和手动注入方法。从Low到High四个级别的攻击策略,涉及数据库探测、表名和字段名猜测等步骤。
DVWA下的盲注
盲注与一般sql注入的区别是,一般的注入可以从页面上看到执行结果,而盲注无法获得明显结果,一般只是如下两种:




一 Low级别


可以使用两种方法:
1 利用sqlmap
首先,kali自带的就有sqlmap,启动Burpsuite,在SQL injection(Blind)中输入如下,然后查看Burpsuite中抓到的URL和Cookie


(1)启动sqlmap,在上图中复制URL和cookie,在sqlmap中输入:sqlmap –u ‘复制的URL’  --cookie=’复制的cookie’ ,可以查看数据库类型。




可看出注入点可能是id,数据库是mysql。
【注】sqlmap命令:http://blog.youkuaiyun.com/keepxp/article/details/52052070
(1)--current-db:获得当前数据库名
(2)--current-db --tables –D dvwa:使用dvwa库得到表名
  -D表示指定数据库名称
(3)-T guestbook --columns:得到guestbook的表结构
  -T表示指定列出字段的的表;--columns表示指定列出字段
(4)-T users --dump:得到users表的内容,在sqlmap询问时候破解密码时,选择是,sqlmap会使用自己的字典来破解密码,得到5个用户的密码. –-dump表示将结果导出
(5)--passwords:使用sqlmap自带的字典可以破解出数据库用户的密码
(2)查看数据库名




此获取的数据库名为dvwa。
(3)使用dvwa得到表名




(4)得到users的表结构,并且把用户名和密码都显示了






### SQL InjectionBlind) 简介 SQL InjectionBlind)即 SQL 盲注,是一种特殊的 SQL 注入攻击方式。在这种攻击中,攻击者无法直接从应用程序的响应中获取 SQL 查询的结果,而是通过构造特殊的 SQL 语句,根据应用程序返回的不同响应(如页面响应时间、页面显示内容的变化等)来推断数据库中的信息。 ### 攻击方法 #### 基于布尔的盲注 攻击者通过构造 SQL 语句,使数据库根据条件返回不同的结果,通过判断应用程序的响应来确定条件是否成立,逐步获取数据库信息。例如,在登录框输入用户名 `' AND 1=1 --` `' AND 1=2 --`,如果前者登录成功而后者失败,说明存在 SQL 盲注漏洞,且数据库能够正确处理 `1=1` 这个条件。 #### 基于时间的盲注 当应用程序对所有 SQL 查询的响应都是相同的,无法通过布尔判断时,攻击者可以利用数据库的延时函数,通过判断应用程序的响应时间来推断信息。例如,构造 SQL 语句 `' AND SLEEP(5) --`,如果应用程序响应时间明显增加了 5 秒,就说明存在 SQL 盲注漏洞。 ### 防护措施 #### 输入验证 对用户输入的数据进行严格的验证过滤,只允许合法的字符格式。例如,对于数字类型的输入,只允许输入数字字符;对于字符串类型的输入,去除特殊字符 SQL 关键字。 ```python import re def validate_input(input_data): # 只允许字母数字 pattern = re.compile(r'^[a-zA-Z0-9]+$') if pattern.match(input_data): return True return False ``` #### 使用参数化查询 使用数据库提供的参数化查询功能,将用户输入的数据作为参数传递给 SQL 语句,而不是直接拼接在 SQL 语句中。这样可以防止 SQL 注入攻击,因为数据库会自动处理参数的转义。例如,在 Python 中使用 `sqlite3` 进行参数化查询: ```python import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() username = "test' OR '1'='1" password = "password" # 使用参数化查询 cursor.execute("SELECT * FROM users WHERE username =? AND password =?", (username, password)) result = cursor.fetchone() ``` #### 最小化数据库权限 为应用程序分配最小的数据库权限,只允许其执行必要的操作。例如,如果应用程序只需要查询数据,就不授予其插入、更新删除数据的权限。 ### 案例 假设存在一个简单的用户信息查询页面,用户可以通过输入用户 ID 来查询用户信息。页面的 SQL 查询语句如下: ```sql SELECT * FROM users WHERE id = '$id'; ``` 攻击者可以构造如下的 SQL 盲注语句来获取数据库信息: - 基于布尔的盲注:输入 `1' AND (SELECT COUNT(*) FROM users) > 10 --`,如果页面显示正常,说明用户表中的记录数大于 10;如果页面报错或显示异常,说明记录数小于等于 10。 - 基于时间的盲注:输入 `1' AND SLEEP(5) --`,如果页面响应时间明显增加了 5 秒,说明存在 SQL 盲注漏洞。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值