从 Git 文件夹泄露到远程代码执行

  • A+
所属分类:安全文章

点击上方蓝字“Ots安全”一起玩耍     -点击图文广告 = 打赏

不久前,我在 Bugcrowd 的一个私人项目中进行了 Bug Hunting 活动。像往常一样,狩猎过程从侦察和枚举开始。在 Blackbox 中对这个目标执行狩猎过程。不提供凭据,应用程序的首页只是一个登录页面。


一、GIT文件夹泄露

在枚举过程中,我发现了一个.git公开的目录。

从 Git 文件夹泄露到远程代码执行

通过使用这个工具,我能够从.git目录中下载应用程序的源代码。

https://github.com/arthaud/git-dumper/blob/master/requirements.txt

从 Git 文件夹泄露到远程代码执行

二、查找凭据

即使我得到了源代码,我也没有得到任何凭据。此外,此应用程序不易受到 SQL 注入攻击,因此无法绕过登录页面。


检查了几个文件夹后,我找到了一个database目录和一个名为 .sql 的 SQL 文件structure.sql

从 Git 文件夹泄露到远程代码执行

但是,在那些 SQL 文件中,只有一个默认用户无法破解 md5 哈希密码。


幸运的是,在应用程序中,目录列表已启用。当我打开database目录时,它显示了一些数据库文件,而不仅仅是.git目录中的一个文件。

从 Git 文件夹泄露到远程代码执行

我快速获取最新文件并检查其内容。上面有几个具有多个角色的用户。不幸的是,只有 2 个用户具有admin 角色,密码无法破解。


然后我移动到具有非管理员角色的用户,我能够破解一些非管理员用户,最后,我可以登录到应用程序。


三、绕过受限文件上传

该应用程序有一个名为Create Avatar. 通过该功能,用户可以通过选择多个选项来创建自定义头像。

从 Git 文件夹泄露到远程代码执行
从 Git 文件夹泄露到远程代码执行

选择图像选项后,浏览器将向服务器发送一个带有 2 个参数的请求,imgdata以及filename. 该imgdata参数包含我们从Create Avatar Feature生成的Base64 编码图像文件,它是将存储在服务器中的文件名。filename


应用程序已经实施了一些限制来防止用户上传恶意文件:

  1. 服务器只接受与文件.png, .jpg以及.gif扩展

  2. 服务器只接受图像数据类型的文件


如果我们尝试上传带有.php扩展名的文件,服务器将返回一条error消息。

从 Git 文件夹泄露到远程代码执行

但是,在查看我之前获得的源代码后,可以通过使用双扩展名轻松绕过此过滤器,例如:filename.png.php.


第二个过滤器被检查的内容imgdata,并且必须含有data:image/png,data:image/jpgdata:image/gif。这不是问题,因为即使内容类型设置为图像文件,我们仍然可以执行 PHP 文件。


对于初始测试,我尝试上传 PHP Info 函数:

data%3Aimage%2Fpng%3Bbase64%2CPD9waHAgcGhwaW5mbygpOyA/Pg%3d%3d


这PD9waHAgcGhwaW5mbygpOyA/Pg是一个 Base64 编码的<?php phpinfo(); ?>

从 Git 文件夹泄露到远程代码执行

并且文件上传成功!

从 Git 文件夹泄露到远程代码执行


通过使用相同的方式,我能够上传 PHP Shell 并成功执行操作系统命令。

从 Git 文件夹泄露到远程代码执行

从 Git 文件夹泄露到远程代码执行

本文始发于微信公众号(Ots安全):从 Git 文件夹泄露到远程代码执行

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: