序最近笔者因为项目原因需要使用sRDI反射dll注入技术,互联网上搜索了一下发现只有c和golang的相关实现。由于笔者项目使用的nim开发,并不适配我的项目,所以笔者花了点时间将sRDI用nim语言重新实现了一下.
sRDIsRDI是一个(Shellcode Reflective DLL Injection),它可以将DLL文件转换为位置无关的shellcode。它具有完整的PE加载器功能,支持正确的节权限、TLS回调和健全性检查。可以将其视为一个绑定了打包的DLL的Shellcode PE加载器.
关于sRDI shellcode执行流程大致如下
更多信息请参考sRDI — Shellcode反射式DLL注入技术
nim实现笔者共实现了两个功能,一是将dll转换为sRDI-shellcode的转换工具,二是一个shellcode的加载器
效果如下
首先需要使用sRDI将dll转换为shellcode bin文件
随后使用loader加载输出的bin文件即可
项目代码已上传到Github
本项目只供研究,学习,交流使用,请勿用于非法用途.
文章首发于土司论坛
序前段时间看到互联网上公开了一个瑞友天翼虚拟化系统的sql注入,恰巧笔者在去年也审计过这套系统。本文主要是分享一下在审计过程中顺带发现的一些实用的后渗透小姿势,其中文中分享的姿势也是帮助笔者在好几次多人运动中取得了不错的战果,希望分享出来能够对师傅们有所帮助。
数据库文件解密该系统默认数据库配置文件位于安装目录下Data/config/CasDbCnn.dat
默认使用mysql,监听端口为5873,其中对连接数据库的用户名和密码进行了简单的编码
关于解码的代码可以在ConDB.XGI中找到
解码很简单,将#替换为=后进行base64解码
NT凭证的获取之前在肝这套系统时,发现在创建web用户时会默认给该账户分配一个具有管理员权限的系统账户
其中添加的系统账户名为GWT+我们添加的web账户名,密码生成策略为GWT_+随机16位字符串。并将账户密码信息通过Crypt3加密并base64,最后通过AddNtUserToAllServer将要添加的系统账户同步给集群中的主机进行添加账户操作
添加完成后会将账户信息保存到CASSystemDS库中的cuser ...
Deserialization
未读序经过一个多月的忙碌,终于是有时间来更一下此系列的文章了,本文中会涉及到java反射和动态代理,如果你对相关不了解,建议先去学习下相关知识
CommonsCollectionsCommons Collections包为Java标准的Collections API提供了相当好的补充。在此基础上对其常用的数据结构操作进行了很好的封装、抽象和补充。
TransformerTransformer是一个接口,提供一个transform方法由实现类决定具体的转换逻辑
在Transformer实现类中,我们主要来看一下InvokeTransformer和ChainedTransformer
InvokeTransformer首先来看一下构造函数,Invoketransformer共有两个构造函数
其中第一个只需要传入一个String类型的methodName,另一个除需传入methodName外,还需要指定方法的参数类型以及具体的参数值
接下来看一下实现类的transform具体实现
在transform中在拿到传入的object后,利用反射调用自身实例化时传入的方法,并将结果返回
到这里In ...
Deserialization
未读序在上一节中我们大致讲解了Java中反序列化的基础知识以及造成漏洞的原因,这一节中我们主要来看一下URLDNS和HashMap在反序列化中的利用
URLDNS首先在java内置库中并没有叫做URLDNS的类,这个叫法主要来源于一个java反序列化利用工具ysoserial中的一个利用链的名称,其主要指的是java内置库中java.net.url类
根据官方文档介绍java.net.url类主要是用来访问URL网络资源,获取url对象等相关的信息
此类实现了Serializable接口
其中我们需要关注的只有两个方法,那就是equals和hashcode
equalsequals方法用于比较两个URL对象是否相等,比较依据为URL对象具有相同的协议,是否是相同的端口,以及是否具有相同的文件和片段
除此之外如果两个主机名都可以解析成相同的IP地址,则两台主机被认为是等效的,在这一过程中equals会对传入的url进行DNS解析
下面来看一下equals的比较流程
首先在equals中判断了传入对象是否是URL的子类,如果符合条件则调用this.handler.equals
其中this ...
Sectool
未读序在经过几个月的反复写bug和修bug的努力,Prometheus正式迎来了今年第一个大版本的更新
在此次更新中,我们对UI,用户交互以及载荷分发及个性化定制进行了升级和改进, 以确保在使用体验更加完美
关于Prometheus的发展历程,可查看《Bypass distribution platform from conception to implementation》
更新日志此次更新主要包括:
对登录界面进行重新设计,更加简洁、美观。
加强了载荷安全性,新版本中新的载荷将具有更强的反病毒对抗和反溯源能力。
增加了分发器自定义签名管理功能,使其具有更加灵活的签名伪造能力。
增加了分发器载荷时间限制,过期后将无法请求到配置及载荷等相关信息。
增加了更多的shellcode加载方式。
增加了对平台配置信息进行统一化管理,采用了动态入口机制。
效果展示登录页面UI在新版本中对登录页面的UI进行了重新的设计
个人感觉含还可以,至少比之前的好看
反病毒对抗能力在新版本中,我们对分发器底层代码进行了新的改进,并加入了bypass ETW的能力,使其在反病毒对抗和反溯源方面进一 ...
Deserialization
未读序首先,为什么要写这个系列的文章呢
主要是由于先前在刚接触这块内容时,仅做了相关分析.时间一长一些概念和具体细节渐渐忘却,所以此系列文章主要还是做一个复习和留存,方便日后查阅
其中需要说明的是分析流程可能不会太细节,但关键步骤都会展示.如果你对这方面从未接触过可以结合参考文章进行学习
序列化与反序列化在 Java 中,序列化就是将一个 Java 对象当前状态以字符串(字节序列)的形式描述出来,这串字符可能被储存/发送到任何需要的位置,而反序列化则是再将它转回原本的 Java 对象。
Java原生类库中提供了两个类用于序列化和反序列化操作,其中
java.io.ObjectOutputStream用于序列化操作
java.io.ObjectInputStream用于反序列化操作
其中在java.io.ObjectOutputStream中主要由writeObject函数实现序列化操作
而反序列化操作主要由java.io.ObjectInputStream的readObject函数实现
需要注意的是,要想序列化一个类则该类必须实现Serializable或者Externaliza ...