明源云接口管家任意文件上传
审计过程
找到相关文件所在位置再找对应的 Class
- 获取 apiocode 参数做为zip文件名
- 获取 post 数据
- 应用程序的根目录下面创建 Assembly 目录。
context.Request.PhysicalApplicationPath
将返回应用程序的根目录在服务器文件系统中的物理路径。 - 在 Assembly 目录下创建一个 apiocode参数.zip 文件,存在相同名字的zip就会先删除文件和目录再创建 zip
- 进入 Unzip.Decode
GetPostData 方法
private byte[] GetPostData()
{
HttpRequest request = HttpContext.Current.Request;
byte[] array = new byte[request.InputStream.Length];
request.InputStream.Read(array, 0, array.Length);
return array;
}
Unzip
- 读取传入的 zip 文件
- 获取目录的路径:
path.Substring(0, path.LastIndexOf("."))
的作用是从文件路径中提取文件名,去掉文件的扩展名。Assembly/1.zip => Assembly/1 - 解压文件:
zipEntry.Name
是用于获取一个压缩文件中条目(entry)的名称。Assembly/1/xxx.aspx - 最终访问到的文件路径:http://127.0.0./myunke/Assembly/1/xxx.aspx
网上的Exp 都是跳三层目录,有可能是上传目录做了禁止解析的操作。