首页 存档 技术 查看内容

GitHub企业版SQL注入分析

2018-3-30 13:00 |来自: 互联网 289 0

摘要: GitHub企业版是GitHub.com的本地版,几乎提供了GitHub的所有功能。通过GitHub的网站可以下到使用45天的VM:链接: enterprise.github.com。开启成功后的界面是这样的: 环境 开始前,我们用nmap意思意思,扫描到 ...

GitHub企业版是GitHub.com的本地版,几乎提供了GitHub的所有功能。通过GitHub的网站可以下到使用45天的VM:链接: enterprise.github.com。开启成功后的界面是这样的:


环境

开始前,我们用nmap意思意思,扫描到端口情况如下:

具体如下:

22/tcp和9418/tcp 这两个端口类似haproxy,会连接到一个后台服务babeld上

80/tcp和443/tcp 是GitHub的服务

122/tcp 是SSH服务

8443/tcp 是GitHub的管理控制台

顺便提下,GitHub的管理控制端需要账号密码登录。有了账号密码,就能通过ssh key登录到VM的122端口

SSH登陆了上虚拟机后。可以看到目录结构如下图:

进入/data/目录,查看源代码,发现代码全被加密了,日:

GitHub使用了一个库来加密源代码,如果你google查找ruby_concealer.so 就能找到一个关键脚本:https://gist.github.com/geoff-codes/02d1e45912253e9ac183

看起来,他只是简单的吧ruby_concealer.so中的rb_f_eval换成rb_f_puts,然后就可以工作了.但是,我们接下来用IDA Pro进一步看看他的原理:

可以看到,他是使用Zlib::Inflate::inflate来对数据进行解压,如果对其进行异或运算,就会出现一下提示:

这样,我们可以很容易将其解密:


代码分析

解码所有的源代码后,我们就可以开始代码审计工作了:

代码是用Ruby写的

/data/github/ 看起来是80和443上跑的web应用,并且看起来是github.com, gist.github.com 和api.github.com 这三个站点的代码

/data/render/ 看起来是render.githubusercontent.com上的代码

/data/enterprise-manage/ 看起来是8443上跑的程序



漏洞

SQL注入是在GitHub企业版的PreReceiveHookTarge模板中找到的。

问题根源是在/data/github/current/app/model/pre_receive_hook_target.rb第45行

这里使用到的是内置的ORM(在Rails中叫做ActiveRecored),尽管Rails有针对SQL注入进行防御,但是,如果大量使用ActiveRecored的话,也可能出现SQL注入。

当然,你可以通过http://rails-sqli.org/网站来学习更多Rails中的SQL注入案例。这里,我们将order参数改成SQL注入的Payload。在/data/github/current/app/api/admin/pre_receive_hooks.rb的61行会调用到了sorted_by函数。

可以看到,params[:sort]被传入到scope.sorted_by中,因此,我们可以在params[:sort]中注入恶意代码。在测试前,我们需要用admin:pre_receive_hook账号通过API得到一个access_token,如下:

通过这个access_token,我们就能进一步触发漏洞。

注:本文为嘶吼编辑整理,如果转载请注明来源于嘶吼



本文转载于微信公众号: 嘶吼专业版(Pro4hou),更多微信文章请扫描关注公众号:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部