通过sql漏洞获取用户表的用户名及密码

2017-08-02  江永道 


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






91°|895 人阅读|2 条评论

小窝  2017-08-02

教坏好孩子 肿么办?


江永道  2017-08-02

@小窝 ,可以去试试

登录 后发表评论