WEB安全——文件上传靶场记录

文章目录

  • WEB安全——文件上传靶场记录
  • 文件上传的思路与分类(图片转自小迪):
  • 一、前端验证的绕过 Pass 01
  • 二、验证绕过——白名单
    • 1.MIME验证绕过 pass02
    • 2. %00 /00截断与0x00截断 pass12、13
      • 1.%00截断:
      • 2. 0X00截断
  • 三、验证绕过——黑名单
    • 1. 文件后缀验证绕过 pass03
    • 2. htaccess解析绕过 (基于使用apache服务器搭建的网站) pass-4
    • 3. 大小写绕过 pass06
    • 3. 空格/点绕过 pass07/08
    • 5. 递归过滤 pass 10
    • 6. ::$$DATA绕过 pass09
    • 7. 重复后缀名绕过 pass11
  • 四、验证内容绕过
    • 1. 文件包含漏洞中的文件头检测绕过 pass14/15/16
  • 五.二次渲染绕过
  • 六.条件竞争
  • 六.服务器解析漏洞
    • 1. **Apache 解析漏洞:**
    • 2. **IIS6.0 漏洞**
    • 3.**Nginx 漏洞**

文件上传的思路与分类(图片转自小迪):

一、前端验证的绕过 Pass 01

由于网站使用的是 前端js验证 checkfile函数 并会弹出弹框不允许脚本格式图片上传
所以可以直接修改网页代码删除checkfile函数,再上传图片。
这种情况用burp是抓不到包的,只有上传时有提交动作(上传到服务器)才能抓到包 ,当对方页面为html或在js代码写的本地端代码则抓不到

二、验证绕过——白名单

1.MIME验证绕过 pass02

MIME的解释:链接: link.
查看源代码发现,后端PHP代码只对content-type进行了检查,文件类型验证方式为白名单绕过中的查看文件(头)类型,则可以通过修改文件类型绕过 。

上传正常的图片并抓包发现:

文件类型为:image/jpeg,按照题目要求只要文件头类型content-Type为image/jpeg格式就可以上传成功。当我们上传php格式文件时:文件类型为Content-Type:application/octet-stream,所以我们在bp中 将其改为
content-Type: image/jpeg,打开代理放包即可上传成功。

2. %00 /00截断与0x00截断 pass12、13

适用于php版本5.3以下
这个链接中的大佬将原理讲诉的很清楚 ——>链接: link.

1.%00截断:


原理:
在 url 中的%00(不是普通文本!!)表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。比如: https://mp.csdn.net/upfiles/?filename=test.txt 此时输出的是test.txt
加上%00 https://mp.csdn.net/upfiles/?filename=test.php%00.txt此时输出的是test.php 就绕过了后缀限制,可以上传webshell了。
Pass12 解析:

因为上传方式为get方式,自动解析为url,所以直接在bp中修改后缀为:

原理:后缀验证的返回结果 采用文件名拼接在目录名后的验证方法即文件名为1.php后缀名为1.jpg则拼接后为1.php1.jpg 。所以利用%00的特性实现绕过。

2. 0X00截断


这时候就要利用0x00截断原理了,具体原理是 系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。
注意:
是文件的16进制内容里的00,而不是文件名中的00 !系统按16进制读取文件(或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。
0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制
操作:

这里在php的后面添加了一个空格和字母a,其实a写不写都可以,这里加a是为了显示空格的位置。空格是为了占位,方便修改00。
然后打开hex,(空格的16进制为0x20)修改16进制内容,把20改成00:

修改完成后,原来的文本显示也发生了 变化:

那个方框的位置就是0x00,只不过这是一个不可见字符,无法显示。
当系统读取到方框,也就是0x00时,认为已经结束,不会再读取后面将要拼接的1.jpg,认为是php文件,完成绕过:

这就是0x00的原理,总之就是利用ascii码为零这个特殊字符,让系统认为字符串已经结束。

Pass 13解析:

观察代码发现为post解析方式,抓包,扔给重发器,找到对应行,php后加个空格
到hex中找到这行php后边的空格 即20(url编码空格为%20)
将20改为00,返回raw,php后面得空格变成一个口,发送即可。

注意:
get会自动解码,post不会自动解码只有进行url编码后%00才被解析。即:经过post上传,并且/uploads/是隐藏在post表单里的数据,则这个路径因为放在post中内,没有经过URL编码而直接进入了验证函数,所以0x00会成功截断。

三、验证绕过——黑名单

1. 文件后缀验证绕过 pass03

通过分析源代码得知


此验证类型为验证文件后缀类型,即:如果文件类型为array数组里的类型时,is_upload=false,阻止上传,所以可以在bp中通过抓包修改文件后缀类型达到绕过效果。

同样可以上传其它格式或版本后缀名达到绕过,能否正确实行取决于web所属服务器配置

2. htaccess解析绕过 (基于使用apache服务器搭建的网站) pass-4

先上传一个.htaccess后缀的文件,文件包含:

其中"muna"为接下来上传文件的文件名,由于.htaccess会将""中的文件解析为php格式,直接解析其中的php代码,所以可以达到绕过效果,都是注意要修改上传的执行文件的后缀为jpg等,虽然上传的时图片格式,但是会解析为php格式。(注意创建文件不要用记事本,可以用note+)

3. 大小写绕过 pass06

如果原码中为出现大小写检验,或不将文件信息统一转换为大/小写(未出现下图下划线意思的检验方式),则可以使用大小写绕过。如禁用了PHP、php、pHP则可以使用Php、phP后缀进行绕过

3. 空格/点绕过 pass07/08

原理与大小写绕过大致相同,如果源代码中没有收尾去空的功能,可以使用php (空格)进行绕过;
利用系统原理,在数据包中时可以加上空格的,但是在系统中会强行去除空格,在网站服务器中也会将空格去掉,所以我们用bp抓包,在数据包中添加空格,达到绕过效果。点绕过原理相同。
f i l e n a m e = d e l d o t ( file_name = deldot( filen​ame=deldot(file_name);//删除文件名末尾的点

5. 递归过滤 pass 10

通过分析代码,发现文件尾部空格与点只检查并去除了一次,没有使用循环检查并去除的方法。又因为系统数据包中(文件后缀)可以出现 点空格等 特殊符号,并且在数据包解析时会自动将其去除。所以根据上述代码:使用文件为XXX.PHP. (空格) . 时上述代码去除末尾点和空格还剩一个点XXX.PHP. 此后缀PHP.并为出现在黑名单中,因此可以实现绕过。

6. ::$$DATA绕过 pass09

7. 重复后缀名绕过 pass11


分析源代码,发现上图划线句子的作用为如果查找到array数组中的元素时(file_name),使用(空)替换file_name。使上传文件失效。利用其在后缀中查找第一个出现的php字符并将其替换的特性,我们可以构造后缀名为XXX.PPHPHP的文件,这样第一个php后缀被替换后仍然存在一个php后缀的文件,达到绕过效果。

四、验证内容绕过

1. 文件包含漏洞中的文件头检测绕过 pass14/15/16

文件头检测代码:
下图代码功能为只读取上传文件的前两个字节来判断文件类型,后端根据所得类型重新上传

先分析一下下列含有包含漏洞的代码(下图)
文件包含漏洞:将上传文件中所包含的代码类型按它所属的代码类型执行
例如本站含有文件包含漏洞,那么在jpg中加入php代码,上传到本站,jpg中的php代码将会被解析并执行。
分析下图可知本站含有文件包含漏洞。

接收变量‘file’参数给变量file,使用include函数包含file文件
那么就可以向包含漏洞的页面传递文件名为图片地址的信息:

file=图片地址,因为是本地上传,可以直接使用file=上传文件名

Execute,执行

打开hackbar使用post注入,因为一句话马使用的是<?php eval($_POST['x']); ?>,参数为x,使用x=phpinfo();函数检测注入在执行,执行成功。

Pass 15/16
只是检测方式不同,同样可以使用pass13的图片马上传

Pass16

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块。

五.二次渲染绕过

原理:在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
绕过
1、配合文件包含漏洞:
   将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数
据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取
webshell。
2、可以配合条件竞争:
   这里二次渲染的逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传

pass 17
因为二尺渲染会将上传的文件名重新命名,那么我们上传的木马会消失,如果把我们上传的图片用winhex打开:

发现我们添加的php代码被删除了。用上传图片对比被处理后的图片,发现有一部分是没有被修改的,在那一部分重新插入一句话木马,上传后在下载到本地使用16进制编辑器打开,可以看到php代码没有被去除.成功上传图片马。
详细原理可以参考大佬的博客:链接: link.

六.条件竞争


pass18:
分析源码,服务器先将上传的文件保存下来,再将文件的后缀名进行白名单验证,如果是jpg、png、gif中的一种,就将文件进行重命名。如果不符合的话,unlink()函数就会删除该文件。
这样如果我们还是上传一个图片马,假设网站依旧存在文件包含漏洞那么也可以利用以上方法。但是如果没有文件包含漏洞,我们上传的图片马在上传后就会被删除。但是我们可以利用程序在执行到删除图片马之前的时间内完成访问,实现目的,这就是竞争上传。通过利用burp多线程发包,然后不断在浏览器访问我们的webshell,会有一瞬间的访问成功。

六.服务器解析漏洞

pass 19-21都是利用服务器解析漏洞与上述方法结合的办法完成文件上传的。

文件上传漏洞不止在web层面,也纯在于中间件等之中。

解析漏洞,是指中间件(Apache、nginx、iis等)在解析文件时出现了漏洞,从而,黑客可以利用该漏洞实现非法文件的解析。

1. Apache 解析漏洞:

Apache解析文件规则是从右到左。例如shel.php.gix.ccc,apache会先识别ccc,ccc不被识别,则识别gix,以此类推,最后会被识别为php来运行。
链接: Apache解析漏洞详解.

2. IIS6.0 漏洞

1.目录解析 :
目录名为.asp、.asa、.cer,则目录下的所有文件都会被作为ASP
url/test.asp/shell.jpg会被当作asp脚本运行。
2.文件解析 :
文件名中分号后不被解析,例如.asp;、.asa;、.cer;。
url/test.asp;shell.jpg会被当作asp脚本运行。
3.文件类型解析 :
asa,.cer,.cdx都会被作为asp文件执行。
url/shell.asa会被作为asp文件执行。
链接: IIS6.0容器之解析漏洞复现.

3.Nginx 漏洞

PHP+nginx默认是以cgi的方式去运行,当用户配置不当,会导致任意文件被当作php去解析。
利用条件:
以FastCGl运行
cgi.fix_pathinfo=1(全版本PHP默认为开启)
例如如果满足上述条件,当你访问url/shell.jpg/shell.php时,shell.jpg会被当作php去执行。

Nginx 解析漏洞:
Nginx 文件名逻辑漏洞(CVE-2013-4547)
影响版本:Nginx 0.8.41 ~ 1.4.3/1.5.0 ~ 1.5.7
利用过程:
上传一个shell.jpg文件,注意最后为空格
访问url/shell.jpg[Ox20][Ox00].php
(两个中括号中的数字是用Burp在Hex界面中更改)
• 漏洞复现参考链接
链接: nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现.

文件上传漏洞小结与Upload-labs 靶场纪实相关推荐

  1. DVWA之PHP文件上传漏洞(File Upload)

    文件上传漏洞是指由于服务器对于用户上传部分的控制不严格导致攻击者可以上传一个恶意的可执行的文件到服务器.简单点说,就是用户直接或者通过各种绕过方式将webshell上传到服务器中进而执行利用. 首先保 ...

  2. nginx 上传文件漏洞_文件上传漏洞小结

    1 概念 上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器. 2 危害 • 网站被控制,对文件增删改查,执行命令,链接数据库 ...

  3. 文件上传漏洞揭密剖析(一)-文件上传漏洞原理

    前言 文件上传漏洞(File Upload Vulnerability)是一种常见的 Web 应用程序漏洞,通常存在于需要用户上传文件的应用程序中,如论坛.电子商务网站.博客.社交网站等.攻击者可以通 ...

  4. 2022渗透测试-文件上传漏洞的详细讲解

    目录 1.什么是文件上传漏洞 2.生成图片木马 3.靶场 1.第一关 2.前端检测(第二关) 3.服务器端检测--MIME类型(第二关) 4.服务器端检测--文件类型(第十四关) 5.服务器文件内容验 ...

  5. 文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)

    文件上传漏洞 什么是文件上传漏洞 什么是webshell 一句话木马大全 产生文件上传漏洞的原因 文件上传漏洞的攻击与防御方式 1.前端限制 2.检查扩展名 1.黑名单策略, 2.白名单策略 3.检查 ...

  6. php上传漏洞绕过gd库,jQuery File Upload任意文件上传漏洞

    事件背景 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个JavaScript代码库(或JavaScript框架).jQuery File Upload一个jQ ...

  7. 【Web安全】中国蚁剑+DVWA(本地文件上传漏洞Upload)

    文章目录 1 中国蚁剑 2 文件上传漏洞(Upload) 2.1 准备hack.php 2.2 从DVWA上传hack.php 3 使用蚁剑来连接获得webshell 1 中国蚁剑 中国蚁剑是一款开源 ...

  8. tomcat temp 大量 upload 文件_渗透测试之文件上传漏洞总结

    文末下载上传环境源码 客户端 js检查 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式. 查看源代码可以看到有如下代码对上传文件类型进行了限制: 我们 ...

  9. DVWA靶机-文件上传漏洞(File Upload)

    DVWA靶机-文件上传漏洞(File Upload) 文件上传漏洞的四个等级,low,medium,high,impossible,今天我们针对于不同的等级进行基于文件上传漏洞的攻击 DVWA靶机-暴 ...

最新文章

  1. 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL
  2. python画动态爱心-使用Python画出小人发射爱心的代码
  3. Git clone时出现Please make sure you have the correct access rights and the repository exists.问题已解决。...
  4. Java学习笔记(二):String
  5. [vue-cli]在使用vue-cli开发vue项目时,自动刷新页面的原理你了解吗?
  6. Scala 写第一个程序HelloWorld
  7. 【POJ - 1459】Power Network(网络流最大流,建图)
  8. 计算机五大逻辑部件数据流,211计算机基础知识综合篇.ppt
  9. 计算机应用基本技能题库,计算机应用基本技能技能考试题库.pdf
  10. tomcat 启动编码设置
  11. Lu窗口库LuWin
  12. wav转mp3,wav转换成mp3
  13. 【javaWeb学习笔记】HTML,CSS,JS
  14. 神经网络机器翻译技术
  15. 如何在Foobar2000中使用iPod
  16. asp企业建站系统 最新推出的 免费下载
  17. 10 种跨域解决方案(附终极方案)
  18. ConcurrentHashMap插入与遍历时出现混乱
  19. mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表
  20. excel查找空值快捷键_CTRL+G,EXCEL中你必须要学会的快捷键

热门文章

  1. Spring常见问题解决 - AOP调用被拦截类的属性报NPE
  2. HTML页面怎么添加水印?
  3. 手机版的python如何运行常用数列结构_入门 | 32个常用 Python 实现
  4. 解决Chrome浏览器无法自动播放音频视频的问题
  5. 枚举类enum的使用
  6. 以1M带宽为例计算服务器带宽并发数可同时支持多少人访问
  7. Redis源码详解 - Replication(主备)流程
  8. Linux多命令执行
  9. pageHelper没有正确分页,sql拼接多加limit等参数。
  10. pic单片机内部时钟校准c语言,pic单片机时钟配置