1.Gitlab Cookie 反序列化漏洞研究
2.一文读懂Git工作流
3.husky 源码浅析
4.偷偷跟我学这个看源码的码剖小技巧,早日解放双手
5.Gitea源码分析(一)
6.Gitbase:使用 SQL 探索 Git 仓库 | Linux 中国
Gitlab Cookie 反序列化漏洞研究
在最近的码剖hackthebox挑战中,我遇到了一台名为Laboratory的码剖靶机,利用Gitlab的码剖任意文件读取漏洞进行getshell的过程让我感到好奇。尽管网上的码剖walkthrough大多跳过了细节,直接展示如何利用MSF工具,码剖动态404源码我决定深入研究这个漏洞的码剖原理。
漏洞起源于Hackone的码剖一份报告,由William Bowling (vakzz)提交,码剖指出Gitlab的码剖UploadsRewriter函数存在文件名验证漏洞,可导致任意文件读取。码剖最初漏洞评估价值美元,码剖但随后作者gitlab-org在gitlab.com上发现,码剖当cookies_serializer默认设置为:hybrid时,码剖可能导致远程命令执行漏洞。码剖他提供了一个生成payload的Ruby代码示例,这让我初时有些困惑。
在尝试执行这段代码时,我遇到了问题,因为对Ruby不熟悉。尽管在Kali的引用指标源码irb中进行了尝试,却遭遇了错误。作者通过发送GET数据包成功执行了命令,这个过程在gitlab重新评估后价值提升到了美元。然而,我起初并不明白为何仅凭一个任意文件读取漏洞就能getshell,于是查找了作者的PDF文件和相关文章来理解。
PDF中提到,Gitlab的session cookie由客户端控制,当接收到cookie时,Rails会通过secret_token验证其合法性。开发源码恶意用户可以伪造包含序列化对象的cookie,只要能伪造签名,就能在服务器上执行任意代码。关键在于如何序列化,作者建议使用Ruby的erb模块构造。
在找不到相关文章的情况下,我转向了Metasploit框架的源码,通过multi/mit和commit-msg。pre-commit在提交前运行,用于检查代码格式。编译ffmepg源码而commit-msg在提交后运行,用于确保提交消息符合特定标准。
要使用Git Hooks,首先确保在项目的根目录下的pom.xml文件中配置了相应的Maven插件,以便将自定义的钩子复制到Git的默认hooks目录,并将Maven安装作为目标。对于我们的用例,我们需要为commit-msg和pre-commit指定自定义钩子。
对于pre-commit钩子,我们通常会使用一个工具来格式化代码,建站通 源码如Prettier、Google Java Format、Eclipse JDT或Palantir Java Format。确保这些工具在项目中可用,并且为pre-commit配置一个自定义的钩子。这样,每次准备提交代码时,系统都会自动应用代码格式化规则,保证提交的代码保持一致性和可读性。
在项目目录中,我们通常会看到一个.git/hooks目录,其中包含了预定义和自定义的Git Hooks。通过这种方式,我们不仅能够确保代码格式统一,还能够通过commit-msg钩子来标准化提交消息的格式,如使用特定的关键词来描述更改的性质,从而使得历史记录更加清晰和易于理解。
为了确保Git Hooks的正确执行,需要给予这些脚本执行权限。在项目的.git/hooks目录下,您会发现预定义的钩子文件,如pre-commit和commit-msg,这些文件可以按照您的需求进行调整或替换。通过这样的设置,我们可以确保每次提交前后的操作都符合预期,从而提升代码质量和团队协作效率。
此外,对于自动版本控制,还可以利用commit-msg钩子的作者发布的npm包来实现语义版本控制。通过运行特定的命令,可以自动创建标签,连同更改日志和更新的版本号一起推送到存储库中,从而简化版本管理和发布流程。
综上所述,通过集成Git Hooks,可以显著提升Java Maven项目的代码质量和开发流程的效率。这包括代码格式化、提交消息标准化、自动版本控制等关键环节,从而为团队协作提供坚实的基础。