什么是文件上传漏洞
文件上传是Web应用的常见功能,允许用户上传图片、视频及其他文件类型文件。如果用户上传的是木马文件,则服务器就会收到攻击。
对于这个漏洞的练习有一个专门的靶场,即upload-labs,这个的安装可以在windows中使用phpstudy,linux中使用docker,当然使用phpstudy更加方便快捷,使用docker会比较麻烦,如果有需要的话,你们私信我,人多的话,我可以教大家使用docker安装,并且安装后的配置怎么改等问题。windows中安装很简单
upload-labs下载地址https://github.com/c0ny1/upload-labs,访问会有点慢,挂个梯子就行,没有的话会多等一会
下载好后,解压到www目录下,就可以访问了,这时候先打开第一关,随便上传一张图片,这个时候会报错,打开你的upload-labs文件夹,进去创建一个文件夹并改名upload就行,当你再次上传并显示时,就着调了
这点很重要,在下面的练习中,我会展示一到俩方法,供大家学习,其他的方法就靠你们的了
再随便找一张图片,写一个测试脚本mu.php
<?php
eval("phpinfo();");
?>
接下来就是打怪升级!
Pass-01
刚才我们可以看到已经是可以正常上传图片了,接下来我们去上传我们的测试文件,发现了弹窗,这说明什么,说明该限制是在前端完成的,那就很简单了
F12,选中我们提交的元素,看代码,发现,点击上传后,调用了一个函数,看函数名就可以知道,该函数就是来检查文件名的,我们把他删掉,上传成功,发现该显示图片的地方没有显示图片,我们本来上传的也不是图片,但是我们上传的代码是有查看php和其他的信息的作用的,现在没有显示,不要急,我们把那张没有显示的图片拖到浏览器显示窗口的位置试试
每一次做完,都去删除一次文件
第二种方法
依然是F12这一次我们打开控制台,通过修改JS代码来上传文件,使用dom的这个方法,这个方法是将选中的元素成为一个数组,这里只有一个form表单,所以就是0,使得onsubmit内容为空,同样上传成功
Pass-02
上传测试文件,发现这会就是后端进行校验了,我们点一下提示,提示说后端进行检查了mime,那么什么是mime呢
通过查找发现就是一种校验文件的方式,我们再来抓包看看,先上传一张图片
这个就是后端检查的内容 image/jpeg,上传我们的测试文件
将这里替换成上面的信息,放行,上传成功
Pass-03
我们先来看看提示,这里说禁止了这些文件后缀名,这里有一个隐藏的小知识,php文件的后缀名有很多phtml,php3,phps等,所以我们去修改文件的后缀名,就可以上传成功,虽然可以上传,但是,不一定可以执行,要想执行,就需要我们去修改Apache的配置文件。
在这里添加AddType application/x-httpd-php .php .phtml .phps .php3 ,重启Apache,执行了就是成功了
Pass-04
看到提示过滤了很多的文件后缀,但是呢,没有过滤 .htaccess后缀,我们可以构建一个htaccess配置文件,文件内容为 SetHandler application/x-httpd-php ,注意这个文件没有名字,只有后缀。这时有人的电脑无法直接创建,我们可以试试,先创建一个文本文件,写入我们的内容,另存为,选择所有文件,保存即可,这个文件是可以直接上传的,他有什么作用呢,只要有这个文件,该目录下的所有文件都会按照php进行执行,将我们mu.php,改为mu.png,最后上传他,成功执行!
Pass-05
查看提示,没有收获,从源代码中入手,我们对比一下第三关,因为从第三关开始过滤文件后缀,
3
5
可以发现第五关少了这一行,他的作用就是将大写转换为小写,那么我们就可以将mu.php改为mu.PHP进行绕过
$file_ext = strtolower($file_ext);//转换为小写
upload-labs的闯关就到这里了,后续的内容其他的博主也有做,你们也可以发动你的大脑,创新你们自己的方法。
不管是以前还是今后的内容,仅供学习交流使用,如做出危害行为,我概不负责。