[关闭]
@1kbfree 2018-12-18T21:37:06.000000Z 字数 809 阅读 943

通过DVWA来学习SQL盲注

漏洞挖掘


在实际的注入中,有分很多情况,比如报错注入,数字注入,字符注入,二次注入,编码注入,盲注入等,而这节课就是为了讲解盲注的,废话不多说,打开dvwa开撸~

何为盲注

首先打开我们的DVWA将等级设置为LOW,并且打开SQL Injection (Blind)这个选项,如下。

image_1clr69m8tgkviuunto11ff872s.png-123kB

然后我们在输入框中输入1,查看返回什么

image_1clr6b5071u4cni8tqg115t7jn39.png-99.7kB
上图的SQL语句是我在源代码处加了一条打印的代码,这样子更加方便学习和讲解

那么我们再输入一个不存在的ID会怎么样

image_1clr6dkdq1i0d1t812f58ee1n9s3m.png-116.6kB

可以看到他这里的用意是,如果ID存在的会显示User ID exists in the database.,如果ID不存在会显示User ID is MISSING from the database.,那么这就是盲注了,他不会想报错注入那样,会输出错误的信息然后我们可以直接查询表中的数据,而盲注的话则需要自己猜测数据

利用DVWA盲注来学习

盲注有几种方式来复现,首先讲的是substr函数的用法

substr用法

  1. substr(n1,n2,n3)
  2. 截取n1的值,从第一个字符开始,每次只返回一个。

实例

image_1clsulhp917uv18d1pch14gv10jp9.png-70.9kB

可以看到substr很容易理解吧,那么我们就用这个函数来去盲注一下看看~

image_1clsv0kp649n1kgm154uidg1sk216.png-87.2kB

可以看到,上图执行的sql语句是

  1. SELECT first_name, last_name FROM users WHERE user_id = '1' and substr(user(),1,1)='r';

意思就是查询user_id='1'并且user()的第一个字符的内容如果是r那么这条语句是成立的,否则是为假的~,那么这里的返回是User ID exists in the database.说明user()的第一个字符是r,那么我们继续猜测

image_1clsv5hovesg332bju1dvpthl23.png-90.1kB

ok,就是这样依次类推,不再讲下去了

if用法

  1. if (条件,return1,return2)
  2. 如果条件为`true`返回值是`return1`,如果条件为`false`返回值是`return2`

image_1clsvk5g7tcc1o3cn9cjl5i7m2g.png-18.3kB

利用if进行盲注

image_1clt1juf81o5i1aus116719m92qi3d.png-87.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注