今天网站被攻击,通过分析网站日志,发现如下:
[17/Apr/2011:11:42:36 +0800] "POST /userface/123.jpg/1.php HTTP/1.0" 200 346 "http://www.wwwstandard.cn" "Mozilla/5.0 (Windows; Windows NT 5.1; en-US) Firefox/3.5.0"
经过多次post之后,网站里面多了一个php木马文件。123.jpg是用户头像,是黑客自己上传的,可以打开。
黑客又在后面加了一个“/1.php”
这个可能是系统漏洞,因为测试其他网站都不能在jpg图像后面加1.php,应该是报404错误,但我们网站可以正常访问,显示的是123.jpg图片。
现在做的是服务器禁止在图片后面加后缀访问。但我不明白黑客是怎么通过对图片post来实现上传一个php木马到网站的。难道他的图片里面有恶意代码?求解!

解决方案 »

  1.   

    另外,运行环境是Apache还是IIS?
      

  2.   

    不知道你检查的方式,本地检查还是远程检查?建一个目录,名为123.jpg
    在下面放三个文件
    xxx.jpg——正常图片
    index.php——header或者载入上面这个jpg
    1.php——木马http://xxx/path/123.jpg——实际是访问http://xxx/path/123.jpg/index.php,返回图片
    http://xxx/path/123.jpg/1.php——访问木马不过如果你是本地检查(不通过http方式),就不是上面的情况了
      

  3.   

    上传时对图片类型进行检查 $_FILES['file1']['type'] 不知道能否解决
      

  4.   

         上传漏洞,应该是上传代码部分对文件的识别只停留在扩展名上,无法做到深度解析文件内部格式,导致能上传这种PHP类的文件。建议修改上传代码部分,彻底判断文件类型,这个GOOGLE或百度上有不少资料,根据他们提供的代码休正上传代码!做到彻底判断文件类型应该就基本OK了!
      

  5.   

       $_FILES['file1']['type']只能判断扩展名,如果我把PHP改为JPG或其他图片,也一样识别不了!
       更进一步的说,很多方法是判断16进制文件头部分,根据头部分来判断文件类型,这种方法更准确些,但是对于更厉害的人,他完全有可能伪装头文件,让这种判断文件头的方法失效,但是能这么做的意义不大了。毕竟到了服务器端权利已经被限制了。除非它能突破这个限制,那就是更高级别的较量了,那是黑客们谈论的问题了,不是不可能允许着类执行文件来操作!
      

  6.   

    nginx的配置漏洞详情看这里Nginx + PHP CGI的一个可能的安全漏洞
      

  7.   

    上传时候做个过滤就解决啦...
    例如判断最后的字母是否为 Jpg,gif 等.
      

  8.   

    骇客可以通过修改后缀名来绕过检测,如:jpeg.php.jpg
      

  9.   

    上传的时候判断mime类型就可以了!
      

  10.   

    上传的时候判断mime类型就可以了
      

  11.   

    上传的时候判断mime类型就可以了