文件上传

  文件上传是利用服务端所提供给你的权力,本意是让你们上传一些有意义的东西,但一些人就从中发现了一些可以利用的漏洞,上传一句话木马进去,这就是典型的文件上传漏洞,靠我们去猜过滤,从而绕过它。那么有以下几种方式的过滤和绕过方法。

前端检测

  对于前端的概念就是我们能看到的源码的那种,我们可以打开F12或者ctrl+U找js代码,原理就是前端是客户端还没有向服务器发送任何消息时对本地进行检测来判断是否满足上传的类型。
  绕过方法

  • 删除或者禁用js(JavaScript) 各个浏览器有不同的方式
  • 使用代理上传文件,用BP抓包修改成符合要求的文件类型,使用方法转至BurpSuite

后端检测

  这种的就不能靠抓包提前去改了,主要是通过黑白名单进行过滤检测。

白名单绕过

解析漏洞(黑名单通用)
1
2
3
4
.htaccess文件解析漏洞   //重点常考点(有没有老师划重点的那味了- ̗̀(๑ᵔ⌔ᵔ๑))
apache解析漏洞
IIS7.0 | IIS7.5 | Nginx的解析漏洞
IIS6.0解析漏洞

  关于这些解析漏洞我就不细讲了,对照相应的搜索一下就可以了,这些漏洞后续也会在对应板块出现。

截断上传(黑名单通用)
  • 截断类型:PHP%00截断 (扩展想想还有哪个函数也是这样的),例如1.php%00
  • 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断,同理,黑名单也可以用,不过我用得少
  • 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态

改后缀

  将php木马改成满足条件的后缀即可,例如1.php => 1.jpg

黑名单绕过

特殊的扩展名

  如果是黑名单的就可以钻空子,看有没有漏网之鱼,例如

1
2
3
4
5
6
比如:
asa和cer之类
asp: asa cer aspx
jsp: jspx jspf
php: php php3 php4 php5 phtml pht (划重点)
exe: exee
利用windows的命名机制

  在windows中,后缀名后面的点和空格都会被删除掉。例如

1
shell.php.   shell.php空格   shell.php:1.jpg   shell. php::$DATA   shell.php:1.jpg
双写绕过

  有时候在检测时,后台会把敏感字符替换成空格,这个时候,我们可以使用双写进行绕过。SQL注入同理,,例如:phphpp

大小写绕过

  后缀名本质上是不区分大小写滴,例如pHp,但后端检测的时候就说不准了,同理呢,SQL语句过滤也是这样的道理。要举一反三噢グッ!(๑•̀ㅂ•́)و✧

MIME检测

  MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。用你的BP打开,类似于这些:

1
2
3
4
5
6
7
8
9
10
text/plain (纯文本)
text/html (HTML文档)
text/javascript (js代码)
application/xhtml+xml (XHTML文档)
image/gif (GIF图像)
image/jpeg (JPEG图像)
image/png (PNG图像)
video/mpeg (MPEG动画)
application/octet-stream (二进制数据)
application/pdf (PDF文档)

  检测方式:在文件上传过程中,服务端会针对我们的上传的文件生成一个数组,这个数组其中有一项就是这个文件的类型file_type;服务端对文件进行检测时,就是通过检测脚本中的黑白名单和这个数组中的file_type进行对比,如果符合要求就允许上传这个文件。绕过方法我们就只要将content-type字段改为常见的允许放行的图片类型,例如image/gif,从而绕过校验。

文件头绕过

  我们可以把上面的文件头添加到我们的一句话木马内容最前面,达到绕过文件头检测的目的。比如
GIF木马

内容检测图片马绕过

  将一句话木马插入到一个合法的图片文件当中,然后用webshell管理工具(蚁剑)连接,当然这边建议你先用phpinfo试一下,一方面有的时候flag就在里面,另一方面能验证是否上传成功。相关文章:图片马

条件竞争漏洞

  这个就很高深了,需要熟练使用BP,入门建议先别看。相关文章:条件竞争

结语

  文件上传目前常用的就几种,主要我也只会这几种,重点在于多做做题目,推荐题库:NSSCTFBUUCTFBugkuCTF,光上面几个就够你试的了,不详细的地方再去搜索一下,要是后续遇到新的方法我也会实时更新的。