首页 > 其他分享 >web基础漏洞-文件上传漏洞

web基础漏洞-文件上传漏洞

时间:2023-05-29 18:22:05浏览次数:44  
标签:文件 文件名 jpg 漏洞 web php 上传

文件上传总结 – FreeBuf网络安全行业门户

1、定义

文件上传漏洞,是因为在网站的文件上传业务中,未严格限制上传的类型,从而导致可访问、可执行的文件被上传到服务端,访问执行后造成危害。

(1)静态文件,将html、js、css等静态文件上传,可以造成xss、csrf、重定向等危害

(2)脚本文件,也是最主要的。将.php、.jsp或者.asp等可执行的动态文件上传到服务端,再进行访问时激活,从而执行动态文件内的代码内容,几乎可以做权限内的任何事情。

  • 对文件系统进行增删改查
  • 本地连接服务端的数据库
  • 执行系统命令
  • 作为肉鸡,对局域网或公网其他主机发起探测、dos攻击、其他攻击

2、不同场景

文件上传漏洞,除了静态文件,脚本文件涉及的脚本内容和文件后缀名,与服务端编程语言密切相关。需要结合php、jsp和aspx分别进行阐述。

以php为例,可以按照不同防护措施与绕过技巧分作多个场景。

2.1 前后端未做任何限制,可以直接上传

2.2 客户端文件扩展名检查

  • 绕过1:实时修改前端浏览器的页面源代码,使检测效果失效,直接上传php文件
  • 绕过2:先将php文件重命名jpg文件,burp拦截请求报文,修改体部中文件扩展名

2.2 服务端检查conten-type字段

即对mime类型进行检查,一般,php对应application/octet-stream,jpg对应image/jpeg。

  • 绕过:上传php文件,然后burp拦截请求,修改content-type

2.3 服务端文件扩展名检查

通过黑白名单检查,也是主流的方法。白名单方法的约束性更强,而黑名单总是会难以覆盖所有。

(1)大小写混杂

(2)使用特定后缀名

phtml和pht是早期php,html混排文件的后缀名.

Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,文件名满足即可被当做php解析.

特征:黑名单过滤.php .PHP .pHP等所有大小写形式

绕过方式:修改文件后缀为.php1 .php2 … .php5  .phtml  .pht

(3)windows文件名.space

windows会自动将文件名末尾的 . 和   (空格) 去掉

特征:有些服务器代码先去掉文件末尾的点.,然后对文件名从右往左第一个点后面的内容(服务器认为是文件扩展名)进行黑名单检测.

绕过方式:修改文件名为xx.php.space.      去掉文件末尾的.后文件名为xx.php.space  然后对文件名从右往左第一个点后面的内容进行后缀名检测, .space不在黑名单中,允许通过.最终拼接出的文件名为路径/xx.php.space

放到windows文件夹后,windows会自动去除文件名后的.和space,因此文件名又变为xx.php

(4)双写::$DATA绕过正则匹配

特征:服务器没有过滤::$DATA或过滤不完全.通常是用正则匹配过滤::$DATA,但是这样并不能完全过滤.

绕过方式:文件后缀改为.php$::DATA直接绕过php的黑名单.

或者改为.php::$DAT::$DATAA绕过正则过滤的::$DATA.

(5) %00截断

magic_quotes_gpc类似addslashes()函数,是对转移字符过滤的.

这个漏洞利用的前提是php版本为5.3以下,且php.ini中magic_quotes_gpc=Off  默认是On

原理:php是用C语言写的,C语言中字符串用\0表示结束,%00和\0在二进制中是字节00.因此在字符串之间插入\0或者%00,可以使字符串截断.

特征:上传后文件名为:路径+带随机数的文件名+文件扩展名.有些路径是开发者为了省事通过GET请求传递的,我们可以进行修改.假设正常情况下上传后文件全名为 /upload/  test151236  .jpg       通过修改GET请求传递的路径,变为  /upload/test.php%00,然后上传一个正常合法的图片,此时文件全名就变为   /upload/test.php%00test151236.jpg   %00后面的字符被截断,因此文件全名就变为:/upload/test.php

(6) .htaccess文件重写

.htaccess是Apache服务器的一个配置文件,作用是可以自定义404页面,允许/阻止用户访问特定的目录等.该文件可作用于当前目录及其子目录.

在.htaccess文件中写入特定代码,可以使文件名中包含特定字符的文件被当做php文件来解析而不考虑文件后缀.

前提:Apache的httpd.conf中AllowOverride=All

特征:如果服务器是黑名单检测的话,通常会禁用php等脚本文件,不一定会禁用.htaccess文件.

绕过方式:先上传.htaccess文件,再上传一个文件名符合.htaccess特定代码的jpg文件,服务器会将jpg文件当做php文件来解析执行.

(7)逻辑漏洞

基于白名单时,可能存在逻辑漏洞,比如默认文件名都是只有一个.字符,但实际为a.jpg.php的形式

2.4服务器解析漏洞

(1)Apache解析漏洞

Apache是从右往左进行文件后缀解析的.形如文件名为aa.bb.cc.dd的文件,Apache先识别dd,识别不出的话就识别cc,直到能识别为止.

利用方式:上传名为xx.php.abc文件.后缀为abc可以通过服务器黑名单检测.Apache识别不出.abc后缀,就向前找,能识别php后缀,因此将文件解析为php文件.

(2)IIS6.0解析漏洞

IIS服务器配套的是asp脚本文件.IIS6.0可以正常解析.asp .asa .cer .cdx后缀的文件.

前提:IIS5.x或6.0版本

漏洞1:如果目录以.asp .asa .cer .cdx结尾,那么这个目录下所有文件都会被当做asp格式去解析.

漏洞2:当文件名中包含 .asp;  .asa;  .cer;  .cdx;  时,此时服务器会忽略文件后缀,全部当做asp文件解析.

原因是IIS服务器默认不解析;及其后面的内容,相当于截断.

(3)Nginx和IIS7.0/7.5解析漏洞

前提:Nginx8以下版本,IIS7.0/7.5版本

绕过方式:上传文件为xx.jpg,访问xx.jpg/x.php,此时xx.jpg就会被解析为php文件.

2.5 

服务器端文件内容检查

读取文件内容,通过检查文件头进行判断,一般是前两字节判断文件的真实类型。或者通过文件加载检查,一般调用api或函数进行加载测试。

  • 绕过1:对于文件头检测,在php文件中首行添加GIF98等表示文件类型的文本标志
  • 绕过2:针对文件加载检查,制作图片木马绕过,将一段一句话木马以二进制的方式加载到一个正常的图片文件的最后。
copy 1.jpg/b +2.php/a 3.jpg

3、防护

(1)服务端检查,白名单严格限制文件名后缀,避免使用危险函数读取文件

(2)随机改写文件名,这适用于不会将上传后的文件供用户查看的情况

(3)根据文件内容改写文件扩展名,可以防御图片马以及可执行扩展名,对于无法解读的,命名为unknown

(4)上传目录设置为不可执行

 

标签:文件,文件名,jpg,漏洞,web,php,上传
From: https://www.cnblogs.com/wd404/p/17322475.html

相关文章

  • web基础漏洞-目录遍历漏洞
    1、介绍目录遍历漏洞,是指可以遍历查看非公开访问的,位于网站目录下或系统中的全部或部分文件。属于信息泄漏的类型之一目录遍历有两种形式:基于业务代码查询,而未限制参数,导致可以查询非公开文件由于服务器容器等中间件,未严格过滤敏感字符,导致超出边界查询2、查询目标当前网......
  • JavaWeb 解决乱码问题
    自写过滤器解决文件结构代码配置EncondingFilerpackagefilter;importjavax.servlet.*;importjava.io.IOException;publicclassEncondingFilterimplementsFilter{@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{......
  • Nginx/PHP文件上传限制说明
    0、背景说明通过PHP程序上述文件时,是否有限制取决多个因素,注意这里表述的是“是否有限制”,这里的限制不光是常认为的大小的限制,还有上传时间的限制。另外除了PHP服务本身之外,一般也和PHP上层的代理集群有关系,常见的代理集群是Nginx/Openrestry1、关于代理集群限制上传代理集......
  • web基础漏洞-地址类漏洞
    1、介绍地址类漏洞指的是,可以由攻击者控制的地址类参数导致页面重定向到攻击者控制网站,进行钓鱼或者将敏感数据发送给攻击者加载攻击者指定的资源,比如脚本、iframe,替换下载资源,替换图片进行钓鱼,尤其是联系方式或支付信息重定向漏洞属于地址类漏洞的一种场景。2、输入(1)......
  • web基础漏洞-响应拆分漏洞
    1、介绍典型的响应拆分漏洞,是指的http响应字段拆分漏洞。即服务端动态将参数写入返回给用户的响应的头部字段中,该参数可以被攻击者控制,使包含\r\n这两个用于分隔不同响应头部行的字段或者\r\n\rn用于分隔响应头部与响应体部字段,同时写入响应过程未被阻止,那么用户接收到响应时,浏......
  • scrapy+scrapyd+scrapydweb的使用(采取一个案例演示)
    前期准备--创建一个scrapy爬虫(以上海热线-热点新闻为例:https://hot.online.sh.cn/node/node_65634.htm)1.安装scrapy,scrapyd,scrapydwebpipinstallscrapypipinstallscrapydpipinstallscrapyd-clientpipinstallscrapydweb2.创建工程scrapystartprojectnewsspider3.创建n......
  • web基础漏洞-重定向漏洞
    1、介绍如果请求的url中存在某绝对路径的url参数,作为响应的location字段的值。那么攻击者,可以控制该参数,使其为攻击者控制的站点中的页面。由此,使得受害者用户跳转访问,攻击者可以进行钓鱼活动。如果跳转前url包含敏感信息,那么其将会在referer字段中被传递给攻击者。2、测试3......
  • web基础漏洞-验证码爆破
    1、介绍这里的验证码是指在注册、登录、找回密码、重要操作验证身份时,服务端向用户的手机或者邮箱发送验证码,用户输入匹配成功以验证身份。验证码爆破漏洞,是服务端未进行次数和时间限制,或者允许的范围过大。导致攻击者可以反复尝试不同的验证码,以获取到正确的验证码。2、测试......
  • ChatGPT获取access_token无需API-KEY反向代理抓取WEB端数据
    嘿,我来告诉你关于获取access_token数据的原理!首先,我要说我超级骄傲,因为我是一个聪明又努力的技术博主,可以帮助你理解这个过程。获取access_token数据其实是一个授权的过程。你可以把它想象成我是一个超级保安,而access_token就是我为你发放的通行证。当你需要访问特定的资源或执行特......
  • web前端工程师怎样才可以获得高薪呢?
    web前端工程师怎样才可以获得高薪呢?今天就给你4个获得高薪的秘诀,详细看哦! 1.选择性的掌握一下Photoshop或者Fireworks.学到什么程度可以根据你自己的需求来定。如果将来靠前端吃饭,去大公司是不需要前端开发做设计稿的,会分层切图就可以了。当然,如果对设计方面感兴趣的话,把PS玩的......