Good in study, attitude and health

  • 渗透技巧——通过WSUS进行横向移动

    0x00 前言 在内网渗透中,当我们获得了WSUS服务器的控制权限后,可以通过推送补丁的方式进行横向移动。这个利用方法最早公开在BlackHat USA 2015。本文将要整理这个利用方法的相关资料,结合思路思路,得出行为检测的方法。 参考资料: https://www.blackhat.com/docs/us-15/materials/us-15-Stone-WSUSpect-Compromising-Windows-Enterprise-Via-Windows-Update.pdf https://www.gosecure.net/blog/2020/09/03/wsus-attacks-part-1-introducing-pywsus/ https://labs.nettitude.com/blog/introducing-sharpwsus/ 0x01 简介 本文将要介绍以下内容: 环境搭建 利用思路 实现工具 行为检测 0x02 环境搭建 本节介绍WSUS服务器搭建的过程,通过配置客户端实现补丁的推送 参考资料: https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/dd939822(v=ws.10) 1.WSUS服务器搭建 WSUS服务器需要安装在Windows Server操作系统 (1)安装 在添加角色和功能页面,选择Windows Server Update Services 需要指定补丁更新包的存放路径,这里可以设置为C:\WSUS (2)配置 打开Windows Server Update Services进行配置 配置时选择默认选项即可,在选择Download update information from Microsoft Update时,点击Start Connecting,如果报错提示An HTTP error has occurred,经过我的多次测试,可以采用以下方法解决: 关闭当前页面 进入Windows Server Update...

  • Password Manager Pro利用分析——数据解密

    0x00 前言 在上篇文章《Password Manager Pro漏洞调试环境搭建》介绍了漏洞调试环境的搭建细节,经测试发现数据库的部分数据做了加密,本文将要介绍数据解密的方法。 0x01 简介 本文将要介绍以下内容: 数据加密的位置 解密方法 开源代码 实例演示 0x02 数据加密的位置 测试环境同《Password Manager Pro漏洞调试环境搭建》保持一致 数据库连接的完整命令:"C:\Program Files\ManageEngine\PMP\pgsql\bin\psql" "host=127.0.0.1 port=2345 dbname=PassTrix user=pmpuser password=Eq5XZiQpHv" 数据库连接成功,如下图 常见的数据加密位置有以下三个: (1)Web登录用户的口令salt 查询Web登录用户名的命令:select * from aaauser; 查询Web登录用户口令的命令:select * from aaapassword; 结果如下图 password的加密格式为bcrypt(sha512($pass)) / bcryptsha512 *,对应Hashcat的Hash-Mode为28400 其中,salt项被加密 (2)数据库高权限用户的口令 查询命令:select * from DBCredentialsAudit; 输出如下: username | password...

  • 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...