1.Gitlab Cookie 反序列化漏洞研究
Gitlab Cookie 反序列化漏洞研究
在最近的源码hackthebox挑战中,我遇到了一台名为Laboratory的泄漏靶机,利用Gitlab的源码任意文件读取漏洞进行getshell的过程让我感到好奇。尽管网上的泄漏walkthrough大多跳过了细节,直接展示如何利用MSF工具,源码我决定深入研究这个漏洞的泄漏网址导航目录源码原理。
漏洞起源于Hackone的源码一份报告,由William Bowling (vakzz)提交,泄漏指出Gitlab的源码UploadsRewriter函数存在文件名验证漏洞,可导致任意文件读取。泄漏最初漏洞评估价值美元,源码但随后作者gitlab-org在gitlab.com上发现,泄漏当cookies_serializer默认设置为:hybrid时,源码做个AV软件源码可能导致远程命令执行漏洞。泄漏他提供了一个生成payload的源码Ruby代码示例,这让我初时有些困惑。
在尝试执行这段代码时,我遇到了问题,因为对Ruby不熟悉。linux内核4.0 源码尽管在Kali的irb中进行了尝试,却遭遇了错误。作者通过发送GET数据包成功执行了命令,这个过程在gitlab重新评估后价值提升到了美元。然而,我起初并不明白为何仅凭一个任意文件读取漏洞就能getshell,mvc 单点登录源码于是查找了作者的PDF文件和相关文章来理解。
PDF中提到,Gitlab的session cookie由客户端控制,当接收到cookie时,Rails会通过secret_token验证其合法性。恶意用户可以伪造包含序列化对象的淘金农场php源码cookie,只要能伪造签名,就能在服务器上执行任意代码。关键在于如何序列化,作者建议使用Ruby的erb模块构造。
在找不到相关文章的情况下,我转向了Metasploit框架的源码,通过multi/http/gitlab_file_read_rce模块进行攻击。源码分析中,我看到了exploit函数和构建反弹shell的过程,通过层层解码,最终提取出可以生成payload的Ruby脚本。
为了方便日后使用,我编写了简化版的Ruby脚本,并成功测试了生成的Cookie,验证了命令执行。接着,我尝试将Ruby脚本转化为Python,但过程中遇到了编码问题,经过多次修改和调试,最终找到了将Ruby序列化后的payload转换到Python的方法,成功实现了反弹shell。
这个过程耗时两天两夜,主要问题在于我的技术水平不够。通过这次研究,我对Gitlab Cookie的反序列化漏洞有了更深的理解。