Web安全挑战与漏洞利用分析
Java Web应用中的JWT绕过与目录遍历漏洞利用
在一次CTF竞赛中,我们遇到了一个基于Java的Web应用。通过注册用户并登录,发现Cookie中存在JWT编码。
尝试将用户名从"Admin"改为"admin"后重新编码,但后台提示未经授权。进一步检查错误信息,发现服务器使用的是Apache Tomcat 9.0.108版本。
根据已知的CVE-2025-55752漏洞,可以通过构造特定请求来读取web.xml文件:
/download?path=%2fWEB-INF%2fweb.xml
获取到的配置文件显示了多个Servlet定义,其中BackUpServlet类暴露了逻辑漏洞。反编译后发现validateAdmin方法存在严重问题:
public static boolean validateUser(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
if (cookies == null) {
return true;
}
// ...省略其他代码...
}
如果未携带任何Cookie,则直接返回true,从而可以访问/admin路径下的接口。
接下来上传包含JspServlet配置的恶意web.xml文件覆盖原文件,并通过rename接口完成替换:
// 关键代码片段
boolean success = setResourceDir(".");
if (success) {
uploadFile("malicious_web.xml", MALICIOUS_WEB_CONTENT);
renameFile("malicious_web.xml", "WEB-INF/web.xml");
}
等待Tomcat重载配置后,部署JSP Webshell执行命令获取Flag。
PHP应用中的序列化绕过与文件读取限制突破
另一个题目提供了简单的登录界面,尝试弱口令和SQL注入均无效。通过枚举目录找到flag.php等资源。
查看Cookie内容,Base64解码得到序列化字符串。伪造管理员身份后成功进入后台管理页面。
尝试读取文件时遇到限制,不能直接访问.php文件。通过在目标路径后添加斜杠绕过限制:
http://example.com/flag.php/
最终获得Flag。
文件上传竞争条件漏洞利用
此题允许注册用户,但只有"admin"角色可上传文件。通过修改Cookie中is_admin字段为1后以管理员身份登录。
系统对上传文件进行内容安全检测,违规文件会被删除。推测需要利用文件上传的竞争条件漏洞。
首先上传.htaccess文件禁用PHP限制,然后通过多线程并发上传test.php文件同时请求/tmp/test.php路径:
def exploit():
with ThreadPoolExecutor() as executor:
executor.submit(upload_htaccess)
for _ in range(30):
executor.submit(upload_payload)
for _ in range(20):
executor.submit(trigger_payload)
if check_shell_availability():
interact_with_shell()
成功写入交互式Shell后,执行命令读取Flag。