php图片木马绕过图片缩放、压缩、二次转码等“破坏性”过滤
关于上传解析的问题 求思路
Demon (证道) | 2013-05-22 15:38
发现某站上传图片后任意后缀都能执行,于是把一句话插入到图片里,可是上传后图片被重新压缩了一遍,导致图片内容完全改变了。一句话也没了,这种情况怎么破。。
php图片马绕过图片缩放
l4mbda | 2012-10-12 11:35
如何使得一句话php图片马绕过这道图片缩放函数大闸
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
新长度宽度和原来相等
1#
/fd (/proc) ?() | 2012-10-12 12:05
不太可能
2#
Joker (这个人还没有女朋友) | 2012-10-12 12:45
GD库,好像没听过有绕过的。
3#
GaRY | 2012-10-12 12:48
除非你能找到个法子根据他的算法算出一个在重新序列化排列之后可以拼成有意义字符。或者找到图片中不会因为压缩,放大缩小而改变的部分(如exif头或其他特殊meta数据的部分等)
我做过此类黑盒尝试,白花了1天时间没有找到合适的绕过方法。
4#
horseluke (微碌) | 2012-10-12 12:49
除非逐像素逐像素填充之间存在问题,但既然涉及到缩放,这个问题显然是不存在的......
关于用像素编程,这个最经典:Why is this program erroneously rejected by three C++ compilers?
5#
l4mbda | 2012-10-12 12:52
@GaRY 好吧 那我放弃了
6#
xsser (十根阳具有长短!!) | 2012-10-12 13:46
会不会逻辑里判断图片满足需求就不走这逻辑了
7#
/fd (/proc) ?() | 2012-10-12 13:56
@horseluke 碉堡了
8#
l4mbda | 2012-10-12 13:57
@xsser倒是有这个可能,我看代码的时候也想了,没绕过去,只有png和gif扩展名可以绕过,直接穿
9#
Seay (x) | 2012-10-12 14:16
@l4mbda 那就合成png和gif的图片马啊
10#
l4mbda | 2012-10-12 14:18
@Seay 后缀名是png。。。我怎么解析
11#
pangshenjie (whoami) | 2012-10-12 19:37
@l4mbda 你保存一个他缩放过的,然后插马。然后再传看他还处理不
12#
l4mbda | 2012-10-12 20:07
@pangshenjie 试过了 又重新缩放一次
13#
店小弎 | 2012-10-12 20:14
没有可能 绕不过缩放 过的是gd库
14#
SinCoder (fuck sec) | 2012-10-12 20:38
bmp 图片 是直接保存像素的 可以在里面加入任何字符信息 但是这类程序 一般要求 jpg 图片 蛋疼了 。。。
15#
/fd (/proc) ?() | 2013-01-12 11:38
翻老帖
如果能控制缩放後新的长度宽度那是有可能的
16#
GaRY | 2013-01-12 14:57
@/fd 怎么可能?给点细节吧
17#
/fd (/proc) ?() | 2013-01-12 15:13
求個圖空上傳
18#感谢(1)
/fd (/proc) ?() | 2013-01-12 22:24
把下面的PNG以imagecopyresampled缩放成32*32
出現一句話shell
19#
三叔 (fuck) | 2013-01-13 00:11
@/fd 可以过dz论坛上传?
20#
/fd (/proc) ?() | 2013-01-13 15:12
@三叔 目測有困難
21#
剁刀 | 2013-01-13 15:35
可以过gd??
22#
/fd (/proc) ?() | 2013-01-13 15:42
@剁刀
<?php
// The file
$filename = 'shell.png';
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = 32;
$new_height = 32;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefrompng($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagepng($image_p);
?>
自己試一下 記得修改$filename
23#
GaRY | 2013-01-13 16:42
@/fd 给出可逆为有效字符的方法吧,授人于鱼不如授人以渔
24#
/fd (/proc) ?() | 2013-01-13 17:24
@GaRY 忘了給出原理,Encoding Web Shells in PNG IDAT chunks
25#
三叔 (fuck) | 2013-01-13 17:25
@/fd 试了。不行。。
26#
/fd (/proc) ?() | 2013-01-13 17:33
@三叔 已測試Windows 及 Linux 平台皆可以
用Hexview看或把圖lfi一下試試
27#
GaRY | 2013-01-13 20:23
@/fd 好东西,多谢
28#
剁刀 | 2013-01-14 00:29
@/fd 用你的代码测试,不行,未出现shell字符串....
29#
/fd (/proc) ?() | 2013-01-14 00:40
@剁刀 直接保存缩放後的png再include試一下
imagepng($image_p, 'shell.png');
include('shell.png');
也不行的話可能是wooyun處理過原png...
30#
剁刀 | 2013-01-14 17:01
嗯,出现shell string了。但是却不能执行,是需要开启short tag吗?
31#
剁刀 | 2013-01-14 17:01
@/fd 感谢提供的非常好的文章
32#
xsjswt | 2013-01-14 17:08
@GaRY 可不可以弄一个缩放过的,写上你的字,然后缩放回来
33#
/fd (/proc) ?() | 2013-01-14 17:08
@剁刀 是的
34#
剁刀 | 2013-01-14 17:20
@/fd 那。。。能不能合成一个<?php开头的shell啊