php上传gif木马如何执行,php – 阻止人们通过注射上传GIF的方法?

我有一个PHP网站,人们可以填写帮助门票。它允许他们上传他们的票据截图。我允许gif,psd,bmp,jpg,png,tif上传。收到上传后,PHP脚本将忽略文件扩展名。它仅使用MIME信息识别文件类型,这些文件类型始终存储在文件的前12个字节中。

有人上传了几个GIF,当用浏览器查看浏览器时,浏览器表示无效,我的病毒扫描器提醒我,这是一个注入(或类似的东西)。请参阅下面的包含这些GIF的zip文件。

我不认为只检查标题信息是否足够。我听说一个图像可以是完全有效的,但也包含漏洞利用代码。

所以我有两个基本的问题:

>有谁知道他们如何将不良东西注入GIF(同时保持有效的GIF MIME类型)?如果我知道这一点,也许我可以在上传时检查。

>如何防止某人上传这样的文件?

>我在共享托管,所以我无法安装服务器端病毒

扫描器。

>将信息提交到在线病毒扫描网站

可能太慢了

>有什么办法检查自己使用PHP类检查这些事情吗?

>如果GD无效,将使用GD失败调整图像大小?或者漏洞利用是否仍然通过,并且被调整大小的图像?如果失败,那将是理想的,因为那时我可以使用调整大小作为一种技术,看看它们是否有效。

更新:大家,谢谢你的回复。我试图在服务器上查看上传的GIF。我会更新这篇文章,如果我找到他们。

更新2:我找到任何有兴趣的GIF。我把它们放在使用密码“123”加密的压缩文件中。它位于这里(请注意,这个托管网站上有多个“下载”按钮 – 其中一些用于广告)http://www.filedropper.com/badgifs.称为5060.gif的一个被我的防病毒标记为木马(TR / Graftor.Q。 2)。我应该注意,这些文件是在我执行前12个字节的MIME检查之前上传的。所以现在,我对这些特定的安全。但是我仍然想知道如何检测隐藏正确MIME类型的漏洞。

重要说明:我只关心PC下载这些文件以查看它们的风险。这些文件不是我的服务器的风险。他们不会被执行。它们使用一个扩展名为“.enc”的干净名称(十六进制哈希输出)存储,并使用fwrite过滤器将其保存为加密状态的磁盘:

// Generate random key to encrypt this file.

$AsciiKey = '';

for($i = 0; $i < 20; $i++)

$AsciiKey .= chr(mt_rand(1, 255));

// The proper key size for the encryption mode we're using is 256-bits (32-bytes).

// That's what "mcrypt_get_key_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)" says.

// So we'll hash our key using SHA-256 and pass TRUE to the 2nd parameter, so we

// get raw binary output. That will be the perfect length for the key.

$BinKey = hash('SHA256', '~~'.TIME_NOW.'~~'.$AsciiKey.'~~', true);

// Create Initialization Vector with block size of 128 bits (AES compliant) and CBC mode

$InitVec = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);

$Args = array('iv' => $InitVec, 'key' => $BinKey, 'mode' => 'cbc');

// Save encoded file in uploads_tmp directory.

$hDest = fopen(UPLOADS_DIR_TMP.'/'.$Hash.'.enc', 'w');

stream_filter_append($hDest, 'mcrypt.rijndael-128', STREAM_FILTER_WRITE, $Args);

fwrite($hDest, $Data);

fclose($hDest);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值