图片一句话制作方法
copy 1.png /b + shell.php /a webshell.jpg
文件头检测
图像文件信息判断
逻辑安全-二次渲染:指的是网站接受目标后会再进行操作,也就是说会对文件进行二次操作。
逻辑安全-条件竞争:有的网站会对上传的文件进行上传后再验证(上传过程不进行验证),这样文件会暂时 保存到服务器上,可以趁程序未对此文件进行操作(例如改名,移位等),访问文件进行占用,产生条件竞 争。
目录命名-x.php/. :这种命名方法会保存为一个x.php文件
脚本函数漏洞-CVE-2015-2348:
数组接受+目录命名
upload-labs演示
13-16
要利用文件包含漏洞等其他漏洞,才能出发PHP
getimagesize函数:获取图像信息
less-17
二次渲染可能会存在逻辑漏洞,可以通过逻辑竞争来进行上传
#靶场17关代码
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_name = $_FILES['upload_file']['name'];
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_ext = substr($file_name,strrpos($file_name,".")+1);
$upload_file = UPLOAD_PATH . '/' . $file_name;
if(move_uploaded_file($temp_file, $upload_file)){
if(in_array($file_ext,$ext_arr)){
通过%00截断来绕过判断
20关代码可以采用数组注入。
$img_path = UPLOAD_PATH . '/'. rand(10,
99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
unlink($upload_file);
}
}else{
$msg = '上传出错!';
}
}
}
less-19
save_name,利用%00进行截断
或者伪造成文件夹,例如 upload-19.php/. 绕过机制,结果保存成php文件
less-20
利用数组注入
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
//检查MIME
$allow_type = array('image/jpeg','image/png','image/gif');
if(!in_array($_FILES['upload_file']['type'],$allow_type)){
$msg = "禁止上传该类型文件!";
}else{
//检查文件名
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] :
$_POST['save_name'];
if (!is_array($file)) {
$file = explode('.', strtolower($file));
}
$ext = end($file);
文件上传配合文件包含会直接拿下目标
23. 文件上传之解析漏洞编辑器安全
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}else{
$file_name = reset($file) . '.' . $file[count($file) - 1];
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' .$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$msg = "文件上传成功!";
$is_upload = true;
} else {
$msg = "文件上传失败!";
}
}
}
}else{
$msg = "请选择要上传的文件!";
}
CVE漏洞
文件长传漏洞也会出现在中间件上面