Uncategorized
2.3k words
恍惚中,7月闲谈,已是将近两个月前的事情了。为匹配这两个月来百无聊赖的空茫时光,也为了疏散一下心中的郁积,终究还是决定把手搁在键盘上,敲一些萎靡木讷似是而非的文字,以此来记录一下近两个月的生活。 时间线可以追溯到7月闲谈写完的第三天,或者说,追溯到8月的第一通电话。电话的对面是个男人,虽然并未谋面,但仅凭声音也能知道此人绝非善茬。通话的过程并不算长,你来我往之间也不过寥寥数语,是碧桂园打来的催租电话,催我交下个月的房租。挂闭电话,心里说不出是什么感受,只觉茫然而机械。按照计划来讲,这本不应该是问题,因为八月底就要开学的缘故,租期本就打算只开展一个月,住完这个月就找个酒店续续命,把工期给熬过去。非要多说有什么值得注意的地方的话,就是记得提前15天把押金给退了而已,一切就和中介安排的一样妥当。我又打去电话与中介进行了交涉,也是到此才发觉以往想当然的计划处处存在纰漏。首先第一点,提前15天把租金退了的说法,本身并不准确,这里的15天其实是中介给自己预估找到下家转租的时间,如果15天后中介并未找到下家,那么仍然需要你当个冤大头来给房东兜底交房租。除此之外,原本想的下个月房租不交,把这...
Uncategorized
3.6k words
BCEL介绍BCEL(Byte Code Engineering Library)是一个用于分析、修改和创建Java字节码的开源库。它提供了一组强大的工具和API,可用于动态修改和生成Java类文件。BCEL的主要功能包括以下几个方面: 字节码分析:BCEL可以加载和解析现有的Java类文件,提供了访问类、方法、字段和指令等各种元素的接口。通过这些接口,开发人员可以深入研究类的内部结构和操作指令,从而进行静态分析和检查。 字节码修改:BCEL允许开发人员直接修改已加载的类文件的字节码。可以添加、删除或修改类、方法和字段,并重新保存修改后的文件。这使得BCEL成为处理字节码的有力工具,广泛应用于AOP(面向切面编程)等领域。 字节码生成:BCEL还提供了一组API,用于动态生成新的Java类文件。开发人员可以使用BCEL创建类、方法、字段和操作指令,然后将其编译成有效的字节码文件。这对于编写动态代理、字节码增强等需要在运行时生成类的场景非常有用。 反序列化和代码执行:BCEL在测试反序列化漏洞和执行动态生成的代码时非常有用。它可以帮助分析和处理序列化的对象,并提供了执行相关操作的...
Uncategorized
1.7k words
本科学的毕竟是软工,关于Thymeleaf多少还是了解的。就一模板引擎,和Jinja2是一个性质的东西。一些基本的使用和概念这里就不多赘述,直接开始分析。 环境准备pom.xml 1234567891011121314151617181920212223242526272829303132333435363738394041<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVe...
Uncategorized
2.9k words
运行靶机,获得IP:10.10.11.174用nmap对该ip进行全端口扫描,得到以下关键端口信息,大体能推测这是一台仿DC的靶机因为445端口是开着的,我们先尝试用smbclient连一下,看看有没有empty password 1231. smbclient -L 10.10.11.1742. smbclient \\\\10.10.11.174\\support-tools 3. get UserInfo.exe.zip 这里是在support-tools 的共享下发现了空密码,也是成功下载了UserInfo.exe.zip 下载下来之后,咱们把UserInfo.exe.zip解压到特定目录下,用file命令查看下该文件属性,得到以下信息,发现是.NET程序,按照常理来讲,这个时候我们的流程应该是用dnspy做逆向查看下这个文件究竟是何方神圣,然后欢欣雀跃的发现这是一个ldap通信程序,接着再拿gpt写解密脚本把ldap服务器的用户和密码都给破译出来,链接上dc的ldap服务再接着做渗透。但博主的逆向水平实在薄弱,咱们直接上wireshark抓ldap的绑定包查看用户密码也...
Uncategorized
1.6k words
前置知识 RPC协议 和之前学过的RMI协议有相似之处,都是用于实现远程调用的协议,类似于API调用的封装协议。不同的地方在于信息传输过程中对于所传递信息的编码处理上。RPC客户端在传递过程中首先会组织一个请求消息,包含了要调用的远程方法的名称、参数等信息。然后,根据RPC协议的规定,将这些信息按照特定的二进制格式进行编码。当RPC服务端收到传递信息之后,再根据RPC协议规定进行解码还原。 除了在编码格式上存在差异以外,RPC协议与RMI协议在应用范围上也相差甚远。由于RPC协议使用 HTTP 或 TCP/IP 等底层网络协议进行通信,所以RPC协议并不会如RMI协议一样收到语言的限制,不仅仅是Java中可以使用RPC协议,Python等语言同样可以使用RPC协议 Hessian协议 Hessian协议是RPC协议的一种具体的实现方式,是一种用于远程过程调用的二进制协议,通过紧凑的二进制格式实现高效的数据传输,同时具备跨平台的兼容性,适用于各种分布式系统和跨语言集成的场景。 Hessian反序列化器总结 环境准备pom.xml 12345<depende...
Uncategorized
2.1k words
环境准备 夜神模拟器 frida-server + frida andriod studio (可选) 东西准备的不算多,adb用夜神模拟器自带的就可以,别的就不多赘述了,别的博主那里已经写的非常清楚了,唯一要关注一点的是在新版夜神模拟器默认的端口是62025,adb只有连这个端口才能上的去,和网上说的有些差异。 对安卓的基本认识文件层面 Class 和我们平常理解的字节码运行机制不一样,在Android平台上,.class文件不能直接在Android设备上运行,因为Android使用了自己的运行时环境(最初是Dalvik虚拟机,后来转为ART),而不是标准的Java虚拟机(JVM)。在Android开发过程中,Java源代码会被编译成.class文件,然后再通过工具将这些.class文件转换成Dalvik可执行的.dex(Dalvik Executable)文件。.dex文件包含了Dalvik虚拟机可以理解和执行的指令集。 Dex dex文件是Android平台上的可执行文件。在编译Java代码之后,通过Android平台上的工具可以将Java字节码转换成Dex字节码。 ...
Uncategorized
728 words
前言这一块的关键点还在tomcat的管道机制上,前面在基本知识那里已经写过了,就不多赘述了基本就是一个Context -> Pipeline -> Valve 的层次顺序。我们来看一下几个接口的源码吧,先看看Valve接口的源码。 1234567891011121314package org.apache.catalina; import java.io.IOException; import javax.servlet.ServletException; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; public interface Valve { public Valve getNext(); public void setNext(Valve valve); public void backgroundProcess(); public void invoke(Request reque...
Uncategorized
869 words
流程分析众所周知在Tomcat进行初始化的时候,三大组件遵循:Listener -> Filter -> Servlet 的加载顺序。调用栈大体如下,这里就不带着分析了,是在StandardContext#startInternal里面按顺序加载的。我们直接来到栈顶的 StandardContext#configureContext() 这里。这个方法里面通过对web.xml进行解析,按照顺序把filterMaps,filterDef,StandardWrapper这样的对象给创建了出来,我们这里重点关注一下StandardWrapper这一部分。 12345678910111213141516171819202122232425262728293031323334353637383940414243private void configureContext(WebXml webxml) { // As far as possible, process in alphabetical order so it is easy to ...
Uncategorized
874 words
前情提要看Listerner型内存马之前先给自己纠正一个误区,之前一直以为Listener是在Filter之后执行的,也是看了别的师傅的博客才纠正过来,属于是软工白学了。Listener的监听对象可以分为以下三种 ServletContext,服务器启动和终止时触发 Session,有关Session操作时触发 Request,访问服务时触发最好监听的显然是Request,随便访问一个路径就能触发,我们的注入对象也肯定是选择Request的监听器,在注入之前,我们有以下两个概念需要了解下 EventListener所有类型的监听器对象都必须实现的接口,因为这里我们的注入对象选的是Request型的,所以这里我们要重点关注它的 ServletRequestListener 子接口 (光看名字都知道这个和request有关吧) ServletRequestListener能够看出Request的监听器接口一共就两个方法需要我们实现,requestInitialized()和requestDestroyed() ,光看名字也能知道他们的具体执行顺序,也不多说了,直接准备一下监...
Uncategorized
1.6k words
环境搭建 Tomcat源码导入 Servlet项目创建 流程分析结合前面说过的知识,我们大体探索了一下tomcat的执行流程,这里附上小图一张,我们将以StandardWrapperValve这个阀门作为起点分析过滤器的执行流程。 要是有闲情雅致的话,当然也可以从第一个管道开始往后顺一下,这里光把断点标一下就跳过了,有兴趣的话可以自己分析。直接来到StandardWrapperValve#line168处,从初始化FilterChain的位置开始往后分析。request, wrapper, servlet ,能够看的出来我们这三个对象都被作为了参数进行初始化,跟进一下看看前面的部分就省略掉了,起到的作用大体概况一下,就是从request把filterChain对象取出来供后面使用。真正的关键位置如下可以看到这里从StandardContext里面取出来了一个名为filterMaps的数组(不要想为什么wrapper能够取出来Context这个东西,wrapper本来就是前面流程的最终产物),这里要着重介绍一下这个filterMap对象以及和它相关的两个小老弟。 filterM...