🐴代码托管平台渗透场景

这一章节会讲git、github、gitlab快速入门,以及利用github的持续集成平台部署扫描器,Gitlab相关的渗透场景和后利用,为后续讲CI/CD渗透场景打下基础。

Git简介

  • Git:版本控制工具

  • GitHub:git仓库、代码托管

  • GitLab:git带有界面的管理软件

安装Git

#Centos7
yum -y install git
 
#Centos8
dnf -y install git
 
#Ubuntu
sudo apt-get install git
 
#Windows
https://gitforwindows.org
 
#OSX
https://brew.sh/
  • Workspace: #工作区,就是你本地电脑,存放项目代码的地方

  • Index / Stage: #暂存区,用于临时存放你改动,事实上它就是一个文件保存即将在提交到文件列表信息

  • Repository: #仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote: #远程仓库

Git工作流程:

1. 在工作目录中添加、修改文件;

2. 将需要进行版本管理的文件放入暂存区域;

3. 将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

常用命令

新建代码库

当init初始化项目的时候,会在当前目录创建一个隐藏文件名为 .git

  • config,该文件包含你的仓库配置,比如远程的 url ,你的邮箱和用户名等。

  • description,显示仓库的描述

  • hooks,存放git提交的各个阶段文件,用于在git命令前后做检查或做些自定义动作

  • info,可以将不想被 git 管理的文件记录到 .gitignore 文件中。排除文件的意思是不想共享这个文件。例如你不想共享你的 IDE 自定义配置

  • HEAD,此文件永远存储当前位置指针,指向当前工作区的分支。

  • index,index也称为stage,是一个索引文件。当执行git add后,文件就会存入Git的对象objects里,并使用索引进行定位。

  • object,Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式,当你对同一个文件修改哪怕一行,git 都会使用全新的文件存储这个修改了的文件,放在了objects中。

配置

增加/删除文件

代码提交

分支

查看信息

远程同步

GitHub

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。

GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。其中不乏知名开源项目Spring、MyBatis、React、Vue等。

GitHub云扫描器

https://github.com/inbug-team/InCloud

InCloud已经为您定制好了八种针对网段和域名的不同场景的信息收集与漏洞扫描流程。

  • PortScan-AllPort 对单IP文件列表进行全端口扫描,输出可用Web服务标题。

  • PortScan-AllPort-Xray-Dirscan 对单IP文件列表进行全端口扫描,输出可用Web服务标题,对Web服务进行Xray爬虫爬取与漏洞扫描,对Web服务进行Ffuf目录递归扫描。

  • PortScan-Top1000 对单C段IP列表进行Top1000端口扫描,输出可用Web服务标题。

  • PortScan-Top1000-Xray 对单C段IP列表进行Top1000端口扫描,输出可用Web服务标题,对Web服务进行Xray爬虫爬取与漏洞扫描。

  • PortScan-Top1000-Dirscan 对单C段IP列表进行Top1000端口扫描,输出可用Web服务标题,对Web服务进行Ffuf目录递归扫描。

  • SubDomain-Portscan-Vulnscan 对域名进行子域名枚举与接口查询,对查询的子域名进行Top1000端口扫描,输出可用Web服务标题,对Web服务进行Nuclei漏洞扫描。

  • SubDomain-Portscan-Xray 对域名进行子域名枚举与接口查询,对查询的子域名进行Top1000端口扫描,输出可用Web服务标题,对Web服务进行Xray爬虫爬取与漏洞扫描。

  • SubDomain-Portscan-Dirscan 对域名进行子域名枚举与接口查询,对查询的子域名进行Top1000端口扫描,输出可用Web服务标题,对Web服务进行Ffuf目录递归扫描。

将项目Fork到自己的Github,选择端口扫描的分支

修改流程文件(.github/workflows/incloud.yaml)里的 git config --local user.email 与 git config --global user.name 改成自己的邮箱与自己的ID

修改input目录的扫描目标,使用action标签进行在线编译。

项目有些老,需要做些修改。

GitHub提供六小时的容器使用时长,扫描结束后,扫描结果会自动上传到自己fork的output文件夹下。

Github Actions

持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

基本概念

GitHub Actions 有一些自己的术语:

  1. workflow (工作流程):持续集成一次运行的过程,就是一个 workflow

  2. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务

  3. step(步骤):每个 job 由多个 step 构成,一步步完成

  4. action (动作):每个 step 可以依次执行一个或多个命令(action)

workflow 文件

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows目录。

workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml,比如foo.yml。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。

官方文档

workflow语法

GitHub 做了一个官方市场,可以搜索到他人提交的 actions。另外,还有一个 awesome actions 的仓库,也可以找到不少 action。

Gitlab简介

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。Gitlab是目前被广泛使用的基于git的开源代码管理平台 ,GitLab有两个软件发行版:开源社区版(CE)和企业版(EE)

Gitlab先简单介绍和使用,后续CI/CD安全会涉及到 Gitlab、Jenkins持续集成和持续部署安全的问题

安装

常用命令

工作区:电脑中能看到的目录就是工作区

版本库:工作区中隐藏了.git 是Git的版本库,其中最为重要的是stage的暂存区,以及自动创建的Master

禁止相关文件被上传,借鉴K8s

https://github.com/kubernetes/kubernetes/blob/master/.gitignore

数据恢复

安全问题

  • 互联网可直接访问,Gitlab可以任意注册

  • 老旧漏洞未打补丁

  • 硬编码密码、嵌入式密码

  • 是指将密码以明文方式直接写入代码中。这种处理方式极大地提高了攻击者命中密码的概率,使服务或系统暴露在风险中,容易造成严重损失

  • 中毒管道执行(PPE)

    • 将代码推送到存储分支,该分支通过管道自动部署到生产中

漏洞与后利用

GitLab版本检测

使用如下命令可查看当前GitLab的版本:

Web页面:

CVE-2021-22205

11.9以后的GitLab中,因为使用了图片处理工具ExifTool而受到漏洞CVE-2021-22204的影响,攻击者可以通过一个未授权的接口上传一张恶意构造的图片,进而在GitLab服务器上执行命令。

这章节我只介绍高危和在实战场景最常用的漏洞

未授权上传图片rce

影响版本

  • 11.9 <= Gitlab CE/EE < 13.8.8

  • 13.9 <= Gitlab CE/EE < 13.9.6

  • 13.10 <= Gitlab CE/EE < 13.10.3

get请求/users/sign_in获取csrf-token

对/uploads/user发post上传含有payload的图片

交互式shell

通过rce后拿到的默认是git用户,非root用户

gitlab命令行修改root用户密码

gitlab命令行修改用户为admin权限

将两个先前注册用户的权限升级为 admin、获取所有代码权限

利用工具:https://github.com/inspiringz/CVE-2021-22205

漏洞利用方式:

Usage:

总结

  • 了解Git、Github、Gitlab与基本操作

  • 利用Github Actions构建扫描器

  • Gitlab安全风险相关问题

  • Gitlab高危漏洞CVE-2021-22205

  • Gitlab漏洞后利用

Last updated

Was this helpful?