作为一名安全从业者,我被问过一百万次,我是否可以测试他们的学校系统帮助修改他们的成绩。
所以我测试下,尝试研究学校管理系统。我选择了最著名的免费学校管理系统之一,Gibbon。Gibbon 是一个免费和开源的学校管理系统,在世界各地都在使用。
CSRF
Gibbon,几乎所有功能都缺乏 csrf 保护。缺少 csrf 检查的一个非常有趣的功能是密码更改。
你可能认为这很容易受到 csrf 的影响,但事实并非如此。对此尝试 csrf 不起作用,只会将我们注销。
经过一番研究,我发现由于 HttpOnly 和 SameSite,csrf poc 无法正常工作。因此,即使它没有保护功能的 csrf 令牌,它仍然无法被简单的 csrf 方法利用。我发现有一个xss,它可以被绕过。
https://security.stackexchange.com/questions/121971/will-same-site-cookies-be-sufficient-protection-against-csrf-and-xss
跨站脚本
现在我们有了一个反射的 xss,我们可以将它与上面的 csrf 一起使用。
账户接管
在 xss 和 csrf 都可用的情况下,我现在可以通过更改用户 id 1 的密码来继续帐户接管。用户 id 1 通常是站点的超级管理员,因此接管他的帐户将使我们能够完全访问系统。
我想出了这个有效载荷
然后,我对有效负载进行 url 编码并将其添加到我的 xss 中。触发 xss 有效载荷后
我们可以看到我们的有效负载有效,它发出了一个 post 请求,将用户 id 1 的用户名和密码更改为 admin:Password123!。现在我们可以以管理员身份登录并拥有经过身份验证的访问权限。
认证的RCE
作为经过身份验证的用户,我们可以访问制作课程计划者的功能,并且可以在其中上传文件。
文件上传正确实现,它只允许某些文件扩展名,其中之一是 txt 文件。请记住此功能,因为我们稍后将使用它。
我发现的一个有趣的文件是 export.php。此端点只能由经过身份验证的用户访问。
在这里,您可以看到它接受一个参数 q,并在下面的 include 语句中使用它。它还检查 .. 所以它不容易受到 lfi 的影响。我发现,如果我们包含的文件中有php代码,即使我们包含的文件不是php,它也会被执行。结合上面的文件上传功能,我们可以实现一个rce。
所以我制作了一个名为 poc.txt 的 txt 文件,里面是一个简单的文件<?php system(whoami); ?>
,我上传了上面提到的功能。
文件名和目录显示在响应中。然后,我将它的路径传递给 export.php 中的 q 参数
http://localhost/gibon/export.php?q=/uploads/2022/01/poc_ckxsuyxkrm4pehkd.txt
.
测试访问了链接,然后……
漏洞已同步给官方修复完成
原文始发于微信公众号(军机故阁):Gibbon学校管理系统,比XSS到RCE