upload-labs pass-12
Pass-12
先看一下源码(白名单验证–GET型0x00截断):
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
}
}
- 验证发现正常上传图片成功,上传402.php文件失败。
2.开启burpsuit抓包,发送到repeater模块,修改URL,在/upload/后面增加“402.php%00”,同时修改文件后缀为“png”,Content-Type修改成: image/png点击forward,回到浏览器发现上传成功。
条件:php版本<5.3.4;magic_quotes_gpc=off。
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。