upload总结
一、前端的JavaScript检测
该类代码检测直接写在网页中,一般提交后,立即有弹窗提示禁止上传,就可以判断为前端检测,或者直接右键查看页面源码。
一般的检测手段为:文件后缀名检测,文件大小检测。
一般的绕过方法:
-
禁用前端的JavaScript检测:
可以直接将浏览器上的JavaScript按键关闭。
-
F12,修改页面中的js检测代码
-
用burp改包:
写一个一句话木马1.php,先将文件后缀修改为白名单后缀(png, jpg, gif),抓包后修改后缀为
php
。
二、服务端的MIME检测
文件内容类型或者说通过抓包你一定听说过 Content-Type: text/html 这种类似的,其实,这就是MIME。
MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。
常见的MIME类型,例如:
- 超文本标记语言文本 .html,html text/htm
- 普通文本 .txt text/plain
- RTF文本. rtf application/rtf
- GIF图形 .gif image/gif
- JPEG图形 . jpg image/jpeg
MIME验证绕过的方法比较简单,只要直接更改上传数据包中的
Content-type即可。
三、服务端的文件后缀名检测
一般的检测手段:
黑名单过滤:黑名单的安全性比白名单低很多,很容易忽略一些危险脚本类型,常见的黑名单:
文件类型 | 扩展名 |
---|---|
HTML | html、htm、sthml、shtm |
PHP | php、php2、php3、php4、php5、phtml、pwml |
ASP | asp、aspx、ascx、ashx、asa、cer、cdx |
JSP | jsp、jspx、jspf |
其他 | xml、ini、htaccess、cgi、pl、js、exe、bat、swf |
白名单过滤:仅允许指定的文件类型上传,比如仅允许上传jpg、gif、png等文件类型的文件。
一般的绕过方法:
黑名单的绕过:
- 大小写绕过
若代码没有进行小写转化,且黑名单中没有大小写后缀,我们可以用Php、Php5等进行大小写绕过。
- 特殊文件(.htaccess文件)绕过
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。
若黑名单中没有.htaccess
,我们可以上传.htaccess
文件:
SetHandler application/x-httpd-php
使得服务器将所有后缀为.jpg
的文件当做php文件来解析。
来达到上传文件转化为.php
的目的。
- %00截断
%00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0
(即0x00
)作为字符串的结尾。操作系统在识别字符串时,当读取到\0
字符时,就认为读取到一个字符串的结尾符号。因此,我们可以通过修改数据包,插入\0
字符的方式,达到字符串截断的目的。%00截断通常用来绕过web软waf的白名单限制。
前提条件:
php版本小于5.3.4
,php.ini的magic_quotes_gpc为OFF状态
。之后的php版本这个漏洞就被修复了。
例:www.xxx.com/1.php%00.jpg
会被解析为:www.xxx.com/1.php
。
- 利用系统特性绕过
在Windows系统中,上传index.php.
会重命名为index.php
,可以绕过后缀检测。也可尝试index.php空格
、index.php:1.jpg
、index.php::$DATA
等
在Linux系统中,可以尝试上传index.php/.
或./aa/../index.php/.
。
白名单的绕过:
- %00截断
四、服务端的文件内容检测
可以将一句话插入图片中上传,在利用文件包含漏洞解析php。
二次渲染
条件竞争