前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kali Linux Web渗透测试手册(第二版) - 6.5 - 确认并利用SQL盲注漏洞

Kali Linux Web渗透测试手册(第二版) - 6.5 - 确认并利用SQL盲注漏洞

作者头像
用户1631416
发布2019-03-06 14:38:43
5680
发布2019-03-06 14:38:43
举报
文章被收录于专栏:玄魂工作室

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

6.5、确认并利用SQL盲注漏洞

我们已经学会了如何找到并利用sql注入漏洞,下面我们将介绍一个同类型的另外一个漏洞,名为sql盲注。它不会有任何回显信息,完全利用两次不同的回显页面造成数据库猜解,开始学习吧!

实战演练

登陆DVWA靶机,进入sql盲注页面:

1. 这个表单和上面的sql注入表单一模一样,我们输入1,可以查看id为1的用户信息

2. 现在我们输入 1' 看看会不会像sql注入一样报错

我们没有收到错误消息,也没收到任何结果返回

3. 我们再输入 1'' 看一下:

结果显示了id为1的用户信息,这说明前面测试的1’是web应用已经预料到的错误,这里很可能会有sql盲注漏洞,我们来继续猜测

4. 输入一个结果总是为假的参数试一下:

我们输入1' and '1'='2

因为1不等于2,所以结果总是为假。可以发现应用没有给出选择条件的结果

5. 接着构造一个始终为真的参数:

代码语言:javascript
复制
1' and '1'='1

可以发现应用给出了id为1的结果。这说明该表单存在sql盲注漏洞,我们可以输入猜测的语句函数来观察应用返回的结果,通过这个方法可以一步一步猜解出想知道的内容。

6. 在教程中,我们首先需要知道数据库的用户名,所以我们首先尝试一下这个语句:

代码语言:javascript
复制
1' and 1=char_length(current_user()) and '1'='1

7. 下一步我们找到burp中的这个请求,并发送到intruder模块:

8. 接着我们就可以通过添加攻击参数来构造有效载荷:

9. 转到有效载荷内容,将有效载荷类型设置为number

10. 将数值内容设置为1-15,步数为1:

11. 接着转到intruder的选项卡,清除grep匹配列表,添加自己想要的回显字段,来快速查看攻击结果

12. 开始攻击!从攻击结果我们得知,用户名是6位数

13. 现在我们来猜解一下用户名的每个字符是什么。先猜测第一个,我们输入:

代码语言:javascript
复制
1' and current_user LIKE 'a%
%是sql语句中的通配符,它可以匹配任何字符串。我们这个语句的意思是猜测第一个字母是不是a

14. 同样的,我们把该请求发送到intruder模块,将a设置为改变参数,

15. 我们的载荷列表是a-z,1-9,和所有特殊符号的集合。由于sql语句中的select查询不区分大小写,所以省略了大写字母

16. 从结果中我们发现第一个字母是d

17. 下面继续猜测第二个字符,将输入参数改为

代码语言:javascript
复制
1' and current_user LIKE 'da%

18. 现在我们的目标是d后面的字符

19. 开始攻击!可以从结果中看到第二个字符是v

20. 下面继续猜解后面的字符。在结果中,你可能会发现%的结果总为ture,这是因为%是通配符,它可以和任意一个字符匹配到。

最后我们测试出来的结果是dvwa@%,最后一个%匹配的是空字符,所以用户名是dvwa@

21. 为了验证结果,我们把like替换为=,提交

代码语言:javascript
复制
1' and current_user()='dvwa@%

观察结果

结果显示我们找到了正确的用户名!

原理剖析

在服务器端,sql注入和sql盲注是同类型的漏洞,都是因为对输入内容不检测或检查不充分导致脏数据进入了数据库中。

在基于错误的sql注入中,我们利用服务器的错误回显信息来查询表名、列名和字段

而在sql盲注中,我们需要通过一些问题语句询问数据库结果对错,例如用户名是否开头是a?是否有用户以aa开头?所以sql盲注一般花费的时间较多

我们通过观察对错结果回显可以判断是否存在sql盲注,接着可以判断想知道的内容的长度,然后判断每一个字符。这种方法显示是最有用的

补充

Sql盲注攻击可以通过查找DBMS、使用的版本信息。接着使用特定于供应商的命令来查看用户是否具有管理权限来继续进行。如果是管理权限,就可以提取所有用户名和密码,激活远程连接,以及其他许多事情。您可以尝试的另一件事是使用工具自动化这种类型的攻击,例如SQLMap,我们将在下一个教程中介绍它

另请参阅

还有一种盲注方法,名为sql时间盲注。这种攻击中,我们不会知道命令是否被执行,只能通过一个sleep()函数来观察回显时间,如果使用sleep函数后,返回变慢了。那么就说明请求被响应。这种攻击更加缓慢,所以一般通过sqlninja或者sqlmap这种自动化工具来实现。

可以查看下面这些链接学习更多sql盲注的知识:

1. https://www.owasp.org/index.php/Blind_SQL_Injection 2. https://www.exploit-db.com/papers/13696/ 3. https://www.sans.org/reading-room/whitepapers/securecode/sql-injection-modes-attack-defence-matters-23 4. https://www.owasp.org/index.php/Blind_SQL_Injection

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玄魂工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档