cd /tmp; ll -ash;

51M -rw------- 1 nginx nginx 51M Sep 17 09:33 php3p7FPA
51M -rw------- 1 nginx nginx 51M Sep 15 15:26 php5jlObl
43M -rw------- 1 nginx nginx 43M Sep 15 15:15 phpAHqkPv
50M -rw------- 1 nginx nginx 50M Sep 15 15:08 phpBeg7wS
88M -rw------- 1 nginx nginx 88M Sep 15 10:36 phpfDaQGu
53M -rw------- 1 nginx nginx 53M Sep 15 15:07 phpkuEiUc
122M -rw------- 1 nginx nginx 122M Sep 17 09:28 phpkx1DiL
82M -rw------- 1 nginx nginx 82M Sep 15 15:16 phpLfc4lt
42M -rw------- 1 nginx nginx 42M Sep 15 18:48 phpoYCXXK
51M -rw------- 1 nginx nginx 51M Sep 15 15:10 phpSq1fg5
62M -rw------- 1 nginx nginx 62M Sep 17 09:02 phpwvzrKE
26M -rw------- 1 nginx nginx 26M Sep 17 09:38 phpY2SevM
39M -rw------- 1 nginx nginx 39M Sep 17 09:15 phpYky45z
43M -rw------- 1 nginx nginx 43M Sep 15 15:13 phpZwgvRa

不知道是哪里来的,而且已经很久了。查看内容基本都是这样的:

[root@kermit tmp]# cat phpzpqXze
GIF89a
<%
response.Write(987651234-123498765)
strURL = Request.Servervariables("url")
intPos = InstrRev(strURL,"/")
intStrLen = len(strURL)
strFileName = Right(strURL,intStrLen-intPos)
on error resume next
set fs=Server.CreateObject("Scripting.FileSystemObject")
fs.DeleteFile(Server.MapPath(".")&"\\"&strFileName)
%>
    这是GIF89a图片头文件欺骗,是一种攻击,GIF89a图形文件是一个根据图形交换格式(GIF)89a版进行格式化之后的图形。而写到这个临时目录说明是通过上传进入到了这个目录,这个文件会怎么执行呢?如果这个图片被存入进了WEB,在浏览器里打开并加载这个图片时就会出现异常,比如编写一个text文件,内容如下:

GIF89a
<head>
<meta http-equiv = "refresh" content ="1;url=http://www.sohu.com/" />  
</head>
然后保存成名字:a.gif。再在PHP的WEB目录下创建一个img.php文件,里面写上代码:

<img src="a.gif">

然后访问img.php文件,你会看到页面打开后不久就跳转至搜狐网站了,如果a.gif的文件里跳转时再带上一些读取cookies的参数,那么用户的数据就被窃取了!然后PHP在判断这个图片上却显得很弱智。我们使用php里的函数getimagesize读取这张图片,会得到这样的结果:

Array
(
[0] => 2573
[1] => 26684
[2] => 1
[3] => width="2573" height="26684"
[channels] => 3
[mime] => image/gif
)

结果显示图片的类型是没问题的,只是在尺寸上有些大,但也许这种注入有其它的办法能将尺寸修改成符合你网站需要的,那PHP在接收图片时有什么办法来阻止这种方式呢?既然getimagesize从图片类型上不能阻止,其它的函数:mime_content_type,Fileinfo也没法阻止了。当然如果攻击的脚本像上面这种完全可以从尺寸上阻止,如果脚本能通过,可以考虑重新将图片生成的方法防止含代码图片进入,程序如下:

//显示php获取的图像信息
print_r(getimagesize('a.gif')); //如果尺寸合格, 重新创建图像实例
$img = getimagesize('a.gif');
$im = imagecreatetruecolor ($img[0], $img[1]);
imagepng ($im , './a.'.image_type_to_extension (IMAGETYPE_PNG));
imagedestroy($im);

这时如果像上面这种脚本上传,重新生成的图片会是一张纯黑图片,也就不存在攻击脚本了。但这样也会带来额外的图片生成开销。

linux下tmp目录里很多php开头的文件的更多相关文章

  1. Linux下更改目录及其下的子目录和文件的访问权限

    想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理. 例如: [root@localhost ~]# chmod 777 /home/user 注:仅把 ...

  2. linux下各目录的作用

    这么久了,一直觉得对于linux的运作情况还是懵懵懂懂的样子,刚才专门又看了一下 linux 下各目录的作用,记下来,以备以后再忘了. 下面内容来自:http://www.linuxidc.com/L ...

  3. 【收集整理】Linux下的目录讲解

    Linux下的目录介绍:在Linux系统中,一切东西都是存放在一个唯一的“虚拟文件系统”中的,这个“虚拟文件系统”是树状的结构以一个根目录开始.以文件来表示所有逻辑实体和非逻辑实体,逻辑实体指文件和目 ...

  4. linux下mnt目录作用

    linux下mnt目录作用 一.mount 英文解释 登上; 爬上; 攀登; 骑上; 乘上; 跨上 可直接理解为“挂载” 挂接光驱.USB设备的目录,加载后,会在mnt里多出相应设备的目录.mnt是m ...

  5. C++遍历目录,并把目录里超过7天的文件删除(跨平台windows&linux)

    C++遍历目录,并把目录里超过7天的文件删除,适用于项目里删除过期的日志,或者视频文件. 在windows和linux下测试通过. windows测试结果: linux测试结果: 源码: #inclu ...

  6. Linux下查看目录文件数和文件大小

    一.查看当前目录下文件个数 在linux下查看目录下有多少文件可以用:ls -l  命令查看,ls -lR 递归查看所有目录, 如果文件很多,则用wc命令 和 grep 命令进行过滤. wc命令显示输 ...

  7. 整理 Linux下列出目录内容的命令

    在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务.当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令.但只有 ls 命令能实现这个目的吗?显然不是 ...

  8. Linux下拷贝目录和删除

    cp命令用于复制文件或目录,若同事指定两个以上的文件或目录,切最后一个目的地是一个已存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若同时指定多个文件或目录,而最后的目的地并非一个已存在的 ...

  9. Linux下遍历目录及文件,更改权限

    Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...

随机推荐

  1. python——unpack问题 ocr_recognize timeout , exception:unpack requires a string argument of length 46

    rObjBuff = "".join(unpack('=%ds' % ObjLen, recv_buf[6+i*ObjLen:6+(i+1)*ObjLen]))score, bbo ...

  2. ios图片轮播效果

    代码地址如下:http://www.demodashi.com/demo/11959.html ImageCarousel 简单封装的图片轮播器 内存过大由于我加载的图片分辨率较高(4k) 文件目录 ...

  3. vs2015+opencv-3.2.0-vc14配置

    用的VS2015免费的community社区版,功能足矣. 很早就有配置opencv249,原本觉得低版本的稳定,一直没有配成功过,测试总是报错 出现error LINK:无法打开文件“opencv_ ...

  4. Easy Explore插件:在eclipse里快速打开文件所在的目录

    下载:easyexplore_1.0.4 安装:把文件”org.sf.easyexplore_1.0.4.jar”文件解压出来,然后复制到eclipse安装目录的”plugins”文件夹里 http: ...

  5. JPA JPQL 查询、排序.....(转)

    http://macrabbit.iteye.com/blog/855384 JPQL就是一种查询语言,具有与 SQL 相类似的特征, JPQL 是完全面向对象的,具备继承.多态和关联等特性,和hib ...

  6. Python pip install Twisted 出错“Command "c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:...\\Twisted\\setup.py'.... failed with error code 1 in C:... \\Twisted"

    如标题所说: python版本是目前最新的3.7.1 结果发现并不是环境问题,而是直接 pip install Twisted 安装的包不兼容 需要手动下载兼容的扩展包Twisted-18.9.0-c ...

  7. Atitit.虚拟机与指令系统的设计

    Atitit.虚拟机与指令系统的设计 1. 两种计算模型  ,堆栈机和状态机(基于寄存器的虚拟机1 1.1.1. 堆栈机1 1.1.2. 状态机2 2. 为什么状态机比堆栈机快呢?3 2.1. Sta ...

  8. oracle命令登录数据库

    sqlplus aa/aa@jdbc:oracle:thin:@10.200.130.111:1521:nbact 或者 sqlplus aa/aa@nbact

  9. java内存管理和gc回收机制

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码 ...

  10. sqlite3 PC安装及使用

    sqlite3使用 1. 安装sqlite3 sudo apt-get install sqlite3 sudo apt-get install libsqlite3-dev 2. sqlite常用命 ...