文件上传也算是CTF-Web的一大类题型了,同时也是在实战中有时候也会用到,今天就来总结一下文件上传漏洞的分类以及使用

这里可以推荐一个文件上传的靶场,虽然我自己也是听说过还没做过。。。。

c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场 (github.com)

下面开始总结一下此类题型

先从验证方式可以分为:

  • JS前端验证
  • 服务器验证

JS前端验证可以直接忽略,直接禁用掉CS,但前端验证一般不会单独出现,一般只会作为第一层验证

而最主要使用的都是服务器验证,服务器验证又有以下方式:

  • MIME验证
  • 文件头验证
  • 后缀名验证

服务器验证就不是单单使用浏览器那么简单了,想绕过服务器验证,你要准备:Brupsuite抓包工具和一句话木马

1.MIME验证绕过

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,也就是设定某种扩展名的文件用一种应用程序来打开的方式类型,具体在http包的header的Content-Type参数中写着。

假如上传一个php文件,抓包后看一下Content-Type

我们发现上传php文件是Content-Type: application/octet-stream 。如果想让服务器通过MIME来判断文件是图片类的,就将Content-Type的值改为下面的即可绕过MIME判断

  • PNG: image/png
  • JPG: image/jpg
  • GIF: image/gif
  • MP4: video/mp4

2.文件头验证

各类文件头总结

MIME毕竟很容易改,所以文件头验证也是很常用的一种方式,我们使用Winhex查看一下png文件的文件头

由于png的ASCII文件头不是很好打出来,所以一般绕过文件头验证都会使用GIF的文件头也就是“GIF89a"

这个是将一个PHP马改了Content-Type和文件头之后的效果,这样就可以绕过服务端验证

3.后缀名验证

这里还要提到服务端验证的另一个分类:

  • 白名单验证
  • 黑名单验证

顾名思义,白名单验证就比如只允许图片类上传,其他全部ban掉;黑名单就比如禁止php、jsp等文件上传,其他默认允许。

A 黑名单绕过:

  • 1、大小写绕过 windows对大小写不敏感,所以上传大小写混写的php进行绕过
  • 2、重写绕过: 服务端将黑名单的后缀名替换掉,可以上传.phphp p后缀,替换后就成了.php
  • 3、特殊可解析后缀绕过: 黑名单规则不严谨,在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml等

就比如这次这道题就是使用了 MIME验证、后缀名验证、文件头验证、还加了个<?验证,所以我们使用.phtml的一句话木马,使用<script language="php">标签来代替<?php

<script language="php"> @eval($_POST['shell']); </script>

B 白名单绕过:

  • 1、%00截断、0x00截断
  • 2、图片马绕过
  • 3、条件竞争绕过

这里重点说下条件竞争,前提是服务器是先上传再检测。有问题的删除,这时候就可以先抓一个上传包,然后用bp疯狂上传生成马的马(套娃了),比如

file_put_contents('2.php','<?php eval($_REQUEST[8])?>');

bp这边疯狂上传,再用python或者还是bp去疯狂访问这个马,还是照应了名字:”条件竞争“,就是在服务器检测文件删除之前访问,生成真正的马。

这里重点说了php的马,jsp和asp同理,这里要提一句的是今年的河南省金盾信安杯S3的一道upload题目,上传压缩包会自动解压,考了路径穿越,也就是把压缩包名改成../xxx的格式将压缩包解压到网站根目录

具体有关金盾信安杯S3的WP可以看WKR师傅的博客:河南金盾信安杯S3 2021 WriteUp

最后,一句话木马的利用

PHP的一句话木马是使用eval函数去执行POST过来的参数中的语句,虽然直接把payload POST过去也行,但岂不是太麻烦了,还是使用链接工具方便,一句话木马的连接工具有:

  • 菜刀(大多数版本带后门,不建议使用)
  • 蚁剑
  • 冰蝎
  • 哥斯拉

这里我们使用蚁剑来链接上传上去的一句话木马

URL地址就是木马的直链,密码就是POST过去的参数,其他一般情况下默认就可以,连上之后就可以看到靶机的文件了

这时就可以在靶机内找flag了

总之做CTF的WEB题还得思维够活跃,文件上传类题目也会有很多洞

文章就到这里了,如果有问题欢迎各位师傅指正!

届ける言葉を今は育ててる
最后更新于 2022-03-18