Kali Liunx使用SQLMap查找和利用SQL注入

简介

开发SQL注入是一个非常辛苦的过程。SQLMap是 KaliLinux 中包含的命令行工具,它可以帮助我们使用多种技术对各种数据库自动检测和利用sQL注入。
在这小节中,我们将使用SQLMap来检测和利用SQL漏洞,并获取应用程序的用户名和密码。


实战演练


浏览http:/192.168.126.128/mutillidae,进入OWASP 2013 | A1- SQL injection(SQL) | SQLi-ExtractData | User Info(SQL):
1.尝试任何用户名和密码,例如user和 password,然后单击View Account Details。
2.登录将失败,但我们对URL感兴趣。转到地址栏,将完整的URL 复制到剪贴板。应该是这样的:

http://192.168.126.128/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details

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

sqlmap -u "http://192.168.26.128/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details"-p username --current-user --current-db --is-dba

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

4.一旦SQLMap检测到应用程序使用的 DBMS,它还会询问我们是否要跳过对其他DBMS 的测试,是否要包含对所检测的特定系统的所有测试,即使它们超出了当前级别和配置风险的范围。在这种情况下,我们回答Yes以跳过其他系公而回答No以则进行所有测试。
5.一旦我们指定的参数被发现30.PEG3q1注入的,SQLMap将询问我们是否需要测试其他参数。我们对这个问题的回答是No的,然后我们会看到结果:

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

sqlmap -u "http://192.168.56.11/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details"-D nowasp --tables


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

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

sqImap -u "http:/192.168.56.11/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details"-D nowasp -T accounts --dump


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

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

通常,这些也是操作系统用户,并将允许我们提升到操作系统权限或者可以登录其他网络主机。9.我们还可以得到一个shell,它允许我们直接向数据库发送SQL查询,如下所示:

原理剖析

SQLMap使用SQLi字符串测试给定URL和数据中的所有输入参数,或者只测试-p选项中的指定输入参数,并解释响应以发现是否存在漏洞。不过最好不要模糊测试所有输入参数,有哪位寻找所有可能性的注入可能会花费大量时间,并在网络中产生非常可疑的流量。一般使用SQLMap来利用我们已经知道存在的注入,并且试图缩小搜索过程。可以向它提供更多可用的信息,例如存在sqI注入的参数、DBMS 类型和其他信息。
在这个小节中,我们已经知道用户名参数容易受到SQL注入的攻击(因为我们使用了mutillidae的sQL注入测试页面)。在第一次攻击中,我们只想确定那里有一个注入,并要求提供一些非常基本的信息:用户名(--currant-user)、数据库名(--current-db)以及用户是否是管理员(--is-dba)。
在第二次攻击中,我们指定了要使用-D选项查询的数据库,以及从上次攻击中获得的名称,并要求提供它包含的表列表。知道我们想要得到什么表(-T accounts),我们告诉SQLMap用--dump读取它的内容。
因为从应用程序查询数据库的用户是DBA,所以它允许我们向数据库询问其他用户的信息,而SQLMap使用--users 和--passwords选项使我们的工作更加轻松。这些选项要求用户名和密码,因为所有的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在数据库服务器中获得命令执行(这在注入 MicrosoftsQL server时特别有用)。要查看SQLMap 的所有选项和特性,可以运行SQLMa -help。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值