前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kali Linux Web渗透测试手册(第二版) - 6.6 - 使用SQLMap查找和利用SQL注入

Kali Linux Web渗透测试手册(第二版) - 6.6 - 使用SQLMap查找和利用SQL注入

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

翻译来自掣雷小组

成员信息:

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

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

正如前面的小节所示,开发SQL是一个非常辛苦的过程。SQLMap是Kali Linux中包含的命令行工具,它可以帮助我们使用多种技术对各种数据库自动检测和利用SQL注入。

在这小节中,我们将使用SQLMap来检测和利用SQL漏洞,并获取应用程序的用户名和密码。

实战演练

浏览http://192.168.56.11/mutillidae,进入OWASP Top10 | A1 – SQL injection | SQLi Extract Data| User Info:

1. 尝试任何用户名和密码,例如user和password,然后单击View Account Details。

2. 登录将失败,但我们对URL感兴趣。转到地址栏,将完整的URL复制到剪贴板。应该是这样的: http://192.168.56.11/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details

3. 现在,在终端窗口中,输入以下命令:

代码语言:javascript
复制
sqlmap -u "http://192.168.56.11/mutillidae/index.php?page=user-info.php&username=user&password=password--curent-user --current-db --is-dba

可以看到-u参数的值是复制的URL。使用-p,我们告诉SQLMap,我们希望在用户名参数中查找SQLi,一旦漏洞被利用,我们希望它检索当前数据库用户名和数据库名称,并知道该用户在数据库中是否具有管理权限。检索这些信息是因为我们只想知道用户名参数中的URL中是否有SQLi。下面的截图显示了这个命令以及SQLMap如何表示执行:

4. 一旦SQLMap检测到应用程序使用的DBMS,它还会询问我们是否要跳过对其他DBMS的测试,是否要包含对所检测的特定系统的所有测试,即使它们超出了当前级别和配置风险的范围。在这种情况下,我们回答Yes以跳过其他系统,而回答No以则进行所有测试。

5. 一旦我们指定的参数被发现是存在sql注入的,SQLMap将询问我们是否需要测试其他参数。我们对这个问题的回答是No的,然后我们会看到结果:

6. 如果我们想要获得用户名和密码,就像我们在前面的小节中所做的那样,我们需要知道具有这些信息的表的名称。在终端执行以下命令:

代码语言:javascript
复制
sqlmap -u"http://192.168.56.11/mutillidae/index.php?page=user-info.php&username=test&password=test-D nowasp --tables

SQLMap保存了它执行的注入的日志,因此第二次攻击将比第一次攻击花费更少的时间。如您所见,攻击返回我们指定的数据库中的表列表:

7. Account表看起来像是拥有我们想要的信息。让我们查看的他的字段信息:

代码语言:javascript
复制
sqlmap -u"http://192.168.56.11/mutillidae/index.php?page=user-info.php&username=test&password=test-D nowasp -T account --dump

我们现在有了完整的用户表,在这种情况下,我们可以看到密码没有加密,所以我们可以直接使用密码进行登录:

8. SQLMap还可以用于在数据库和操作系统中提权。例如,如果数据库用户是管理员权限,我们可以使用--users 和 --password选项提取所有数据库用户的用户名和密码散列,如下图所示:

通常,这些也是操作系统用户,并将允许我们提升到操作系统权限或者可以登录其他网络主机。

9. 我们还可以得到一个shell,它允许我们直接向数据库发送SQL查询,如下所示:

原理剖析

SQLMap使用SQLi字符串测试给定URL和数据中的所有输入参数,或者只测试-p选项中的指定输入参数,并解释响应以发现是否存在漏洞。不过最好不要模糊测试所有输入参数; 有哪位寻找所有可能性的注入可能会花费大量时间,并在网络中产生非常可疑的流量。一般使用SQLMap来利用我们已经知道存在的注入,并且试图缩小搜索过程。可以向它提供更多可用的信息,例如存在sql注入的参数、DBMS类型和其他信息。

在这个小节中,我们已经知道用户名参数容易受到SQL注入的攻击(因为我们使用了mutillidae的SQL注入测试页面)。在第一次攻击中,我们只想确定那里有一个注入,并要求提供一些非常基本的信息:用户名(—curant -user)、数据库名(—current-db)以及用户是否是管理员(—is-dba)。

在第二次攻击中,我们指定了要使用-D选项查询的数据库,以及从上次攻击中获得的名称,并要求提供它包含的表列表。知道我们想要得到什么表(-T account),我们告诉SQLMap用——dump读取它的内容。

因为从应用程序查询数据库的用户是DBA,所以它允许我们向数据库询问其他用户的信息,而SQLMap使用-- user和-password选项使我们的工作更加轻松。这些选项要求用户名和密码,因为所有的dbms都对用户的密码进行了加密,而我们得到的是散列,所以我们仍然需要使用密码破解程序来破解它们。如果SQLMap请求执行字典攻击时您回答了Yes,那么现在您就可能知道一些用户的密码。

我们还使用--sql-shell选项获取一个shell,从这个shell可以向数据库发送SQL查询。当然,这不是一个真正的shell,只是SQLMap通过SQLi发送我们编写的命令并返回这些查询的结果。

译者注: 一般一个完整字母前面是两个杠(--),单个字母前面是一个杠(-)。

更多资料

SQLMap还可以在POST请求中注入输入变量。要做到这一点,我们只需要添加—data选项,后面跟着引号中的POST数据,例如:—data“username=test&password=test”。

有时,为了访问应用程序存在sql注入的URL,我们需要在应用程序中进行身份验证。如果发生这种情况,我们可以使--cookie选项:--cookie“PHPSESSID=ckleiuvrv60fs012hlj72eeh37”将有效的会话cookie传递给SQLMap。这对于测试cookie值中的注入也很有用。

这个工具的另一个有趣的特性是,除了它可以为我们带来一个SQL shell,在其中我们可以发出SQL查询之外,更有趣的是,我们还可以使用os-shell在数据库服务器中获得命令执行(这在注入Microsoft SQL server时特别有用)。要查看SQLMap的所有选项和特性,可以运行SQLMa –help。

另请参阅

Kali Linux还包括其他一些工具,它们能够检测和利用SQL注入漏洞,这些工具可能对使用SQLMap或与SQLMap联合使用时很有用:

  • Sqlninja:一个非常流行的工具,专门用于MS SQL Server的开发。
  • Bbqsql:用Python编写的盲SQLi框架。
  • Jsql:具有完全自动化GUI的基于java的开发工具;我们只需要引入URL并单击一个按钮。
  • Metasploit:包括用于不同dbms的各种SQL注入模块。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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