Good in study, attitude and health

  • Password Manager Pro漏洞调试环境搭建

    0x00 前言 本文记录从零开始搭建Password Manager Pro漏洞调试环境的细节。 0x01 简介 本文将要介绍以下内容: Password Manager Pro安装 Password Manager Pro漏洞调试环境配置 数据库连接 0x02 Password Manager Pro安装 1.下载 最新版下载地址:https://www.manageengine.com/products/passwordmanagerpro/download.html 旧版本下载地址:https://archives2.manageengine.com/passwordmanagerpro/ 最新版默认可免费试用30天,旧版本在使用时需要合法的License 注: 我在测试过程中,得出的结论是如果缺少合法的License,旧版本在使用时只能启动一次,第二次启动时会提示没有合法的License 2.安装 系统要求:https://www.manageengine.com/products/passwordmanagerpro/system-requirements.html 对于Windows系统,需要Win7以上的系统,Win7不支持 默认安装路径:C:\Program Files\ManageEngine\PMP 3.测试 安装成功后选择Start PMP Service 访问https://localhost:7272 默认登录用户名:admin 默认登录口令:admin 如下图 0x03 Password Manager Pro漏洞调试环境配置 本文以Windows环境为例 1.Password Manager Pro设置 查看服务启动后相关的进程,如下图 java进程的启动参数: "..\jre\bin\java" -Dcatalina.home=.....

  • Zimbra-SOAP-API开发指南5——邮件转发

    0x00 前言 本文将要继续扩充开源代码Zimbra_SOAP_API_Manage的功能,通过Zimbra SOAP API修改配置实现邮件转发,分享开发细节。 0x01 简介 本文将要介绍以下内容: 添加邮件转发 查看邮件转发的配置 查看文件夹共享的配置 开源代码 0x02 添加邮件转发 Zimbra支持将收到的邮件额外转发至另一邮箱,通过Web界面的操作方法如下: 登录邮箱后,依次选择Preferences->Mail,如下图 设置转发邮箱后,点击Save 如果想要转发多个邮箱,可以使用,进行分割,同时转发至两个邮箱的示例:test1@test.com,test2@test.com 接下来,通过抓包的方式分析实现流程,进而使用程序实现这部分功能 抓包获得的soap格式示例: <soap:Body> <BatchRequest xmlns="urn:zimbra" onerror="stop"> <ModifyPrefsRequest xmlns="urn:zimbraAccount" requestId="0"> <pref name="zimbraPrefMailForwardingAddress">test1@test.com</pref> </ModifyPrefsRequest> </BatchRequest> </soap:Body> 实现代码示例: def addforward_request(uri,token): print("[*] Input the mailbox to forward:") print(" Eg :test1@test.com,test2@@test.com") mailbox = input("[>]: ") request_body="""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">...

  • Zimbra-SOAP-API开发指南4——邮件导出和文件夹共享

    0x00 前言 本文将要继续扩充开源代码Zimbra_SOAP_API_Manage的功能,实现邮件导出和文件夹共享,分享开发细节。 0x01 简介 本文将要介绍以下内容: 邮件导出 文件夹共享 开源代码 0x02 邮件导出 Zimbra支持导出当前邮箱的所有邮件,通过Web界面的操作方法如下: 登录邮箱后,依次选择Preferences->Import/Export,如下图 接下来,通过抓包的方式分析实现流程,进而使用程序实现这部分功能 1.默认配置导出邮件 默认配置下,会导出所有邮件,以压缩包的形式保存 访问URL示例: https://192.168.1.1/home/admin%40test.com/?fmt=tgz&filename=All-2022-07-27-181056&emptyname=No+Data+to+Export&charset=UTF-8&callback=ZmImportExportController.exportErrorCallback__export1 参数解析: admin%40test.com为邮箱用户,可以用~替代 filename=All-2022-07-27-181056为存在记录时保存的文件名,2022-07-27-181056对应的时间格式为年-月-日-时分秒,时间为带时区的时间,需要计算时差 emptyname=No+Data+to+Export为空记录时保存的文件名 在程序实现上,需要同Web操作的格式保持一致,代码细节: (1)构造保存的文件名 from time import localtime, strftime exporttime = strftime("%Y-%m-%d-%H%M%S", localtime()) filename = "All-" + str(exporttime) print(filename) (2)保存文件 保存文件时使用binary写入 with open(path, 'wb+') as file_object: file_object.write(r.content) 实现代码示例: def exportmailall_request(uri,token,mailbox):...

  • Java利用技巧——AntSword-JSP-Template的优化

    0x00 前言 在之前的文章《Java利用技巧——通过反射实现webshell编译文件的自删除》曾介绍了通过反射实现AntSword-JSP-Template的方法。对于AntSword-JSP-Template中的shell.jsp,访问后会额外生成文件shell_jsp$U.class。《Java利用技巧——通过反射实现webshell编译文件的自删除》中的方法,访问后会额外生成文件shell_jsp$1.class。 在某些特殊环境下,需要避免额外生成.class文件。本文将以Zimbra环境为例,介绍实现方法,开源代码,记录细节。 0x01 简介 本文将要介绍以下内容: 实现思路 实现代码 0x02 实现思路 基于《Java利用技巧——通过反射实现webshell编译文件的自删除》中的方法,访问后会额外生成文件shell_jsp$1.class,这里可以通过构造器避免额外生成.class文件。 在具体使用过程中,需要注意如下问题: (1)反射机制中的构造器 正常调用的代码: str=new String(StringBuffer); 通过反射实现的代码: Constructor constructor=String.class.getConstructor(StringBuffer.class); String str=(String)constructor.newInstance(StringBuffer); (2)选择合适的defineClass()方法 在ClassLoader类中,defineClass()方法有多个重载,可以选择一个可用的重载 本文选择defineClass(byte[] b, int off, int len) (3)SecureClassLoader 使用构造器时,应使用SecureClassLoader,而不是ClassLoader 示例代码: Constructor c = SecureClassLoader.class.getDeclaredConstructor(ClassLoader.class); 0x03 实现代码 为了方便比较,这里给出每种实现方法的代码: (1)test1.jsp 来自AntSword-JSP-Template中的shell.jsp,代码如下: <%! class U extends ClassLoader { U(ClassLoader c)...

  • Sophos XG防火墙身份验证绕过漏洞(CVE-2022-1040)利用分析

    0x00 前言 CVE-2022-1040是一个Sophos XG防火墙的身份验证绕过漏洞,漏洞细节可参考《CVE-2022-1040 Sophos XG Firewall Authentication bypass》,本文仅在此文章的基础上补全文中未提到的技术细节。 0x01 简介 本文将要介绍以下内容: 本地恢复带有漏洞的调试环境 OpCode的寻找方法 WAN和VPN区域的利用思路 开启login disclaimer切断利用链 0x02 本地恢复带有漏洞的调试环境 在本地搭建漏洞环境时,如果自动更新了补丁,可通过以下方式恢复成带有漏洞的调试环境: 编辑文件/usr/share/webconsole/WEB-INF/web.xml 定位以下内容: <filter> <filter-name>RequestCheckFilter</filter-name> <filter-class>cyberoam.sessionmanagement.RequestCheckFilter</filter-class> </filter> <filter-mapping> <filter-name>RequestCheckFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这里使用RequestCheckFilter用来过滤request请求中JSON参数是否包含不可见字符 可以手动删除以上代码,恢复成带有漏洞的调试环境 无法直接修改文件/usr/share/webconsole/WEB-INF/web.xml 在修改文件前需要重新挂载:mount -o remount,rw / 再次修改文件即可 0x03 OpCode的寻找方法 原文中提到:CSC端大概有1200种模式在运行,其中有161种模式的响应类型为2 这里可以通过反编译EventBean.class找到如下代码: select opcode,mode,waitforresponse,operationtype,responsetype,requesttype,opcodetype,responsetimeout,entityid,beanname,syncable,comprotocol,query,requestname from tblcrevent order by mode 经过分析后,响应类型对应的应该为requesttype,而不是responsetype...

  • Sophos XG漏洞调试环境搭建

    0x00 前言 Sophos UTM和Sophos XG是两款不同的产品,前者偏向于通用威胁管理,后者偏向于硬件防火墙。本文将要介绍Sophos XG漏洞调试环境的搭建方法。 0x01 简介 本文将要介绍以下内容: 环境搭建 jetty调试环境搭建 csc配置文件解密 Postgresql数据库查询 0x02 基础知识 架构如下图 注: 图片引用自https://codewhitesec.blogspot.com/2020/07/sophos-xg-tale-of-unfortunate-re.html 总的来说,分为以下三部分: Jetty:处理Web数据,将数据转发至csc作进一步处理 csc:主程序:加载Perl Packages,实现主要功能 Postgresql:用来存储数据 我在实际研究过程中,这三部分遇到了以下问题: Jetty:添加调试信息后无法启动java csc:csc加载Perl Packages后会自动删除,无法获得Perl Packages的实现细节 Postgresql:用户权限低,无法查询数据库表 下面将要逐个介绍三个问题的解决方法 0x03 环境搭建 参考资料: https://docs.sophos.com/nsg/sophos-firewall/18.5/Help/en-us/webhelp/onlinehelp/VirtualAndSoftwareAppliancesHelp/VMware/VMwareInstall/index.html 1.下载安装包 官方网站默认只提供最新版本的下载,但是可以通过猜测正确的版本号下载旧版本 例如18.5.3 Virtual Installers: Firewall OS for VMware: https://download.sophos.com/network/SophosFirewall/installers/VI-18.5.3_MR-3.VMW-408.zip 18.5.2 Virtual Installers: Firewall OS for...

  • Zimbra-SOAP-API开发指南3——操作邮件

    0x00 前言 在之前的文章《Zimbra SOAP API开发指南》和《Zimbra-SOAP-API开发指南2》介绍了Zimbra SOAP API的调用方法,开源代码Zimbra_SOAP_API_Manage。 本文将要在此基础上扩充功能,添加邮件操作的相关功能。 0x01 简介 本文将要介绍以下内容: 查看邮件 发送邮件 删除邮件 0x02 查看邮件 Zimbra SOAP API说明文档:https://files.zimbra.com/docs/soap_api/9.0.0/api-reference/index.html 结合Zimbra SOAP API说明文档和调试结果得出以下实现流程: 调用Search命令获得邮件对应的Item id,通过Item id作为邮件的识别标志 获得Item id后可以对邮件做进一步操作,如查看邮件细节、移动邮件、删除邮件等 1.获得邮件对应的Item id 需要使用Search命令 说明文档:https://files.zimbra.com/docs/soap_api/8.8.15/api-reference/zimbraMail/Search.html 需要用到以下参数: (1)query 表示查看的位置,示例如下: 查看收件箱:<query>in:inbox</query> 查看发件箱:<query>in:sent</query> 查看垃圾箱:<query>in:trash</query> (2)limit 表示返回的查询结果数量,示例如下: 指定返回数量为10:<limit>10</limit> 如果不指定该属性,默认为10 测试代码: def searchinbox_request(uri,token): request_body="""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <context xmlns="urn:zimbra"> <authToken>{token}</authToken>...

  • 渗透基础——Exchange版本探测的优化

    0x00 前言 在上篇文章《渗透基础——Exchange版本探测和漏洞检测》介绍了通过Python进行版本探测的两种方法,在版本识别上,首先从官网获得已知的版本信息,将版本信息存储在列表中,然后通过字符串匹配的方式获得Exchange版本的详细信息。开源的代码Exchange_GetVersion_MatchVul.py反馈很好。但是这个方法存在一个缺点:需要定期访问官网,手动更新扫描脚本中的版本信息列表。 为了进一步提高效率,本文介绍另外一种实现方法,通过访问官网,从返回数据中直接提取出详细的版本信息,优点是不再需要定期更新脚本。 0x01 简介 本文将要介绍以下内容: 通过BeautifulSoup解析网页数据 实现细节 开源代码 0x02 通过BeautifulSoup解析网页数据 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,可以提高开发效率 安装: pip install bs4 1.基本使用 在Python实现上,需要先通过requests库获取网页内容,再调用BeautifulSoup进行解析 测试代码: from bs4 import BeautifulSoup import requests import urllib3 urllib3.disable_warnings() url = "https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36", } response...

  • 渗透技巧——从VMware ESXI横向移动到Windows虚拟机

    0x00 前言 假定以下测试环境:我们获得了内网VMware ESXI的控制权限,发现VMware ESXI上安装了Windows域控服务器。 本文仅在技术研究的角度介绍从VMware ESXI横向移动到该Windows域控服务器的方法,结合利用思路,给出防御检测的方法。 0x02 简介 本文将要介绍以下内容: 利用思路 常用命令 实现方法 0x03 利用思路 通过VMware ESXI管理虚拟机,创建快照文件,从快照文件中提取出有价值的信息。 0x04 常用命令 1.查看虚拟机版本 vmware -vl 2.用户信息相关 (1)查看所有用户 esxcli system account list (2)查看管理员用户 esxcli system permission list (3)添加用户 esxcli system account add -i test1 -p Password@1 -c Password@1 (4)将普通用户添加成管理员用户 esxcli system permission set -i...

  • Lsassy二次开发——添加dump方法

    0x00 前言 在之前的文章《渗透基础——远程从lsass.exe进程导出凭据》介绍了Lsassy的用法,Lsassy能够实现远程从lsass.exe进程导出凭据。本文将要在Lsassy的基础上进行二次开发,添加一个导出凭据的方法,记录细节。 0x01 简介 本文将要介绍以下内容: 二次开发的细节 开源代码 0x02 导出凭据的方法 在之前的文章《渗透基础——从lsass.exe进程导出凭据》提到过使用RPC控制lsass加载SSP的方式向lsass.exe进程注入dll,由dll来实现dump的功能,这个方法是Lsassy缺少的 这个方法共分为两部分: (1)加载器 使用RPC控制lsass进程加载dll文件 可参考XPN开源的代码: https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e 在编译代码时,为了提高通用性,编译选项选择在静态库中使用MFC,在原代码的基础上添加如下代码: #pragma comment(lib, "Rpcrt4.lib") 编译代码生成文件rpcloader.exe (2)dll文件 dll文件实现从lsass.exe进程导出凭据,代码可参考: https://github.com/outflanknl/Dumpert/blob/master/Dumpert-DLL/Outflank-Dumpert-DLL/Dumpert.c dll加载时会将dump文件保存为c:\windows\Temp\dumpert.dmp 编译代码生成文件dumpert.dll 经过以上操作,得到文件rpcloader.exe和dumpert.dll,作为二次开发的准备 0x03 二次开发的细节 1.添加一个需要指定文件路径的dump方法 格式参考:https://github.com/Hackndo/lsassy/blob/master/lsassy/dumpmethod/dummy.py.tpl 根据参考格式写出模块代码,我这里额外做了一些标记,细节如下: from lsassy.dumpmethod import IDumpMethod, Dependency class DumpMethod(IDumpMethod): custom_dump_path_support = False custom_dump_name_support = False dump_name = "dumpert.dmp" //进程dump文件保存的文件名 dump_share...