文件上的公章怎么抠下来(文件上传白名单绕过)
客户端js检查一般是在网页上写一个javascript脚本来检查上传文件的后缀,形式是白名单或者黑名单。
查看源代码,您会发现以下代码限制了上传文件的类型:
我们可以看到,上传文件的类型是有限制的。
绕过方法,我们可以在上传文件时,直接删除代码中关于验证上传文件的onsubmit。。中的相关代码。或者可以不加载所有的js,也可以在本地复制一份html源代码,然后在本地修改相应的代码提交。
Burp改包,因为是js认证,我们可以先把文件重命名为js允许的后缀,用burp发包的时候改成我们想要的后缀。您可以成功上传:
服务端黑名单特殊可解析后缀if(文件存在(上传路径)){ $ 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=str tow($ file _ ext);//转换为小写$ file _ ext=str _ ireplace('$ DATA '''$ file _ ext);//去除字符串:$ DATA $ file _ ext=trim($ file _ ext);//收尾去空如果(!in_array($file_ext,$ deny _ ext)){ $ temp _ file=$ _ FILES[' upload _ file '][' tmp _ name '];$img_path=上传路径。'/'日期(' YmdHis ').兰特(1000,9999)。$ file _ extif(move _ uploaded _ file($ temp _ file,$ img _ path)){ $ is _ upload=true;} else { $msg='上传出错!'} } else { $msg='不允许上传ASP . net。aspx,1000 .php,1000 .jsp后缀文件!'} } else { $msg=UPLOAD_PATH .'文件夹不存在,请手工创建!'}这里做了黑名单处理,
旁路法之前在https://www.jianshu.com/p/1ccbab572974总结过,这里就不赘述了。可以用php3,phtml等等绕过。htaccess文件是Apache服务器中的一个配置文件,负责相关目录中网页的配置。通过htaccess文件,
它可以实现重定向网页301、定制页面404、改变文件扩展名、允许/阻止特定用户或目录的访问、禁止目录列表、配置默认文档等功能。
若要绕过该方法,我们需要上传一个。包含以下内容的htaccess文件:
设置Handler Application/x-httpd-php,这样所有文件都会解析成php,然后上传图片马。
绕过方法后缀,将其改为PHP。
:$DATA绕过相同的windows特性,可以通过在后缀名称中添加“:$DATA”来绕过,此处不再赘述。
绕过方法这里我们可以构造文件名1.PHP.(点空格),处理后文件名变成1.PHP,可以绕过。
双写绕过if(file _ exists(UPLOAD _ PATH)){ $ deny _ ext=array(' PHP '' php5 '' php4 '' php3 '' php2 '' html '' pht '' jsp '' JSP '' jsw '' jsv '' jspf '' jtml '' asp '' aspx '' asax '' ascx '' ashx '' asmx '' cer '' swf '' htaccess ');$ file _ name=trim($ _ FILES[' upload _ file '][' name ']);$ file _ name=str _ ireplace($ deny _ ext,''$ file _ name);$ temp _ file=$ _ FILES[' upload _ file '][' tmp _ name '];$img_path=上传路径。'/'$ file _ name if(move _ uploaded _ file($ temp _ file,$ img _ path)){ $ is _ upload=true;} else { $msg='上传出错!'} } else { $msg=UPLOAD_PATH .'文件夹不存在,请手工创建!'}}绕过方法这里我们可以看到将文件名替换为空,
白名单哑剧检查if(已设置($ _ 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上传路径。'/'$ _ FILES[' upload _ file '][' name '];if(move _ uploaded _ file($ temp _ file,$ img _ path)){ $ is _ upload=true;} else { $msg='上传出错!'} } else { $msg='文件类型不正确,
只需绕过方法,直接进入/upload/1.php。
00截断(POST)if(isset($ _ POST[' submit ']){ $ ext _ arr=array(' jpg '' png '' gif ');$ file _ ext=substr($ _ FILES[' upload _ file '][' name '],str rpos($ _ FILES[' upload _ file '][' name '],'') 1);if(in_array($file_ext,$ ext _ arr)){ $ temp _ file=$ _ FILES[' upload _ file '][' tmp _ name '];$img_path=$_POST['save_path'].'/'兰德(10,99)。日期(' YmdHis ').''$ file _ extif(move _ uploaded _ file($ temp _ file,$ img _ path)){ $ is _ upload=true;} else { $msg='上传失败;} } else { $msg='只允许上传. jpg| .png| .可交换的图像格式类型文件!}}保存路径是通过邮政传进来的,
旁路方法
然后参观1.php。
文件内容检查文件幻数检测主要是检测文件内容开头的文件幻数。比如图片类型的文件幻数如下。要绕过jpg的文件幻数检测,必须在文件开头写入以下值:
Value=FF D8 FF E0 00 10 4A 46 49 46要绕过gif文件的幻数检测,应该在文件的开头写入以下值。
Value=47 49 46 38 39 61要绕过png文件的幻数检测,应该在文件的开头写入以下值。
Value=89 50 4E 47然后在文件的幻数后添加自己的木马代码。
文件相关信息检测图片文件相关信息检测常用的是getimagesize()函数,只需要伪造文件头,即在幻数的基础上增加一些文件信息,有点像下面的结构。
GIF89a(.some binary data for image.) php phpinfo(); (. skipping the rest of binary data .)
在这种环境下,header detection、getimagesize和php_exif都可以被图片马绕过:
复制normal.jpg/b shell.php/a webshell.jpg文件加载测试一般调用API或函数进行文件加载测试,常见的有图像渲染测试。
甚至是二次渲染(过滤效果几乎是最强的)。渲染/加载测试的攻击方式是代码注入绕过,二次渲染的攻击方式是攻击文件加载器本身。
对渲染/加载测试的攻击——代码注入旁路可以利用图像处理软件将代码注入到一张图片中。用winhex看数据,可以分析出这类工具的原理是在不破坏文件本身渲染的情况下,寻找空白区域填充代码。
一般图片的评论区基本可以绕过进行渲染测试,毕竟文件结构本身是完整的。
二次渲染imagecreatefromjpeg二次渲染它相当于是把原本属于图像数据的部分抓了出来,再用自己的API 或函数进行重新渲染在这个过程中非图像数据的部分直接就隔离开了
临时文件路径 $filename=$_FILES['upload_file']['name']; $filetype=$_FILES['upload_file']['type']; $tmpname=$_FILES['upload_file']['tmp_name']; $target_path=UPLOAD_PATH.basename($filename); //获得上传文件的扩展名 $fileext=substr(strrchr($filename,'.'),1); //判断文件后缀与类型,
绕过方法得去找图片经过GD库转化后没有改变的部分,再将未改变的部分修改为相应的php代码。
条件竞争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='上传出错!'; }}这里先将文件上传到服务器,
绕过方法然后不断访问webshell:
上传成功。参考链接:
https://blog.csdn.net/Kevinhanser/article/details/81613003https://secgeek.net/bookfresh-vulnerability/https://xz.aliyun.com/t/24352人点赞知识归纳