首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

翻译来自掣雷小组

成员信息:

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

标记红色的部分为今日更新内容。

6.0、介绍

6.1、寻找文件包含漏洞

6.2、文件包含和文件上传

6.3、手工验证SQL注入

6.4、基于错误的SQL注入

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

6.6、使用SQLMap查找和利用SQL注入

6.7、利用XML外部实体注入

6.8、检测和利用命令注入漏洞

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. 接着构造一个始终为真的参数:

1' and '1'='1

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

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

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. 现在我们来猜解一下用户名的每个字符是什么。先猜测第一个,我们输入:

1' and current_user LIKE 'a%

%是sql语句中的通配符,它可以匹配任何字符串。我们这个语句的意思是猜测第一个字母是不是a

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

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

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

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

1' and current_user LIKE 'da%

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

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

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

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

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

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

--------------------------------------------------------------------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190107B000WE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券