前言
有一天,一个朋友过来问我冰蝎有没有魔法修改版。 我说我的冰蝎执行命令被拦截了,于是我开始趁这个机会分析冰蝎源码,寻找它的特点。
JSP一句话木马分析
冰蝎子两端开放,先分析它的JSP
为了便于分析,带入想法并格式化。
一个名为 U 的类继承。 这里我只给大家解释一下,避免解释过多,让大家难以理解。 只需将类文件加载到 JVM 中即可。 只要读者明白这一点...
获取对象,然后通过对象获取请求方法。 如果是POST方法,则往下...
定义一个key,因为它使用AES加密,然后将这个key存储在对象中,key为u,value为key。
通过对象实现的AES加密
然后初始化加密算法
初始化(整数,)
init API 使用给定证书中的公钥初始化此密码。 那么这里就解决了一个问题。 我在这里对 aes 加密或解密感到困惑。 后来穷文档发现第一个参数支持两种模式, , or ,然后他传入了一个int类型2进行解密。
然后传入上面声明的key作为key。 这是 aes 方法声明的结尾。
然后实例化当前类。 这种链式操作大大减少了代码量,但是对于分析人员来说并不是很友好。 这种写法需要从内到外的分析。
1、调用该对象,然后逐行读取请求包的内容。
2、调用sun包下misc中的方法进行解密
3、调用上例的aes算法对象,用aes解密
4、将内容传递给声明的方法g,内部调用方法将内容动态解析为类内容。
这里主要的方法就是给出API。 您可以搜索该API文档进行深入了解。
我们来谈谈这个实现的优点
不得不承认,《冰蝎》的作者很欣赏管理这样的先驱者。 原因如下: 对于一个控件来说,它最重要的功能就是命令执行,也就是类。 客户端向服务器发送命令,服务器获取内容并带入exec。 但的作者并没有这么做。 他选择了类加载方式。 客户端将class文件发送到服务器,服务器使用它加载到jvm中。 这样做的最大优点是可扩展性。 能做的事情不再局限于班级,能做的事情可以无限扩展。 从0到1是个大问题
客户
接下来我们看一下客户端的目录结构,这让我高兴不已。 当我再次看到这样的目录结构时,我流下了久违的泪水。 那些旧建筑项目的架构是一团糟。 这种架构和分层的思维为我后续的分析减轻了很多压力,而且我可以直接从pom.xml中下载依赖。
冰蝎使用数据库
只有两个核心表,主机和外壳表。 多对多关系,保存shell记录。
1.dao层负责查询数据
2. 该层负责数据库和应用程序之间的实体映射。
3.UI负责界面
4.util工具包
5.是客户端的功能实现
可以看到函数是如何实现的。 没什么好说的了,就是创建文件和删除文件。
谈谈特点
让我用这篇文章来反驳吧。
1.-type-Type:/octet-是一个强大的功能。 这就是流式传输,很多地方都使用流式传输,所以不能作为一个特性来使用。
2.user-Agent.我看了一下源码
Ice 中默认定义的agent 经检查并没有发现包含敏感特殊词,都是正常的UA 。 如果实在担心,可以修改默认的ua 。
&Cache-,文章说如果自己不定义的话,就使用默认的。
:文本/html、图像/gif、图像/jpeg、; q=.2, /*; q=.2
缓存-:无缓存
:无缓存
用户代理:java/1.8
这是正常的,大多数请求都没有定义自己。
综上所述,以上特征均属于强制特征。 如有必要,建议仅修改 ua 标头。
总结
看完整个代码,感觉Ice 的作者开发功底不错,采用了多种设计模式,方法也比较抽象。 每个方法都放在它该在的地方,但是作为一个数据库设计者,我认为host表和shell表中有很多冗余字段。
最后一句话,
在交通特征以外的记忆特征中,关键u算作1吗? 这作为记忆马检测非常强大吗?