不安全的直接对象引用

不安全的直接对象引用


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

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

不安全的直接对象引用

例子

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

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

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

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

动手

步骤 1 – 登录 Webgoat 并导航到访问控制缺陷部分。目标是通过导航到它所在的路径来检索 tomcat-users.xml。下面是场景截图。

1.不安全的直接obj ref1

第 2 步– 文件的路径显示在“当前目录是”字段中 – C:\Users\userName$\.extract\webapps\WebGoat\lesson_plans\en 我们也知道 tomcat-users.xml 文件是保存在 C:\xampp\tomcat\conf

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

2 不安全的直接 obj ref

第 4 步– 如果尝试成功,它会显示 tomcat-users.xml 并显示消息“恭喜。您已成功完成本课。”

2 不安全的直接 obj ref

预防机制

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

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

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁