upload总结

学习学习

Posted by lll-yz on January 6, 2021

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.4php.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.jpgindex.php::$DATA

在Linux系统中,可以尝试上传index.php/../aa/../index.php/.

白名单的绕过:

  • %00截断
四、服务端的文件内容检测

可以将一句话插入图片中上传,在利用文件包含漏洞解析php。

二次渲染

条件竞争