N8 DVWA SQL Injection (Blind) SQL注入(盲注)

一、概念

由于服务器在后端对请求的返回结果进行了截断处理,我们不能直截了当的看见服务器反馈的各种信息。所以,我们通过页面是否能成功返回,返回过程是否有延迟等间接的反馈来达到SQL注入的目的。

盲注分类:基于时间型、基于布尔型。

二、Low级别

1.代码审计
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
我们可以看见,这里后端将参数直接传递到SQL查询语句中,并未做任何处理。
在下面将系统的反馈信息修改为两段话。这让我们无法直接看到详细的参数。

2.尝试测试

下面我们使用sqlmap进行测试。
首先使用Burpsuite抓取提交的数据报文。
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
将数据报文保存到txt文件中。
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
输入:sqlmap -r sql_low.txt -p id --level=5 --risk=3 --dbs
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
成功爆出数据库。

三、medium级别

1.代码审计
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
这里我们可以看见,以POST请求的方式将参数发送至后端,同时使用了mysqli_real_escape_string()函数对参数进行了转译。然后将处理后的参数带入查询语句中。同时,将系统反馈的信息替换为两句话。
2.尝试测试
同样,我们使用sqlmap进行检测,重复Low级别的操作。
sqlmap -r sql_medium.txt -p id --level=5 --risk=3 --dbs
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
这样,我们就成功将medium级别的数据库成功爆出。

四、high级别

1.代码审计
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
这里我们可以看见,将cookie中的id作为传递参数,同时没有进行过滤。但如果查询错误,会随机延迟几秒钟。这样,我们的根据时间的盲注就不能准确判断了。

2.尝试测试
同样的,我们可以使用sqlmap将其跑出。重复Low级别的步骤。
sqlmap -r sql_high.txt -p id --level=5 --risk=3 --dbs
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
成功跑出数据库列表。

五、impossible级别

1.代码审计
N8 DVWA SQL Injection (Blind) SQL注入(盲注)
这里我们可以看见,使用了token防止CSRF。
同时使用了get进行参数传递,使用PDO技术对参数进行处理后,再将参数放入SQL查询语句当中。
这里,我们就没有办法进行SQL注入了。

六、防御

1.过滤用户输入
2.使用预编译处理SQL语句(PDO、sqlparameter)
3.使用owasp等安全的sql处理API。