一、简单的文件上传实例
二、绕过内容检查
- 内容检查就是对用户上传的文件的文件内容进行分析,查看该文件是否符合上传规范。例如用户上传了一个php文件,程序在检查该php文件内容时没有找到符合规范的文件内容那么就不允许该文件的上传(如文件头等)。
- 对于这样的检查,我们可以使用抓包工具来修改上传文件的文件头实现绕过,例如:
下图为我们想要上传的文件,文件的内容是一句话木马。如果存在对文件内容的检查,因为该文件的文件内容不存在规范的文件头,所以一般是无法上传成功的。
但其实我们只要在文件内容的开始位置加上文件头即可绕过该限制(不同文件类型有不同的文件头,可自行百度),如下。
三、绕过白名单限制
(1) 白名单限制就是只允许上传某一种或某几种后缀、类型等的文件。
- 例如下面限制文件类型的一段代码:
- 对于文件类型的限制,我们只需要修改文件包中的Content-Type项即可。
(2)对于文件后缀的白名单限制:
- 这类的限制方式是比较复杂的,不同的检测方式有不同的处理方法。
- 例如直接对上传文件名进行拼接,并使用GET传递参数的限制。
-在PHP小于5.3.4且php-ini配置文件中magic_quotes_gpc打开是,我可以使用%00截断的方式绕过。 - 第二种使用POST方式传递参数的限制:
这种方式需要在二进制文件中进行修改,因为post不会像get那样对%00进行自动解码。
使用工具,如果是burp suite则点击hex按钮,找到对应位置并修改(可以在上图的php之后添加空格,然后在下图中找到空格位置20,把它修改为00)。
四、绕过黑名单限制
-
黑名单限制就是不允许某一种或几种文件后缀、类型等的文件进行上传。
-
若没有将后缀进行大小写统一的限制,则可以通过改变大小写的方式进行绕过。即将php修改为Php等行为。
-
若没有对文件后缀名进行去空格处理,则可以通过在文件后缀名后加入空格进行绕过。
-
若没有对文件后缀名进行去
“.”
处理,则可以通过在文件名后加“.”
,利用Windows系统的文件名特性,自动去掉后缀名最后的“.”
, -
若没有对文件后缀名进行去
::$DATA
处理,那么可以通过在文件名后加::$DATA
,利用Windows下NTFS文件系统的一个特性,即NTFS文件系统存储数据流的一个属性$DATA
,当我们访问aa.asp::$DATA
时,就是请求aa.asp
本身的数据。 -
若只进行了末尾去
“.”
和末尾去空格的操作,则可以构造点+空格+点的后缀格式进行绕过。例如:sdm.php. .
-
若是对黑名单限制的后缀名替换为空格,则可以通过双写后缀名的形式进行绕过。例如:
sdm.phphpp