跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

0x00 前言

本文记录从零开始搭建津布拉漏洞调试环境的细节。

0x01 简介

本文将要介绍以下内容:

津布拉服务器开启调试模式

本地使用想法进行远程调试

常用知识

0x02 Zimbra服务器开启调试模式

相关资料:

https://github。com/Zimbra-Community/Zimbra-tools/blob/master/Java-debug-Zimbra-intellij-ide。医学博士

详细步骤如下:

1.停止Zimbra服务

苏津布拉

zm控制停止

2.开启调试模式

苏联(苏联的缩写)

CP/opt/zimbra/libexec/zmmailboxdmgr/opt/zimbra/libexec/zmmailboxdmgr。老的

CP/opt/zimbra/lib exec/zmmailboxdmgr。无限制/opt/zimbra/lib exec/zmmailboxdmgr

此处先备份zmmailboxdmgr,再使用zmmailboxdmgr。无限制替换zmmailboxdmgr

3.添加调试信息

苏津布拉

zmlocalconfig-e邮箱d _ Java _ options=' ` zmlocalconfig-m nokey邮箱d _ Java _ options `- Xdebug-xno agent-DJ ava。编译器=无-代理库:jdwp=transport=dt _ socket,server=y,suspend=n,address=*:8000 '

注:

也可以直接修改/opt/zimbra/conf/local config。可扩展标记语言中的邮箱d _ java _选项属性值

4.关闭防火墙

sudo ufw禁用

5.重启服务

zm控制开始

0x03 本地使用IDEA进行远程调试

1.下载jar文件

本地使用想法进行远程调试时,本地和远程的代码需要保持一致,也就是说,我们需要拿到津布拉相关的冲突文件

津布拉文件位置:

/opt/zimbra/common/jetty _ home/lib/

/opt/zimbra/common/jetty _ home/lib/Apache-JSP/

2.批量导入jar文件

新建Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)工程,依次选择文件-项目结构.在图书馆下选择新项目库-Java,设置为c:\zimbrajar\

3.添加断点

在外部库-津布拉贾尔下面打开。班级文件,在合适的位置添加断点

4.设置远程调试参数

顶部菜单栏选择添加配置.在弹出的页面中选择远程虚拟机(Java Virtual Machine的缩写)调试,填入远程调试参数,参数示例:

-代理库:jdwp=transport=dt _ socket,server=y,suspend=n,address=8000

使用的JDK选择JDK 5-8

5.开启Debug模式

回到想法主页面,选择刚才的配置文件,点击调试图标(快捷键Shift F9)

如果远程调试执行成功,断点图标会发生变化,增加一个对号

此时,控制台页面显示如下:

已连接到目标虚拟机,地址:":",传输:"套接字"

0x04 常用知识

津布拉使用码头框架作为网容器

用户在访问jsp文件时,服务器先将虚拟机(Java虚拟机的缩写)不认识的JSP文件解析成Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)文件,保存路径为:/opt/zimbra/jetty _ base/work/zimbra/JSP/org/Apache/JSP/

每个jsp文件被成功访问后,都会注册一个JspServletWrapper实例,我们可以通过调试器查看请求变量获得所有已注册的JspServletWrapper实例,也可以通过反射的方式以jsp文件的形式进行枚举

jsp文件代码示例:

%@个页面导入='java.lang.reflect.Field' %

%@个页面导入=' Java。util。并发。并发哈希表' %

%@个页面导入=' Java . util . * ' ' %

%

字段f=request.getClass().getDeclaredField(' _ scope ');

f。设置可访问性(true);

Object obj1=f.get(请求);

f=obj1.getClass().getDeclaredField(' _ servlet ');

f。设置可访问性(true);

object obj 2=f . get(obj 1);

f=obj2.getClass().getSuperclass().getDeclaredField(' rctxt ');

f。设置可访问性(true);

object obj 3=f . get(obj 2);

f=obj3.getClass().getDeclaredField(' JSP ');

f。设置可访问性(true);

并发hashmap obj 4=(并发hashmap)f . get(obj 3);

枚举enu=obj 4。keys();

while (enu.hasMoreElements()) {

out.println(enu.nextElement()'

');

}

%

整个反射的逻辑来自于跟踪调试的结果,实现逻辑不唯一,枚举JspServletWrapper实例用到了并发哈希表枚举

0x05 小结

在我们搭建好津布拉漏洞调试环境后,接下来就可以着手对漏洞和码头框架进行研究学习。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。