Good in study, attitude and health

  • Java利用技巧——Jetty Servlet型内存马

    0x00 前言 在上篇文章介绍了Jetty Filter型内存马的实现思路和细节,本文介绍Jetty Servlet型内存马的实现思路和细节 0x01 简介 本文将要介绍以下内容: 实现思路 实现代码 Zimbra环境下的Servlet型内存马 0x02 实现思路 同样是使用Thread获得webappclassloaer,进而通过反射调用相关方法添加Servlet型内存马 0x03 实现代码 1.添加Servlet Jetty下可用的完整代码如下: <%@ page import="java.lang.reflect.Field"%> <%@ page import="java.lang.reflect.Method"%> <%@ page import="java.util.Scanner"%> <%@ page import="java.io.*"%> <% String servletName = "myServlet"; String urlPattern = "/servlet"; Servlet servlet = new Servlet() { @Override public void init(ServletConfig servletConfig)...

  • Java利用技巧——Jetty Filter型内存马

    0x00 前言 关于Tomcat Filter型内存马的介绍资料有很多,但是Jetty Filter型内存马的资料很少,本文将要参照Tomcat Filter型内存马的设计思路,介绍Jetty Filter型内存马的实现思路和细节。 0x01 简介 本文将要介绍以下内容: Jetty调试环境搭建 实现思路 实现代码 Zimbra环境下的Filter型内存马 0x02 Jetty调试环境搭建 1.添加调试参数 JDK 8版本对应的调试参数为:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar start.jar JDK 9及以上版本对应的调试参数为:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar start.jar 2.Web目录 位置为: <jetty path>\webapps\ROOT 3.断点位置 选择文件servlet-api-3.1.jar,依次选中javax.servlet->http->HttpServlet.class,在合适的位置下断点,当运行到断点时,可以查看request对象的完整结构 0x03 实现思路 相关参考资料: https://github.com/feihong-cs/memShell/blob/master/src/main/java/com/memshell/jetty/FilterBasedWithoutRequest.java https://blog.csdn.net/xdeclearn/article/details/125969653 参考资料1是通过JmxMBeanServer获得webappclassloaer,进而通过反射调用相关方法添加一个Filter 参考资料2是通过Thread获得webappclassloaer,进而通过反射调用相关方法添加Servlet型内存马的方法 我在实际测试过程中,发现通过JmxMBeanServer获得webappclassloaer的方法不够通用,尤其是无法在Zimbra环境下使用 因此,最终改为使用Thread获得webappclassloaer,进而通过反射调用相关方法添加Filter型内存马 0x04 实现代码 1.添加Filter Jetty下可用的完整代码如下: <%@ page import="java.lang.reflect.Field"%> <%@...

  • 域渗透——利用GPO中的脚本实现远程执行

    0x00 前言 在之前的文章《域渗透——利用GPO中的计划任务实现远程执行》介绍了通过域组策略(Group Policy Object)远程执行计划任务的方法,本文将要介绍类似的另外一种方法:通过域组策略(Group Policy Object)的脚本实现远程执行。 0x01 简介 本文将要介绍以下内容: 通过Group Policy Management Console (GPMC) 实现脚本的远程执行 通过命令行实现脚本的远程执行 新建GPO实现远程执行 修改已有的GPO,实现远程执行 实现细节 0x02 通过Group Policy Management Console (GPMC) 实现脚本的远程执行 1.创建GPO 在域控制器上,位置: Administrative Tools -> Group Policy Management 如果想要作用于整个域,选择域test.com,右键,选择Create a GPO in this domain,and Link it here...,如下图 如果想要作用于指定对象,需要选择提前创建好的OU,右键,选择Create a GPO in this domain,and...

  • 渗透技巧——远程访问Exchange Powershell

    0x00 前言 Exchange Powershell基于PowerShell Remoting,通常需要在域内主机上访问Exchange Server的80端口,限制较多。本文介绍一种不依赖域内主机发起连接的实现方法,增加适用范围。 注: 该方法在CVE-2022–41040中被修复,修复位置:C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.HttpProxy.Common.dll中的RemoveExplicitLogonFromUrlAbsoluteUri(string absoluteUri, string explicitLogonAddress),如下图 0x01 简介 本文将要介绍以下内容: 实现思路 实现细节 0x02 实现思路 常规用法下,使用Exchange Powershell需要注意以下问题: 所有域用户都可以连接Exchange PowerShell 需要在域内主机上发起连接 连接地址需要使用FQDN,不支持IP 常规用法无法在域外发起连接,而我们知道,通过ProxyShell可以从域外发起连接,利用SSRF执行Exchange Powershell 更进一步,在打了ProxyShell的补丁后,支持NTLM认证的SSRF没有取消,我们可以通过NTLM认证再次访问Exchange Powershell 0x03 实现细节 在代码实现上,我们可以加入NTLM认证传入凭据,示例代码: from requests_ntlm import HttpNtlmAuth res = requests.post(url, data=post_data, headers=headers, verify=False, auth=HttpNtlmAuth(username, password)) 在执行Exchange Powershell命令时,我们可以选择pypsrp或者Flask,具体细节可参考之前的文章《ProxyShell利用分析2——CVE-2021-34523》和《ProxyShell利用分析3——添加用户和文件写入》 pypsrp或者Flask都是通过建立一个web代理,过滤修改通信数据实现命令执行 为了增加代码的适用范围,这里选择另外一种实现方法:模拟Exchange Powershell的正常通信数据,实现命令执行...

  • pypsrp在Exchange Powershell下的优化

    0x00 前言 pypsrp是用于PowerShell远程协议(PSRP)服务的Python客户端。我在研究过程中,发现在Exchange Powershell下存在一些输出的问题,本文将要介绍研究过程,给出解决方法。 0x01 简介 Exchange PowerShell Remoting pypsrp的使用 pypsrp存在的输出问题 解决方法 0x02 Exchange PowerShell Remoting 参考资料: https://docs.microsoft.com/en-us/powershell/module/exchange/?view=exchange-ps 默认设置下,需要注意以下问题: 所有域用户都可以连接Exchange PowerShell 需要在域内主机上发起连接 连接地址需要使用FQDN,不支持IP 通过Powershell连接Exchange PowerShell的命令示例: $User = "test\user1" $Pass = ConvertTo-SecureString -AsPlainText Password1 -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Pass $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchangeserver.test.com/PowerShell/ -Authentication Kerberos -Credential...

  • FortiOS REST API开发指南

    0x00 前言 本文将要介绍FortiOS REST API的相关用法,分享脚本开发的实现细节。 0x01 简介 本文将要介绍以下内容: Fortigate环境搭建 FortiOS REST API两种登录方式 常用操作 常用功能 0x02 Fortigate环境搭建 这里以Fortigate作为FortiOS REST API的测试环境,安装FortiGate for VMware 参考资料:https://getlabsdone.com/how-to-install-fortigate-on-vmware-workstation/ 1.下载FortiGate for VMware安装包 下载地址:https://support.fortinet.com/ 选择Support -> VMImages,Select Product: FortiGate,Select Platform: VMWare ESXi 注: 7.2之前的版本可使用15天,7.2之后的版本需要账号注册 2.导入ova文件 打开FortiGate-VM64.ova导入VMWare 3.配置网卡 默认添加了10个网卡,我们只需要保留3个,删除后面的7个,3个网卡的具体配置如下: (1)管理网卡 依次选择VMware workstation -> Edit -> Virtual Network Editor,点击Change settings,点击Add...

  • Zimbra-SOAP-API开发指南6——预认证

    0x00 前言 本文将要继续扩充开源代码Zimbra_SOAP_API_Manage的实用功能,添加预认证的登录方式,分享开发细节。 0x01 简介 本文将要介绍以下内容: 预认证 计算preauth SOAP实现 开源代码 0x02 预认证 参考资料:https://wiki.zimbra.com/wiki/Preauth 简单理解:通过preAuthKey结合用户名、时间戳和到期时间,计算得出的HMAC作为身份验证的令牌,可用于用户邮箱和SOAP登录 默认配置下,Zimbra未启用预认证的功能,需要手动开启 (1)开启预认证并生成PreAuthKey 命令如下: /opt/zimbra/bin/zmrov generateDomainPreAuthKey <domain> 其中,<domain>对应当前Zimbra服务器的域名,可通过执行命令/opt/zimbra/bin/zmprov gad获得,测试环境的输出如下: mail.test.com 对应测试环境的命令为:/opt/zimbra/bin/zmprov generateDomainPreAuthKey mail.test.com 测试环境的输出如下: preAuthKey: fbf0ace37c59e3893352c656eda3d7f25c0ce0baadc9cbf22eb03f3b256f17a7 (2)读取已有的PreAuthKey 命令如下: /opt/zimbra/bin/zmprov gd <domain> zimbraPreAuthKey 对应测试环境的命令为:/opt/zimbra/bin/zmprov gd mail.test.com zimbraPreAuthKey 测试环境的输出如下: zimbraPreAuthKey: fbf0ace37c59e3893352c656eda3d7f25c0ce0baadc9cbf22eb03f3b256f17a7 注: 如果Zimbra存在多个域名,那么会有多个PreAuthKey 0x03 计算preauth 参考资料中给出了多种计算preauth的示例,但是Python的实现代码不完整,这里补全Python3下的完整实现代码,详细代码如下: from time import...

  • 渗透技巧——通过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...

  • Horde Groupware Webmail漏洞调试环境搭建

    0x00 前言 本文记录从零开始搭建Horde Groupware Webmail漏洞调试环境的细节。 0x01 简介 本文将要介绍以下内容: Horde Groupware Webmail安装 Horde Groupware Webmail漏洞调试环境配置 常用知识 0x02 Horde Groupware Webmail安装 参考资料: https://www.horde.org/apps/webmail/docs/INSTALL https://github.com/horde/base/blob/master/doc/INSTALL.rst https://geekrewind.com/install-horde-groupware-webmail-on-ubuntu-16-04-18-04-with-apache2/ https://neoserver.site/help/step-step-installation-instructions-postfix-and-dovecot-ubuntu 简单来说,安装Horde Groupware Webmail时需要配置以下环境: MySQL数据库 Apache2 php7.2 Dovecot 操作系统选择Ubuntu18,这里不能选择Ubuntu16,因为Ubuntu16不支持php7.2 本文的安装过程做了适当精简,完整过程可根据参考资料进行学习,具体安装过程如下: 1.安装MariaDB Database Server (1)安装 安装命令:sudo apt-get -y install mariadb-server mariadb-client (2)配置 配置命令:sudo mysql_secure_installation 配置如下: Enter current password...

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