提交 52f744d7 编写于 作者: W wizardforcel

6.8

上级 31cbef8d
......@@ -609,3 +609,98 @@ UNION 查询语句用于连接两个拥有相同列数量的查询,通过注
一旦我们知道了数据库和表的名称,我们在这个表中查询所有列,来了解我们需要查找哪一列,它的结果是`user``password`
最后,我们注入查询来请求`dvwa`数据库的`users`表中的所有用户名和密码。
## 6.8 使用 SQLMap 发现和利用 SQL 注入
我们已经在上一个秘籍汇总看到,利用 SQL 注入是个繁琐的步骤。SQLMap Hige命令行工具,包含在 Kali 中,可以帮我们自动化检测和利用 SQL 注入。它带有多种技巧,并支持多种数据库。
这个秘籍中,我们会使用 SQLMap 来检测和利用 SQL 注入漏洞,并用它获得应用的用户名和密码。
### 操作步骤
1. 访问` http://192.168.56.102/mutillidae`
2. 在 Mutillidae 的菜单中,访问`OWASP Top 10 | A1 – SQL Injection | SQLi Extract Data | User Info`
3. 尝试任何用户名和密码,例如`user``password`之后点击`View Account Details`
4. 登录会失败,但是我们对 URL 更感兴趣。访问地址栏并将完整的 URL 复制到剪贴板。
5. 现在,打开终端窗口,输入下列命令:
```
sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=user&password=password&user-info-php-submitbutton=View+Account+Details" -p username --current-user --currentdb
```
你可以注意到,`-u`参数就是所复制的 URL 的值。`-p`告诉 SQLMap 我们打算在用户名参数中查找注入。一旦漏洞被利用,我们想让它获得当前数据库用户名和数据库的名称。我们只打算获得这两个值,因为我们只想判断这个 URL 的`username`参数是否存在 SQL 注入。
![](img/6-8-1.jpg)
6. 一旦 SQLMap 检测到应用所使用的 DBMS,它会询问我们是否跳过检测其它 DBMS 的步骤,以及是否打算包含所有特定系统的测试。即使它们在当前的配置等级和风险之外。这里,我们回答`Ues`来跳过其它系统,以及`No`来包含所有测试。
7. 一旦我们指定的参数中发现了漏洞,SQLMap 会询问我们是否打算测试其它参数,我们回答`No`,之后观察结果:
![](img/6-8-2.jpg)
8. 如果我们打开获得用户名和密码,类似于我们在上一个秘籍那样,我们需要知道含有这些信息的表名称。在终端中执行下列代码:
```
sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=test&password=test&user-info-php-submitbutton=View+Account+Details" -p username -D nowasp --tables
```
![](img/6-8-3.jpg)
SQLMap 会保存所执行的注入日志,所以第二次攻击会花费更少的时间。你可以看到,我们指定了要提取信息(nowasp)的数据库,并告诉 SQLMap 我们想获取这个数据库的表名称列表。
9. `accounts`表使含有我们想要的信息的表之一。让我们转储内容:
```
sqlmap -u "http://192.168.56.102/mutillidae/index.php?page=userinfo.php&username=test&password=test&user-info-php-submitbutton=View+Account+Details" -p username -D nowasp -T accounts --dump
```
![](img/6-8-4.jpg)
我们现在拥有完整的用户表,并且我们可以看到,这里密码并没有加密,所以我们可以直接使用它们。
### 工作原理
SQLMap 会使用 SQL 注入字符串,对给定 URL 和数据的输入进行模糊测试,或者只针对`-p`选项中的特定目标,并且解释其响应来发现是否存在漏洞。不要模糊测试所有输入,最好使用 SQLMap 来利用我们已知存在的注入,并始终尝试缩小搜索过程,通过提供所有可用的信息,例如漏洞参数、DBMS 类型,以及其它。在所有可能性下寻找注入会花费大量时间,并在网络中产生非常大的流量。
这个秘籍中,我们已经知道了用户名参数存在注入漏洞(因为我们使用了 Mutillidae 的注入测试页面)。在第一个攻击中,我们只希望确人注入存在,并询问一些非常基本的信息:用户名(`--curent-user`)和数据库名称(`--current-db`)。
在第二个攻击中,我们使用`-D`选项,以及前一次攻击者获得的名称指定希望查询的数据库,我们也使用`--tables`询问了所包含的表名称列表。
知道我们希望获得哪个表(`-T accounts`)之后,我们告诉 SQLMap 使用`--dump`转储它的内容。
### 更多
SQLMap 也能够注入 POST 参数中的输入变量。我们只需要添加`--data`选项并附带 POST 数据,例如:
```
--data "username=test&password=test"
```
有时候,我们需要在一些应用中获得验证,以便能够访问应用的漏洞 URL。如果是这样,我么可以传递有效的会话 COokie给 SQLMap, 使用`--cookie`选项:
```
--cookie "PHPSESSID=ckleiuvrv60fs012hlj72eeh37"
```
这在测试Cookie值的注入时也非常有用。
另一个有趣的特性是,使用` --sql-shell`选项,它可以为我们提供 SQL shell,其中我们可以执行 SQL 查询,就像我们直接连接到数据库那样。或更有趣的是,我们可以使用` --osshell`在数据库服务器中执行系统命令(在注入 MSSQL 服务器时这特别有用)。
为了了解 SQLMap 拥有的所有选项和特性,你可以执行:
```
sqlmap --help
```
### 另见
Kali 包含了其它用于检测和利用 SQL 注入漏洞的工具,它们能够用于代替或配合 SQLMap:
+ sqlninja:非常流行的工具,为利用 MSSQL 服务器而设计
+ Bbqsql:Python 编写的 SQL 盲注狂阿基
+ jsql:基于 Java 的工具,带有完全自动化的 GUI我们只需要输入 URL 并按下按钮。
+ Metasploit:它包含不同 DBMS 的多种 SQL 注入模块。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册