文件上传的基本概念和绕过方式
1. 概念
客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定的路径
服务器 接收的资源程序
客户端前端表单上传代码案例:
<html> <head>head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> form> body> html>
服务端接受并根据返回码进行判断的后端php代码案例:
php if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "
"; } else { echo "Upload: " . $_FILES["file"]["name"] . "
"; echo "Type: " . $_FILES["file"]["type"] . "
"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } ?>
2. 文件上传时的错误代码
值:0 表明没有错误发生,文件上传成功。
值:1 表明上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
值:2 表明上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
值:3 表明文件只有部分被上传。
值:4 表明没有文件被上传。
3. 绕过黑名单过滤:
asp asa cdx cer php aspx ashx jsp php3 php.a shtml phtml
或者双写后缀,大小写转换
4. 漏洞类型(涉及到uploadlab):
a. 使用JavaScript拦截(客户端js验证)(pass1):
方法一: 关闭firefox工具栏上的js功能就行。
方法二: 把网站的前端代码复制下来,更改前端代码,使其不使用js脚本
具体来说就是在