不安全的直接对象引用

当开发人员公开对内部实现对象(例如文件、目录或数据库密钥)的引用而没有任何验证机制时,可能会发生直接对象引用,这允许攻击者操纵这些引用来访问未经授权的数据。

让我们借助简单的图表了解此漏洞的威胁代理、攻击媒介、安全漏洞、技术影响和业务影响。

insecure direct obj ref

示例

该应用程序在访问帐户信息的 SQL 调用中使用了未经验证的数据。

String sqlquery = "SELECT * FROM useraccounts WHERE account = !";
PreparedStatement st = connection.prepareStatement(sqlquery, ??);
st.setString( 1, request.getParameter("acct"));
ResultSet results = st.executeQuery( );

攻击者修改浏览器中的查询参数以指向管理员。

http://webapp.com/app/accountInfo?acct=admin

动手操作

步骤 1 − 登录 Webgoat 并导航至访问控制缺陷部分。目标是通过导航至其所在的路径来检索 tomcat-users.xml。下面是该场景的快照。

1. insecure direct obj ref1

步骤 2 − 文件的路径显示在"当前目录是"字段中 - C:\Users\userName$\.extract\webapps\WebGoat\lesson_plans\en,我们还知道 tomcat-users.xml 文件保存在 C:\xampp omcat\conf 下

步骤 3 − 我们需要遍历出当前目录并从 C:\ Drive 导航。我们可以通过使用 Burp Suite 拦截流量来执行相同操作。

2 insecure direct obj ref

步骤 4 −如果尝试成功,则会显示 tomcat-users.xml 并显示消息"恭喜。您已成功完成本课程。"

2 insecure direct obj ref

预防机制

开发人员可以使用以下资源/要点作为指南,以防止在开发阶段本身出现不安全的直接对象引用。

  • 开发人员应仅使用一个用户或会话进行间接对象引用。

  • 还建议在使用来自不受信任来源的直接对象引用之前检查访问权限。