赞
踩
文件上传靶场环境:https://github.com/c0ny1/upload-labs
查看源代码
- function checkFile() {
- var file = document.getElementsByName('upload_file')[0].value; if (file == null || file == "") {
- alert("请选择要上传的文件!"); return false; } //定义允许上传的文件类型 var allow_ext = ".jpg|.png|.gif"; //提取上传文件的类型 var ext_name = file.substring(file.lastIndexOf(".")); //判断上传文件类型是否允许上传(用点进行截断查看后缀名) if (allow_ext.indexOf(ext_name + "|") == -1) {
- var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name; alert(errMsg); return false; }}
通过查看源代码发现使用了白名单,只能上传.jpg、.png、.gif三种类型的文件,但是代码是在前端实现的,也就是说服务器端没有进行校验,因此可以通过抓包来修改后缀名进行绕过。
第一关主要是在前端对上传文件的类型进行判断,在前端禁止上传非图片类型的文件。突破这种限制的方法是在本地上传jpg类型的文件,然后使用burp进行抓包,修改后缀名为php类型,即可绕过。
①:本地不允许上传php类型文件
②:不允许上传php类型的文件,首先上传jpg类型的文件,使用burp进行抓包,然后再修改后缀名为php
③:修改文件后缀为php类型
④:访问该文件,并使用菜刀成功连接
①:打开F12,将前端检查文件类型的函数删掉,这样上传文件时就不会触发这个函数,因此就可以上传任意文件
②:可以上传php类型文件
③:上传成功,进行访问
①:在地址栏输入about:config,查找javascript,将javascript.enabled的类型改为false,默认值为true
②:上传任意后缀文件
③:访问该文件
这种方式是在前端使用JavaScript来限制在本地可以上传的文件类型,上传的文件类型并没有在服务器端进行校验,这样就可以抓包来修改上传的文件后缀,还可以修改前端代码,在允许上传的文件后缀名后添加上自己想要上传的文件后缀名,其实,最直接的方式是直接禁掉相关的JS代码,这样就可以上传任意类型的文件了。
查看源代码
- $is_upload = false;$msg = null;if (isset($_POST['submit'])) {
- if (file_exists(UPLOAD_PATH)) {
- if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
- if (move_uploaded_file($_FILES['upload_file']['tmp_name'], UPLOAD_PATH . '/' . $_FILES['upload_file']['name'])) {
- $img
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。