Uncategorized
1.6k words
Tomcat架构浅析基本架构如图所示,咱们主要把关注点放在Connector和Container这两个组件这里。 Connector 组件 ,相当于tomcat的外交大臣,把浏览器传来的字节流封装处理成ServletRequest 对象,之后再把ServletRequest 对象 转发给Contaniner组件处理。当Container 组件处理完毕之后,Contaniner 组件会给Connector组件返回一个 ServletResponse对象,该对象再反过来经由Connector组件一系列处理,还原成字节流,最终把返回结果转发给浏览器,让浏览器进行页面渲染。 过程挺简单的,但显然不是今天的重点,我们内存马主要还是依靠这里的Container组件来实现的,所以我们再跟进分析一下Container组件的运行机制,大体如下图所示。(Container 组件又称 Catalina,下文存在一定的混用,别混淆了) 这里面从Engine到Wrapper涉及到了几个细分概念,我们先不急着解释,可以先从我下面偷的这张图来感受一下他们之间的层次关系。 能够看出来层次关系大致是遵循树...
Uncategorized
1.8k words
除了在月初的那几天短暂潇洒了一会儿,这个月的时间几乎都贡献给了济南的网安市场,而微信余额,则是贡献给了济南的租房市场。是的,我正在济南实习。 实习的公司,我不知道能不能算的上是一家大公司,名字叫绿盟,在网安行业里面其实也算是颇有名气。但如果是和隔壁的经十路长明灯相比,那确实就又黯然失色了不少。所以一般被朋友问到在哪里实习,我都不会直接说出绿盟的名字,而是旁敲侧击地暗示实习地点在浪潮附近,渐渐地,大家都觉得我在浪潮附近的咖啡店找了一份不错的新工作(扯淡ing)。 报道第一天,大概15号那会儿,老板特意在微信上叮嘱我,让我务必要穿的成熟一点,思来想去之下,最终选择了一件经典的红色格子衫。而之所以选择穿它去报道,并不是因为真的觉得它有多么的成熟好看,亦或者是符合技术人的精神面貌,而是这回带来的衣服,除了那几件休闲款式,剩下的都是些同行友商的logo衫,穿上过去效果不一定有我裸着过去合适。到了公司之后,第一件事并不是见老板,而是去见见我的导师,一个素未谋面、甚至连微信都还没加的导师。虽然他是我的导师吧,但年龄上其实并没有大我多少,甚至导师在企微上的头像还是个穿和服的路飞(大概是和之国篇的...
Uncategorized
2.9k words
前情提要基础原理分析当我们生成序列化文件的时候,里面的前两个字节的值如下 一个为-84,一个为-19 , 在一些反序列化的程序中,就会根据这两个的值判断当前传入流是否是序列化的流,进而决定是否进行反序列化操作,就比如我们的漏洞利用点com.mysql.cj.jdbc.result.ResultSetImpl.getObject()这一块,他就是依据前两个字节的值,决定是否反序列化。 Mysql认证报文Client 123456789101112import java.sql.*; public class Client { public static void main(String[] args) throws ClassNotFoundException, SQLException { String Driver = "com.mysql.cj.jdbc.Driver"; String DB_URL = "jdbc:mysql://127.0.0.1:3306/mysq...
Uncategorized
2.7k words
JNDI概述JNDI(Java Naming and Directory Interface,Java命名和目录接口)是为Java应用程序提供命名和目录访问服务的API,允许客户端通过名称发现和查找数据、对象,用于提供基于配置的动态调用。这些对象可以存储在不同的命名或目录服务中,例如RMI、CORBA、LDAP、DNS等。 JNDI包括以下提供者 LDAP 轻量级目录协议 RMI 远程对象注册表,具体内容可看RMI反序列化学习 DNS 域名解析服务 CORBA的COS服务 JNDI与RMIps :这个方法在jdk8u121后就被修复了,能碰到的话,评价是且用且珍惜 导入DemoJndiRmiServer 12345678public class JNDIRMIServer { public static void main(String[] args) throws NamingException, RemoteException { InitialContext initialContext = n...
Uncategorized
1.6k words
用来打Jinja2的一些常用Payload 基本流程寻找基类 寻找Object类 解释:在python中,object类是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默认继承object类。常用payload: {{().__class__.__mro__[-1]&...
Uncategorized
2k words
之前从来没用过sqlite,这次算是长见识了把环境配完后的界面是这样的,打开了一个encrypted的数据库,如果仔细看的话,可以发现他上面的所有数据都是加密的其创建语句大致如下: 1234567891011WITH bytes(i, s) AS ( VALUES(1, '') UNION ALL SELECT i + 1, ( SELECT ((v|k)-(v&k)) & 255 FROM ( SELECT (SELECT asciicode from ascii where hexcode = hex(SUBSTR(sha512('hxp{REDACTED}'), i, 1))) as k, (SELECT asciicode from ascii where hexcode = hex(SUBSTR(encrypted, i, 1))) as v FROM mw ...
Uncategorized
1.5k words
流程调试之加密根据网上的复现文章,我们知道在登录的时候会先调用DeafultSecurityManager这个类里面的login方法,这里直接来到这个目标类里,给Login方法加上一个断点。 流程解释 这里是在这个info这里先停了一下,根据我们传入的token对象,实例化一个名为info的AuthenticationInfo对象(token的属性包括当前输入的账号和密码,host路径和remeberme选项),这里的try和catch语句相当于一个判断是否登录成功的if语句 相关解释如下(来自new bing): ( AuthenticationException 是一个 Java 异常类,当访问命名或目录服务时发生身份验证错误时抛出此异常。例如,当用户程序提供的凭据无效或以其他方式无法将用户验证到命名/目录服务时,可能会发生身份验证错误 ) 这里我们是登录成功了,直接跳到如下部分 根据本类定义的createSubject方法生成了一个名为loggedIn的对象 这里因为login这个方法最终的返回值就...