XVWA Insecure Direct Object Reference、Missing Functional Level Access Control

0x00 Broken Access Control

在这里插入图片描述
2017版中,Insecure Direct Object ReferenceMissing Functional Level Access Control就被归到了Broken Access Control中了。

这里直接去看的owasp top ten,就将这两个结合起来一起学习了。

漏洞描述
  • 通过修改URL、内部应用程序状态或HTML 页面绕过访问控制检查,或简单地使用自定义的API 攻击工具。
  • 允许将主键更改为其他用户的记录,例如查看或编辑他人的帐户。
  • 特权提升。在不登录的情况下假扮用户,或以用户身份登录时充当管理员。
  • 元数据操作,如重放或篡改JWT 访问控制令牌,或作以提升权限的cookie 或隐藏字段。
  • CORS配置错误允许未授权的API访问。
  • 以未通过身份验证的用户身份强制浏览的通过身份验证时才能看到的页面、或作为标准用户访问具有相关权限的页面、或API没有对POST、PUT和DELETE强制执行访问控制。
修复建议

这个只是一个最简单的例子,idor还有其他的漏洞,修复参考owasp top ten的吧

  • 除公有资源外,默认情况下拒绝访问。
  • 使用一次性的访问控制机制,并在整个应用程序中不断重用它们,包括最小化CORS使用。
  • 建立访问控制模型以强制执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录。
  • 域访问控制对每个应用程序都是唯一的,但业务限制要求应由域模型强制执行。
  • 禁用Web服务器目录列表,并确保文件元数据(如:git)不存在于Web的根目录中。
  • 记录失败的访问控制,并在适当时向管理员告警(如:重复故障)。
  • 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害。
  • 当用户注销后,服务器上的JWT令牌应失效。

0x01 Insecure Direct Object Reference

This vulnerability happens when the application exposes direct objects to an internal resource, such as files, directory, keys etc. Such mechanisms could lead an attacker to predict objects that would refer to unauthorized resources as well.

IDOR,有很大一部分越权漏洞属于IDOR造成的,

看源码

include('../../config.php');
if($conn1){
    $sql= 'select itemid from caffaine LIMIT 5';
    $stmt = $conn1->prepare($sql);
    $stmt->execute();
    while($rows = $stmt->fetch(PDO::FETCH_NUM)){
        echo "<option value=\"".$rows[0]."\">".$rows[0]."</option>";
    }
}

echo "</select><br>";
echo "<div align=\"right\"> <button class=\"btn btn-default\" type=\"submit\">Submit</button></div>";

echo "</div> </form> </p>";
echo "</div>";
$item = isset($_GET['item']) ? $_GET['item'] : '';
$sql = "select itemcode,itemname,itemdisplay,itemdesc,categ,price from caffaine where itemid = :itemid";
$stmt = $conn1->prepare($sql);
$stmt->bindParam(':itemid',$item);
$stmt->execute();

拿了一部分出来,这个和数据库操作有关,但是没有注入漏洞,第一条语句,只取了5个元素,没有传参。
第二条语句,虽然有传参,但是用的pdo做的预处理,所以不存在注入漏洞。

漏洞利用

在这里插入图片描述
这里只能选5个,但是在源码中并没有限制item的范围,通过自行更换item6,就拿到了未授权的资源访问。
在这里插入图片描述


0x02 Missing Functional Level Access Control

This vulnerability exists when the application has insufficient access rights protection. Application sometimes hides sensitive actions from user roles but forget to ensure the access rights if the user tries to predict/use specific parameter to trigger those action. This issue could lead to much more complex and affect the business logic as well.

话不多说,直接看源码

$item = isset($_GET['item']) ? $_GET['item'] : '';
$action = isset($_GET['action']) ? $_GET['action'] : '';
if($action=='view'){
    $sql = "select itemcode,itemname,itemdisplay,itemdesc,categ,price from caffaine where itemid = :itemid";
    $stmt = $conn1->prepare($sql);
    $stmt->bindParam(':itemid',$item);
    $stmt->execute();
    echo "<table>";

    while($rows = $stmt->fetch(PDO::FETCH_NUM)){
        echo "<tr><td><b>Item Code : </b>".htmlspecialchars($rows[0])."</td><td rowspan=5>&nbsp;&nbsp;</td><td rowspan=5 valign=\"top\" align=\"justify\"><b>Description : </b>".htmlspecialchars($rows[3])."</td></tr>";
        echo "<tr><td><b>Item Name : </b>".htmlspecialchars($rows[1])."</td></tr>";
        echo "<td><img src='".htmlspecialchars($rows[2])."' height=130 weight=20/></td>";
        echo "<tr><td><b>Category : </b>".htmlspecialchars($rows[4])."</td></tr>";
        echo "<tr><td><b>Price : </b>".htmlspecialchars($rows[5])."$</td></tr>";
        echo "<tr><td colspan=3><hr></td></tr>";
    }
    echo "</table>";
}else if($action=='delete'){
    $sql="delete from caffaine where itemid=:itemid";
    $stmt=$conn1->prepare($sql);
    $stmt->bindParam(':itemid',$item);
    $stmt->execute();
    if($stmt->rowCount()){
        echo "Item deleted successfully.";
    }
}

和上一个差不多,多了view操作和delete操作的提交。

漏洞利用

在这里插入图片描述
先还没有注意,这里是需要登陆的,再去看下源码吧。

if($_SESSION['user'] == 'admin'){
    echo "<button class='btn btn-default' type='submit' name='action' value='delete'>Delete</button></div>";
}else{
    echo "</div>";
}

这里可以看到只有登陆的用户为admin时,才提供了delete选项。。。

这里应该就是漏洞利用点了。

在这里插入图片描述
愿意选择一个查看,此时来观察urlxvwa/vulnerabilities/missfunc/?item=4&action=view,后面有一个view,将其改成delete
在这里插入图片描述
即使没有登陆也可以删除成功,再来查看一次item=4时,已经没有任何内容了。

发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105344112