Good in study, attitude and health

  • 渗透基础——WMIC的使用

    0x00 前言 WMI(Windows Management Instrumentation)是一种管理功能,提供了一个统一的环境来访问Windows系统组件,支持本地和远程访问。在之前的文章《WMI Attacks》、《WMI Backdoor》、《WMI Defense》和《Study Notes of WMI Persistence using wmic.exe》介绍过相关内容,本文将要在信息收集和横向移动的角度,分析wmic的常用方法,结合利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: wbemtest用法 通过wmic查询主机信息 通过wmic修改注册表 通过wmic执行程序 本地和远程访问WMI服务 0x02 wbemtest用法 参考资料: https://docs.microsoft.com/en-us/mem/configmgr/develop/core/understand/introduction-to-wbemtest Windows系统默认安装,可以用于连接WMI命名空间,访问WMI服务 借助wbemtest,我们可以获得WMI完整的功能细节和使用方法 界面如下图 点击Connect...,输入WMI命名空间root\cimv2,连接到root\cimv2后,可进入主页面,如下图 常用功能示例如下: (1)Enum Classes… 枚举类,可以用来枚举所有的对象,查询每个类的定义 这里以查询Win32_Process对象为例: 依次选中Enum Classes... -> Recursive -> OK,选中Win32_Process,双击进入对象编辑器,如下图 Properities栏可以查看属性,例如这里有Handle,可以通过后文的Query...进行查询 Methods栏可以查看方法,例如这里有Create,可以通过后文的Execute Method...进行调用 (2)Query… 查询属性,需要输入WMI Query Language (WQL) 参考资料:...

  • 渗透基础——在Win7下运行csvde

    0x00 前言 在之前的文章《渗透基础——活动目录信息的获取2:Bypass AV》介绍了使用csvde获取活动目录信息的方法,优点是Windows Server系统自带,能够导出csv格式便于查看。但是在Win7系统下,默认不支持这个命令。 本文将要介绍在Win7下运行csvde的方法,提高适用范围。 0x01 简介 本文将要介绍以下内容: 背景知识 移植思路 实现方法 0x02 背景知识 参考资料: https://docs.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc772704(v=ws.10)?redirectedfrom=MSDN https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc732101(v=ws.11) 1.csvde的依赖库 需要理清以下结构: Windows Server 2003,默认支持csvde Windows Server 2008及更高版本,需要开启Active Directory Domain Services (AD DS)或Active Directory Lightweight Directory Services (AD LDS)服务器角色 Windows XP Professional,需要安装Active Directory Application Mode (ADAM) Windows 7及更高版本,需要安装Remote Server Administration Tools (RSAT) 2.安装Remote...

  • Windows Communication Foundation开发指南2——禁用元数据发布

    0x00 前言 本文将要介绍在禁用元数据发布(MEX)时WCF开发的相关内容,给出文章《Abusing Insecure Windows Communication Foundation (WCF) Endpoints》的完整代码示例。 0x01 简介 本文将要介绍以下内容: 禁用MEX实现WCF 文章完整代码示例 0x02 禁用MEX实现WCF 禁用MEX时,需要根据服务端的代码手动编写客户端代码 本节采用命令行实现WCF的方式作为示例 开发工具:Visual Studio 2015 1.服务端编写 (1)新建项目 选择Visual C#->Console Application,名称为NBTServer (2)新建WCF服务 选择Add->New Item...,选择WCF Service,名称为Service1.cs (3)修改service1.cs 添加DoWork的实现代码,代码示例: namespace NTBServer { public class Service1 : IService1 { public void DoWork() { System.Diagnostics.Process.Start("calc.exe"); } } } (4)修改Program.cs...

  • Windows Communication Foundation开发指南1——启用元数据发布

    0x00 前言 Windows Communication Foundation (WCF)是用于在.NET Framework中构建面向服务的应用程序的框架。本文将要介绍WCF开发的相关内容,为后续介绍的内容作铺垫。 0x01 简介 本文将要介绍以下内容: 使用basicHttpBinding实现WCF 使用NetTcpBinding实现WCF 通过命令行实现WCF 通过IIS实现WCF 通过服务实现WCF 0x02 基础知识 参考资料: https://docs.microsoft.com/en-us/dotnet/framework/wcf/whats-wcf 常用的传输协议: HTTP,http://localhost:8080/ TCP,net.tcp://localhost:8080/ IPC,net.pipe://localhost/ 常用的Binding: BasicHttpBinding WSHttpBinding NetTcpBinding NetNamedPipeBinding 元数据发布(metadata exchange),简称MEX WCF默认禁用MEX,这样能够避免数据泄露 本着逐步深入的原则,本系列文章选择先介绍开启MEX的用法,这样能够提高客户端开发的效率,禁用MEX的用法将放在下篇文章进行介绍。 0x03 使用basicHttpBinding实现WCF 本节采用命令行实现WCF的方式作为示例 开发工具:Visual Studio 2015 1.服务端编写 (1)新建项目 选择Visual C#->Console Application,名称为basicHttpBindingWCFServer (2)新建WCF服务 选择Add->New Item...,选择WCF Service,名称为Service1.cs (3)修改service1.cs 添加DoWork的实现代码,代码示例: using...

  • Java利用技巧——通过jsp加载Shellcode

    0x00 前言 本文基于rebeyond的《Java内存攻击技术漫谈》,以Tomcat环境为例,介绍通过jsp加载Shellcode的方法,开源代码,记录细节。 0x01 简介 本文将要介绍以下内容: 依赖tools.jar加载Shellcode 自定义类加载Shellcode 0x02 依赖tools.jar加载Shellcode 1.Java实现 通过enqueue函数加载Shellcode,测试代码: import java.lang.reflect.Method; public class ThreadMain { public static void main(String[] args) throws Exception { System.loadLibrary("attach"); Class cls=Class.forName("sun.tools.attach.WindowsVirtualMachine"); for (Method m:cls.getDeclaredMethods()) { if (m.getName().equals("enqueue")) { long hProcess=-1; byte buf[] = new byte[] { (byte) 0xfc, (byte) 0x48, (byte) 0x83,...

  • Java利用技巧——通过JNI加载dll

    0x00 前言 Java可以通过JNI接口访问本地的动态连接库,从而扩展Java的功能。本文将以Tomcat环境为例,介绍通过jsp加载dll的方法,开源代码,记录细节。 0x01 简介 本文将要介绍以下内容: 基础知识 Java通过JNI加载dll的方法 jsp通过JNI加载dll的方法 0x02 基础知识 JNI,全称Java Native Interface,是Java语言的本地编程接口。可以用来调用dll文件 调用JNI接口的步骤: 编写Java代码,注明要访问的本地动态连接库和本地方法 编译Java代码得到.class文件 使用javah生成该类对应的.h文件 使用C++实现函数功能,编译生成dll 通过Java调用dll 0x03 Java通过JNI加载dll的方法 本节将要实现通过Java加载dll,在命令行输出"Hello World" 1.编写Java代码,注明要访问的本地动态连接库和本地方法 HelloWorld.java: public class HelloWorld { private native void print(); static { System.loadLibrary("Hello"); } public static void main(String[] args) { new HelloWorld().print(); } } 注: 也可以使用System.load指定加载dll的绝对路径,代码示例:System.load("c:\\test\\Hello.dll");...

  • 渗透基础——Windows Defender

    0x00 前言 Windows Defender是一款内置在Windows操作系统的杀毒软件程序,本文仅在技术研究的角度介绍Windows Defender相关的渗透方法,分析利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: 查看Windows Defender版本 查看已存在的查杀排除列表 关闭Windows Defender的Real-time protection 添加查杀排除列表 移除Token导致Windows Defender失效 恢复被隔离的文件 0x02 查看Windows Defender版本 1.通过面板查看 依次选择Windows Security->Settings->About,Antimalware Client Verions为Windows Defender版本,如下图 2.通过命令行查看 dir "C:\ProgramData\Microsoft\Windows Defender\Platform\" /od /ad /b 数字大的为最新版本 0x03 查看已存在的查杀排除列表 1.通过面板查看 依次选择Windows Security->Virus & theat protection settings->Add or remove exclusions,如下图 2.通过命令行查看 reg query...

  • Java利用技巧——通过反射实现webshell编译文件的自删除

    0x00 前言 我们知道,当我们访问jsp文件时,Java环境会先将jsp文件转换成.class字节码文件,再由Java虚拟机进行加载,这导致了Java服务器上会生成对应名称的.class字节码文件。对于webshell,这会留下痕迹。 为了实现自删除.class字节码文件,我们可以通过反射获得.class字节码文件的路径,再进行删除。本文将以Zimbra环境为例,结合AntSword-JSP-Template,分析利用思路。 0x01 简介 本文将要介绍以下内容: 通过反射实现webshell编译文件的自删除 通过反射实现AntSword-JSP-Template 0x02 通过反射实现webshell编译文件的自删除 根据上篇文章《Java利用技巧——通过反射修改属性》的内容,我们按照映射request->_scope->_servlet->rctxt->jsps,通过多次反射最终能够获得JspServletWrapper实例 查看JspServletWrapper类中的成员,jsps->value->ctxt->servletJavaFileName保存.java编译文件的路径,jsps->value->ctxt->classFileName保存.class编译文件的路径,示例如下图 为了只筛选出当前jsp,可以通过request类的getServletPath()方法获得当前Servlet,如下图 从ctxt对象获取servletJavaFileName可以调用JspCompilationContext类的getServletJavaFileName()方法,如下图 从ctxt对象获取classFileName可以调用JspCompilationContext类的getClassFileName()方法,如下图 综上,由此我们可以得出通过反射获取编译文件路径的实现代码如下: <%@ page import="java.lang.reflect.Field" %> <%@ page import="java.util.concurrent.ConcurrentHashMap" %> <%@ page import="java.util.*" %> <%@ page import="org.apache.jasper.servlet.JspServletWrapper" %> <%@ page import="org.apache.jasper.JspCompilationContext" %> <% Field f = request.getClass().getDeclaredField("_scope"); f.setAccessible(true); Object obj1 = f.get(request); f = obj1.getClass().getDeclaredField("_servlet");...

  • Java利用技巧——通过反射修改属性

    0x00 前言 在上篇文章《Zimbra漏洞调试环境搭建》提到了通过反射枚举JspServletWrapper实例的实现,本文将要以此为例,详细介绍实现的思路和细节,便于以此类推,实现其他功能。 0x01 简介 本文将要介绍以下内容: 反射中的常用操作 获得类的所有字段 获得类的所有方法 调用类的方法 枚举JspServletWrapper实例的实现细节 0x02 反射中的常用操作 1.获得类的所有字段 getField(): 能够获取本类以及父类中的public字段 getDeclaredField(): 能够获取本类中的所有字段 这里以Zimbra环境为例,给出示例代码 (1)获取request对象的所有字段 <%@ page import="java.lang.reflect.Field" %> <% Field[] fields=request.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { out.println(fields[i].getName() + "<br>"); } %> (2)获取request对象的父类的所有字段 <%@ page import="java.lang.reflect.Field" %> <% Field[] fields=request.getClass().getSuperclass().getDeclaredFields();...

  • Zimbra漏洞调试环境搭建

    0x00 前言 本文记录从零开始搭建Zimbra漏洞调试环境的细节。 0x01 简介 本文将要介绍以下内容: Zimbra服务器开启调试模式 本地使用IDEA进行远程调试 常用知识 0x02 Zimbra服务器开启调试模式 相关资料: https://github.com/Zimbra-Community/zimbra-tools/blob/master/java-debug-zimbra-intellij-ide.md 详细步骤如下: 1.停止Zimbra服务 su zimbra zmcontrol stop 2.开启调试模式 su cp /opt/zimbra/libexec/zmmailboxdmgr /opt/zimbra/libexec/zmmailboxdmgr.old cp /opt/zimbra/libexec/zmmailboxdmgr.unrestricted /opt/zimbra/libexec/zmmailboxdmgr 此处先备份zmmailboxdmgr,再使用zmmailboxdmgr.unrestricted替换zmmailboxdmgr 3.添加调试信息 su zimbra zmlocalconfig -e mailboxd_java_options="`zmlocalconfig -m nokey mailboxd_java_options` -Xdebug -Xnoagent -Djava.compiler=NONE -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000" 注: 也可以直接修改/opt/zimbra/conf/localconfig.xml中的mailboxd_java_options属性值 4.关闭防火墙 sudo ufw disable 5.重启服务 zmcontrol start...