1.先看看这个页面,是一个bbs帖子详情页面,这里呢有个id的参数,它的值为1
2.我们要怎么知道它才有sql漏洞呢?,它的参数ID值为1 ,那么我们能改这个参数吗?
a.我们随便改改试试看,把1改成 1 and 1=1
b. 接着再试试,我们把1改成 and sleep(15)
通过上面的两个例子,我们可以看到,参数id的值被改变成 1 and 1=1,没有影响原先的结果,改成1 and sleep(15) 等待了15秒,这就是盲注,我们通过这种方式判断出了这里存在sql漏洞
我们主要的目的正如标题所说,需要获取到用户名及密码,怎么做呢?
exists的用法可以百度下
1.我们先猜猜用户表是什么,我们把参数值再改成,1 and exists(select * from users)
可以看到报错了,证明users表不存在
2.我们尝试猜另一个表user看看在不在 参数值改成 1 and exists(select * from user)
2. 知道了表名user存在,当然也不能说明这就是用户表,一切还是我们猜的对吧
我们继续来猜字段 ,参数值继续改成 1 and exists(select username,password from user)
报错了,证明至少一个字段是不存在的,当然我会给出正确的字段,真实情况是需要大家去遍历尝试的,我也只是演示下效果
好了,接着继续改 1 and exists (select nickname,password from user)
好了,两个字段我们都验证存在的,接下来是不是要来看内容啊,看内容是不是要用到union all联合查询呢,如果要用union all联合查询的话,表字段是不是要对等啊,所以我们先得知道这个http://192.168.56.1:8080/topic/detial?id=1 查询了几个字段,我们使用order by 来猜字段查询的字段数量
透露个猜测技巧:尽量从大往小猜
我先猜个20,参数值继续改 1 order by 2o
接着猜10,参数改成 1 order by 10,结果证明我是错误的,还是不对,哎,只能继续了
猜5个吧,参数改 1 order by 5,这回猜对了,没报错,这证明查询的字段数应该是5到10个之间对吧
透露下结果,真正查询的字段数是6,因为我不想再啰嗦下去了,不然被你们喷死。
OK,我们知道了user表,知道了nickname,password字段,知道了查询字段数是6个,那我们就再来改改参数吧
参数改成 1 union all select 1,2,3,4,nickname,password from user
我们好好看看这张图,内容是不是发生了点变化啊
可以看到页面上的一些内容,显示的是一些数字,这个是select 1,2,3,4,nickname,password form user里面的数字吧,我们貌似还看到一些类似md5的字符串吧,但是貌似没看到nickname的显示吧
我们需要再改改参数,调整下顺序,再试试吧
好累啊,今天到这里吧,嗯,妹子可以加我微信一起交流啊,我说的这个只是一丁丁知识,sql注入的神器还是sqlmap