upload-labs1-10通关详细步骤
pass -01
先查看源码 分析一下:
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;
}
}
我们先上传一个php文件,发现了是前端验证
前端验证的话 直接F12查看器 找到并删掉代码return checkFile()
删除代码后可以发现 上传成功了
上传成功后复制文件地址去访问一下,执行一下phpinfo(),执行成功了就证明成功了,可以使用工具链接
pass -02
查看下源码:
$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')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
上传一个一句话试试,可以看出这是后端验证,验证了文件的类型。
使用burp抓包修改文件类型,改成允许的图片类型image/jpeg
修改类型之后可以发现上传成功了
复制文件地址访问执行phpinfo(),可以发现成功了。
pass -03
查看源码 发现是黑名单,过滤了 asp,aspx,php,jsp,直接使用brup抓包
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
抓包测试了下,发现可以使用windows的流::$DATA双写来绕过检测
放包之后发现上传成功了;
复制图像地址,访问时删掉末尾的::%data 用hackbar执行phpinfo(),可以发现成功了
pass -04
查看源码发现是黑名单
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (