文件上传(WEB安全攻防读书笔记)

0xx1 文件上传漏洞

  1. 产生原因

上传文件时,服务端代码没有对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的漏洞包括asp,php,jsp等

  1. 危害

非法用户利用上传的恶意脚本文件控制整个网站甚至控制服务器,这个恶意文件被称为WebShell,WebShell脚本具有非常强大的功能,比如,查看服务器目录,服务器文件,系统命令等

0xx2 文件上传绕过

  1. JS检测绕过

如果上传文件类型不允许,会弹窗通知,此时,文件并没有发送到服务器,而是在客户端浏览器使用JavaScript对数据包进行检测

    1. 可以使用浏览器插件,删除检测文件后缀的JS代码,然后上传
    2. 把需要上传的文件后缀改成允许上传的(如jpg,png等),绕过JS检测,然后再使用burpsuite抓包,把后缀名改回原后缀
  1. 文件后缀绕过

文件后缀绕过攻击是服务端代码中限制了某些后缀的文件不允许上传,但有些Apache允许解析其他文件后缀的(如,在httpd.conf中,存在如下代码,就可以解析php和phtml文件<AddType application/x-httpd-php .php .phtml>)

在Apache解析顺序中,是从右向左解析的,最右端扩展名不能识别,就会继续向左识别,直到遇到可以解析的文件后缀为止

  1. 文件类型绕过攻击

上传文件时,通过burpsuite抓包,发现,当上传PHP文件时,数据包中的Content-Type值为application/octet-stream,而上传jpg格式的文件时,数据包中的Content-Type值为image/jpeg

如果服务端代码通过Contene-Type来判断文件类型,就存在被绕过的可能

当上传PHP文件在burpsuite中,将Content-Type改为image/jpeg,就可以绕过检测

  1. 文件截断绕过攻击

截断类型:PHP%00截断

截断原理:因为00代表结束符,所以会把00后面的所有字符删除

截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc处于OFF状态

在上传文件时,服务器在上传文件名后拼接时间等作为文件名第二部分,此时,修改文件名为1.php%00.jpg,文件被保存到服务器时,%00会把.jpg和拼接的第二部分文件名全部截断,只剩下1.php

  1. 竞争条件攻击

网站允许上传任意文件,然后检查上传的文件是否包含webshell脚本,如果包含,则删除文件,但上传文件和删除文件存一个短的在时间差

    1. 可以先上传一个webshell 1.0,内容是生成一个新的webshell 2.0

Webshell 1.0:

         <?php

         fputs(fopen(‘../shell.php’ , ’w’),’<php @eval($_POST[a]) ?>’)

>

                  b)   当webshell 1.0上传成功后,客户端立即访问2.则会在客户端自动生成2.0

猜你喜欢

转载自blog.csdn.net/a1453514850/article/details/87928685