【THM】IDOR(不安全的直接对象引用)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/idor

本文相关内容:了解如何查找和利用web应用程序中的IDOR漏洞,该漏洞能够让我们尝试访问我们本不应该查看的数据。

image

概念

什么是IDOR

IDOR 代表不安全的直接对象引用,是访问控制漏洞的一种类型(IDOR漏洞属于授权逻辑型漏洞)。

当 Web 服务器接收用户提供的输入来检索对象(文件、数据、文档)时,如果对用户输入数据的信任度过高,且在服务器端没有进行验证来确认"所请求的对象"是否属于"有权请求它的用户",那么这种类型的漏洞就有可能会发生:使你能够访问不应该拥有的文件、数据、文档等对象。

答题

image

IDOR示例

假设你刚刚注册了一项在线服务,你现在想要更改你的个人资料信息,你点击的链接会进入 http://online-service.thm/profile?user_id=1305 页面,你可以看到你的个人资料信息。

你的好奇心占了上风,于是你尝试将 user _ id 值更改为1000( http://online-service.thm/profile?user_id=1000) ,令你惊讶的是,你现在可以看到ID为1000的用户的个人信息,你现在已经发现了 一个IDOR 漏洞!在理想情况下,网站上应该有一个检查机制,以确认某个ID相关的一些信息 只有当前所登录的 对应ID的用户才能访问。

答题

利用你上面学到的知识,点击查看TryHackMe网站在本页面所提供的站点按钮,通过发现和利用 IDOR 漏洞(修改url中的数值)来尝试接收一个标志。

image
image
image
image

在编码后的IDs中寻找IDOR漏洞

编码过的IDs(Encoded IDs)

将数据从一个页面传递到另一个页面,或者发布数据、查询字符串或 cookie的时候,网页开发人员通常会首先获取原始数据并对其进行编码处理,编码能确保接收到信息的web服务器能够理解收到的内容(不经过编码处理的数据 是web服务器理解不了的)。

编码技术通常使用a-z, A-Z, 0-9 and =字符进行填充,将二进制数据更改为 ASCII 字符串形式。Web 上最常用的编码技术是 base64编码,这种编辑方式通常很容易识别。

你可以使用像 https://www.base64decode.org/ 的网站来解码base64字符串,然后重新编辑数据并使用 https://www.base64encode.org/ 网站再重新进行一次base64编码,然后重新提交 Web 请求,看看响应消息中是否有变化。

下图是解码并重新编码过程的一个图形示例:

image

答题

image

在hash加密的IDs中寻找IDOR漏洞

哈希加密过的IDs(Hashed IDs)

处理哈希加密之后的ID 要比 处理编码后的ID稍微复杂一些,但它们可能遵循一种可预测的模式,例如整数值的hash版本,例如,如果使用 md5散列(哈希)算法,ID 号123将变成202cb962ac59075b964b07152d234b70 。

你可以将你发现的哈希值放入在线网站,如 https://crackstation.net/ (它有一个数十亿散列值结果的数据库) 看看能不能找到匹配的。

答题

image

在不可预测的ID中寻找IDOR漏洞

不可预测的IDs

如果使用上述方法无法检测到 ID,那么检测IDOR漏洞的一个很好的方法是创建两个帐户并交换它们的 ID 号。

如果你可以直接使用其他用户的 ID 号查看其他用户的内容,同时仍然在使用 "非此ID对应的帐户" 登录(或者根本没有登录) ,那么你就发现了一个IDOR 漏洞。

答题

image

IDOR漏洞一般位于哪里?

你所针对的易受攻击的点 可能并不总是你在地址栏中看到的东西,它可以是浏览器通过 AJAX 请求加载的内容,也可以是 JavaScript 文件中引用的内容。

有时,易受攻击的点可能有一个未引用的参数,这个参数在开发期间可能有用,并被推到生产环境中。

例如,你可能会注意到显示用户信息时调用的是/user/details (通过你的会话验证),但是,通过名为参数挖掘的攻击,也许能够发现一个名为user_id的未引用参数。
你可以使用该参数显示其他用户的信息,如/user/details?user_id=123

一个实际的IDOR示例

打开TryHackMe网站在该知识点页面 提供的链接。

首先你需要登录,为此,单击客户部分并创建一个帐户。登录后,单击“你的帐户”选项卡。

Your Account 部分允许你更改用户名、电子邮件地址和密码等信息。你会注意到用户名和电子邮件字段预先填写了你注册账户时填的信息。

我们先调查一下这些信息是如何预先填写的,如果打开浏览器开发人员工具(F12),选择网络(network)选项卡,然后刷新页面,你将看到一个对端点的调用,路径为/api/v1/customer?id={user_id}

此页面以 JSON 格式返回你的用户 ID、用户名和电子邮件地址。我们可以从路径中看到,所显示的用户信息来自查询字符串的 id 参数(见下图)

image

你可以通过将 id 更改为另一个用户的 id 来测试这个 id 参数是否存在 IDOR 漏洞,尝试选择 ID 为1和3的用户,然后回答下面的问题。

答题

建议使用火狐浏览器,使用TryHackMe网站提供的Attack Box即可。

选中有效记录修改并重新发送:

image

image

双击有效记录,进入对应的页面并直接修改url:

image

image

image

posted @ 2022-10-03 22:46  Hekeatsll  阅读(545)  评论(1编辑  收藏  举报