目录
原理
文件上传漏洞是指将一个带有攻击性的文件上传到目的服务器,然后通过一定手段使木马代码执行并获取目标机的一些信息或者权限
方法
本质的方法就是绕过,很多目标机为了防止被上传恶意文件所以对上传的含有文件的数据包有着一定筛选,我们只要绕过其筛选点,即可文件成功上传上去。然后再通过其他手段使文件执行。
这里筛选点最常见的三个,
一.文件类型筛选(Content-Type)
Content-Type: 是数据包报头的部分,主要用说明上传的文件是什么类型。有时候服务器对上传文件的类型有着明确的要求,绕过是需要考虑。
Content-Type: image/jpeg
如上就可以说明上传的文件类型为图片类型,如果使其他类型的则会被过滤掉。
二.内容筛选
就是对文件内容进行检测,查看文件里面是否有恶意信息如:
GIF89a
<?=eval($_REQUEST['cmd']);?>
可能在筛选中要求内容不能有eval这样的字段,所以要选择其他具有相同功能的函数进行绕过。
三.Content-Disposition(内置处理)这是http数据包中包头部分,即把文件上传到服务器后会变成什么文件。例如我上传的本来是个1.jpg文件而Content-Disposition配置如下:
Content-Disposition: form-data; name="fileUpload"; filename="1.php"
那么我的文件到达服务器端则会变成1.php
例子
例一
这里要求的只能上传图片类型,可以通过绕过的方式上传一个木马文件上去。
一般来说文件上传,正真会被服务器作为筛选点的地方有三个Content-Type: image/jpeg(文件的类型),content-Disposition:(内置处理部分),文件的内容。所以修改的地方也是通过修改这三个地方不断尝试才行。
这里通过尝试,发现内置处理不被服务器作为筛选点,所以可以通过的修改。以图片的形式进行上传,当上传成功的时候,再把文件修改成想要的文件类型。最后找到这个文件的绝对路径用蚁剑连接(为什么要将内置处理成php文件类型,因为此次处木马本身是php代码,而只有php文件类型才能默认执行里面的木马代码,所以要将内置处理成php类型)
根据上传后的提示找到绝对路径
例二
有的时候内置处理会过滤掉配置为php类型的文件或者内置处理的配置也只能时jpg类型,这样即使能上传成功,也不是php类型蚁剑连接时里面的代码也不会被执行。这样的情况可以配合着文件上传漏洞,使不是php文件里面的代码也能被执行,从而使木马生效。(原理再文件包含主题里有)
这里发现内置处理部分不是php类型才能被上传成功,这样蚁剑连接时也不会成功,因为里面的代码没有被执行所以需要通过其他方式连接使里面的代码执行。这里通过文件包含漏洞的方式连接(原理在文件包含主题里面有)步骤如下
1.通过上传成功的提示找到,带有木马的文件的绝对路径
2.找到文件包含漏洞的通过两者路径的对比,找到被包含文件相对于文件包含漏洞所在位置的相对路径
http://a3b7962e-1bba-44d6-8fb3-6476521f77a5.node4.buuoj.cn:81
/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/b.jpg&submit=提交
路径如上,然后再通过,蚁剑连接
例三
有的时候有文件上传漏洞过滤要求也比较严格内置处理不能使php类型,还没有文件包含漏洞。这样虽然可以上传一个含有木马文件,但却不容易被利用,这时可通过再上传一个.user.ini文件构造一个后门
.user.ini中两个中的配置就是auto_prepend_file和auto_append_file。这两个配置的意思就是:我们指定一个文件(如1.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),相当于在index.php中插入一句:require(./1.jpg)。这两个设置的区别只是在于auto_prepend_file是在文件前插入,auto_append_file在文件最后插入。
操作如下(本题来自攻防世界中easyupload)
1.上传.user.ini文件构造后门
2.上传一个木马文件
上面的操作就相当于把文件为b.jpg内的木马代码写道将要执行的php文件里面如(index.php)
3.找到绝对路径
当显示返回数据是空时可以等一等,因为还么缓存过来