微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

学习笔记三十六:文件内容检查的突破

文件内容检查包括

  • content-type检查
  • 文件头检查
  • getimagesize()检查
  • PHP_exif模块检查
  • imagecreatefromjpeg二次渲染

测试流程:(前提是已经拿到一个上传点)

  • 上传一张正常的照片,验证上传功能是否正常(照片可以用.jpg或者.PHP等格式进行尝试上传
  • 最好直接上传一张图片一句话马,它可以绕过content-type,文件头,getimagesize(),PHP_exif检查,进而成功上传
  • 针对二次渲染,寻找图片数据中不会被转换的部分,将代码插入其中(这种情况就是在你已经将含有PHP代码文件成功上传了,并且文件连接也是成功的,但是无法实施执行操作,这就意味着网站可能对我们上传文件进行了二次渲染)

content-type检查:

就是上传点会对你上传图片的content-type值进行检查

绕过方法

使用burp suite抓包直接修改content-type值,比如将.PHP格式的content-type:application/x-PHP  改为.jpg格式的content-type:image/jpeg

文件头检查:

一个正常的图片放进C32Asm里并选择16进制模式,会显示

,这就是上传点对文件头检查要检查的东西

绕过方法

文件头部添加gif89a(要注意的是,这样做确实可以成功绕过,但是他也会导致我们上传文件变成.gif格式,进而导致PHP一句话木马无法起作用,但我们可以让它与其他漏洞结合来操作,比如结合文件包含漏洞)

gif89a
<?PHP
PHPinfo();
?>

图片一句话

结合文件包含漏洞或者解析漏洞

getimagesize()检查和PHP_exif模块检查:

getimagesize()函数

示例:

<?PHP
$remote_png_url = 'http://www.runoob.com/wp-content/themes/w3cschool.cc/assets/img/logodomain-green2.png';
$img_data = getimagesize($remote_png_url);
print_r($img_data );
?>

输出

Array
(
      [0] => 290
      [1] => 69
      [2] => 3
      [3] => width="290" height="69"
      [bits] => 8
      [mime] => image/png
)

注释:

  • 索引 0 给出的是图像宽度的像素值
  • 索引 1 给出的是图像⾼度的像素值
  • 索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
  • 索引 3 给出的是⼀个宽度和⾼度的字符串,可以直接⽤于 HTML 的 <image>标签
  • 索引 bits 给出的是图像的每种颜⾊的位数,⼆进制格式
  • 索引 channels 给出的是图像的通道值,RGB 图像认是 3
  • 索引 mime 给出的是图像的 MIME 信息,此信息可以⽤来在 HTTP Content-type 头信息中发送正确的信息,如: header("Content-type: image/jpeg");

绕过方法

文件头部添加gif89a

图片一句话,结合解析漏洞或文件包含漏洞

imagecreatfromjpeg二次渲染:

⼆次渲染:就是根据⽤户上传的图⽚,新⽣成⼀个图⽚,将原始图⽚删除,将新图⽚添加数据库中。⽐如⼀些⽹ 站根据⽤户上传的头像⽣成⼤中⼩不同尺⼨的图像。

绕过方法

寻找渲染前后不变的地⽅(可以在c32里进行比对),替换成⼀句话

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐