ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文件上传之WAF绕过及相安全防护

2021-08-12 01:33:22  阅读:482  来源: 互联网

标签:双引号 WAF filename 绕过 php 上传


文件上传在数据包中可修改的地方

  1. Content-Disposition:一般可更改

  2. name:表单参数值,不能更改

  3. filename:文件名,可以更改

  4. Content-Type:文件 MIME,视情况更改

常见绕过WAF的方法

  1. 数据溢出-防止WAF匹配(xxx...)'
  2. 符号变异-防止WAF匹配(' " ;)
  3. 数据截断-防止WAF匹配(%00 ; 换行)
  4. 重复数据-防止WAF匹配(参数多次)

WAF绕过简单演示

我以靶场upload-labs第二关进行演示。
我们开启安全狗的上传防护:
image
第2关上传一个php文件,被安全狗检测到且被拦截:
image
php加上空格"ph p",可上传,但无法解析。
image

1. 垃圾数据溢出法

  • filename的内容进行溢出。
    image
    filename的内容进行溢出虽然可以绕过WAF但是我无法将php文件上传至服务器。
    image
  • name与filename之间进行溢出
    也可绕过WAF但是无法上传php文件。
    image
    image
  • 大量垃圾数据后加“;”
    Content-Disposition与name之间的垃圾数据加上分号可绕过安全狗。
    image
    可成功上传php文件
    image
    经测试,name与filename之间的垃圾数据也可绕过。
    image

2. 符号变异绕过

可用payload:

filename=" xx.php
filename="x x.php
filename=' xx.php
filename='x x.php
  • filename的内容用单引号括起来(被拦截)
    image
    显然被拦截
  • filename去掉最后一个双引号(被拦截)
    image
    被拦截
  • filename去掉最后一个双引号,再加上分号(后缀不能被解析)
    image
    可绕过,可上传,但是无法被解析
  • filename去掉最后一个双引号,在文件名后缀前任意位置加空格(可行)
    image
    可绕过WAF,可上传。
  • 单引号与双引号一致。
  • 只在末尾加双引号(被拦截)
    image
  • 文件名前加双引号或单引号(无法解析)
    文件名前加双引号或单引号可绕过waf,也可上传,但是无法解析。
    image
  • 文件名中加入图片后缀提前用分号截断

3. 数据截断绕过

可用payload:

filename="x.jpg;shell.php"
filename="x.jpg;shell.php
filename='x.jpg;shell.php
filename="shell.php%00xx.jpg" 注意%00要编码
  • 文件名中加入图片后缀提前用分号截断(可行)
    原因是防护软件只检测前面的部分,一旦正确就放行,不再检测后面的
    image
    同理结合符号变形可有:
filename="x.jpg;shell.php
filename='x.jpg;shell.php
·····
  • 文件名中用%00url编码截断(可行)
    image

4. 数据换行截断

可用payload:

x.ph
p

x.p
h
p

x.
p
h
p

x
.
p
h
p
  • 直接在数据包中进行换行操作(可行)
    image
    image
    image

5. 重复数据绕狗(参数多次)

  • 重复filename
    前面的filename为可接受的文件格式,最后一个为php文件格式,前面的重复多次,可绕过。
    image
  • filename中配合其他参数
    配合Content-Type: image/jpeg:

6. "/"与";"配合绕过

payload:

filename="/jpeg;x.php"
filename="/jpeg;/x.php"

image
image

7. FUZZ字典配合

字典地址:

https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/fuzzdb-project/fuzzdb

手工测试的话有点麻烦,我们可以借助写好的字典配合BP进行批量测试,先在本地测试好了,再在真实环境进行测试,以防会封IP。
我借助fuzzDicts的php字典进行测试。
首先将拦截的数据包发送至Intruder
image
清除所有变量
image
将filename的值设置为变量
image
payload加载字典:
image
开始攻击:
image
能否成功取决于字典的好坏。

安全及修复建议

  1. 后端验证:采用服务端验证模式
  2. 后缀检测:基于黑名单,白名单过滤
  3. MIME 检测:基于上传自带类型检测
  4. 内容检测:文件头,完整性检测
  5. 自带函数过滤:参考 uploadlabs关卡的函数
  6. 自定义函数过滤:function check_file(){}等
  7. WAF 防护产品:宝塔,云盾,安全公司产品等

标签:双引号,WAF,filename,绕过,php,上传
来源: https://www.cnblogs.com/zhaohzaomumu/p/15130641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有