Pass-01(客户端JS绕过)

客户端JS判断方法:上传一个php文件,用bp抓包,如果没抓到包就弹框说不能上传,就说明是客户端JS检测
客户端JS绕过方法:
方法一:
上传一个图片马格式为jpg,然后bp抓包,将格式改为php
方法二:
攻击JS代码:查看网页元素找到那一段JS代码删除掉

Pass-02(MIME类型验证)

MIME类型验证实质就是检测Content-Type头,先bp抓包
方法一:
上传一个jpg格式图片马,将后缀在burp中改为php,因为上传的是jpg格式文件,所以Content-Type内容是image/jpeg,能通过MIME验证,而我们将后缀改为了php,所以成功上传了php文件

方法二:
直接上传php格式图片马,burp抓包发现Content-Tpye内容为application/octet-stream,将其改为image/jepg,这样burp中的内容就和方法一一样,能够成功上传

Pass-03(绕过黑名单验证)

上传jpg格式图片马bp抓包,然后改后缀为php发现不能上传,给了一个提示

考虑大小写绕过,发现大小写都被过滤了,再考虑黑名单里面没有的,比如php3,发现上传成功

Pass-04(.htaccesss上传)

一样开始的操作,发现提示该类文件不运行上传,尝试大小写绕过,无果
尝试采用黑名单没有的,例如php3这种,无果
试一下.htaccess上传,发现上传成功

尝试访问一下

.htaccess文件介绍:

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

.htaccess上传方法:

1.新建一个txt文本,里面内容为SetHandler application/x-httpd-php(意思是设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会当做PHP执行。不符合则报错),另存为-文件类型选择所有文件-文件名该为.htaccess,这样才能保存成功
2.保证httpd-conf配置文件里面的AllOverride后面接的是All,如果是None就改为All
上传.htaccess文件成功后直接上传jpg图片马,上传成功,该jpg格式图片马能使用php解析,这样就能菜刀连了

Pass-05(大小写绕过)

开始一样的操作无法上传,试试php3,改一下大小写,发现phP能够绕过上传

Pass-06(空格绕过)

1-5题方法都用了一遍发现都不能成功上传,再试试空格绕过,发现上传成功
空格绕过原理:Windows系统下,对于文件名中空格会被作为空处理,程序中的代码却没添加子哦对那个删除空格功能,从而绕过黑名单
绕过方法:bp抓包,在php后面加上空格,多少个空格无所谓

Pass-07(.号绕过)

.号绕过原理:Windows系统下,文件后缀名最后一个点会被自动去除
所以bp抓包,将文件后缀改为php.这样就能绕过,最后一个点被去除就是php格式

Pass-08(特殊符号绕过)

特殊符号绕过原理:Windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析
所以bp抓包,在php后面加上::$DATA,就能上传一个php文件上去

访问一下图片地址,发现2.php::$data文件不存在,因为上传上去的2.php

访问一下2.php,成功上传

Pass-09(路径组合绕过)

这道题过滤了空格,过滤了后缀最后的点,过滤了特殊符号,过滤了大小写,黑名单内容很详细。。
我们看一下源代码

<?php
$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); //首尾去空'
>?

这道题采用路径组合绕过,bp抓包,将2.php改为2.php. .这样上传上去去掉最后的点,去掉空格,就剩下2.php.而最后的.在Windows系统下会被自动删除于是2.php就上传成功

Pass-10(双写绕过)

将图片马以jpg格式上传,bp抓包改为php格式,发现上传上去了,有点怀疑,访问一下上传的地方

发现上传上去的文件名为2. php被吃掉了,考虑一下双写绕过
将2.php改为2.pphphp,当然也可以结合大小写绕过

访问一下地址,成功上传

Pass-11(GET型00截断)

00截断需要两个条件:
1.php版本小于5.3.4
2.php的magic_quotes_gpcOFF状态
现在php版本大都没那么低,演示一下过程
上传一个jpg格式图片马,bp抓包,在upload/后面加上2.php%00

Pass-12(POST型00截断)

在POST请求中,%00不会被自动解码,需要在16进制中进行修改00
上传一个jpg图片马,bp抓包,在upload/后面加上2.php空格,如图

进入hex,找到2.php空格,空格对应16进制也就是20,找到20修改为00

Pass-13(图片webshell上传)

上传的图片webshell或者一句话需要利用文件包含漏洞才能执行
文件包含漏洞代码

做一个文件包含漏洞php文件放入upload中用来检测是否符合要求
查看一下网页源代码发现要检测前两个字节,于是在图片马内容最前面可以加上GIF98A,成功以gif格式上传,附上检测代码

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;
}

利用文件包含内容打开图片马

利用这个链接就可以菜刀连了

Pass-14(图片webshell上传)

可以和13一模一样的做法,能达到效果

Pass-15(图片webshell上传)

和13一模一样,能达到效果

Pass-16(二次渲染)

上传一个gif格式图片马
发现上传成功后的文件末尾的php代码被删去

对于gif格式的二次渲染可以采用对比两个文件,找到未改变的内容

在那中间插入php代码就行

再次上传,发现php代码仍然存在未被删除

用文件包含漏洞验证一下或者菜刀连一下,成功
如果是png和jpg格式的就比较麻烦,需要用到大佬写的脚本,具体参考https://xz.aliyun.com/t/2657

Pass-17(条件竞争上传)

我们先看源代码:

<?php
include '../config.php';
include '../head.php';
include '../menu.php';
$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 = '上传出错!';
}
}
?>

发现php文件还是能够上传,但是会被下一步骤unlink删掉,我们可以考虑利用这一步删除的时间差进行上传,bp抓包,发送到Intruder,重发进行上传文件的操作,可以多开几个(多线程)

Pass-18(条件竞争上传)

和17一样是条件竞争,但是一直上传不上去,考虑可能是白名单,采用上传图片马形式,因为上传上去的文件都会重命名,例如下面一个上传成功的图片,测试多个图片发现前面都被加上了upload,后面是重命名

所以采用条件竞争上传让它来不及改名,上传一个图片马为2.jpg,上传上去未被命名的时候为upload2.jpg,这样上传就成功了

Pass-19(CVE-2015-2348 move_uploaded_file() 00截断)
附上源码

<?php
include '../config.php';
include '../common.php';
include '../head.php';
include '../menu.php';$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 = trim($_POST['save_name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
*/$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 . '文件夹不存在,请手工创建!';
}
}
?>

上传webshell,同时自定义保存名称,直接保存为php是不行的,发现move_uploaded_file()函数中的img_path是由post数save_name控制的,因此可以在save_name利用00截断绕过
先bp抓包,红色的字符串就是将要保存的名字

将其改为1.php空格,在hex中将空格(20)改为00就能上传成功

upload -labs通关解析及上传类型总结和思考相关推荐

  1. Pikachu靶场通关之文件上传

    Pikachu靶场通关之文件上传 1.文件上传漏洞概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上 ...

  2. Codeigniter文件上传类型不匹配错误

    Codeigniter的文件上传类方便了我们使用PHP来处理文件上传的操作,使用起来非常简单,如下: $config['upload_path'] = './uploads/'; $config['a ...

  3. html页面点击按钮上传文件,点击按钮实现文件上传及控制文件上传类型

    1.原生js实现文件上传 html部分: 上传文件 js部分: upload(event) { //代替执行上传功能 let it = event.target; $(it).next().click ...

  4. input:file上传类型控制简单介绍

    <input type="file">可以上传文件,这个就不用多介绍了. 其实我们使用此控件可以进行上传文件格式的控制. 特别说明:在实际应用中,不但要在前端进行验证, ...

  5. js 图片压缩上传(base64位)以及上传类型分类

    一.input file上传类型 1.指明只需要图片 <input type="file" accept='image/*'> 2.指明需要多张图片 <input ...

  6. JavaScript实现限制文件上传类型和大小

    JavaScript实现限制文件上传类型和大小 <title>文件上传前台控制检测程序 v0.6</title> <style>body,td {font-size ...

  7. php限制上传类型,php 上传类型限制的简单示例

    这篇文章主要为大家详细介绍了php 上传类型限制的简单示例,具有一定的参考价值,可以用来参考一下. 对php上传类型限制,php文件上传实例感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...

  8. 微信小程序解析并上传excel

    excel文件 第一步 文件 cloudfunctions/excel/ node_modules index.js (需要自己建立的) package-lock.json package.json ...

  9. PHPMyWind教程:增加上传类型

    基于phpmywind 5.0版本,以下我们以增加图片上传类型对png图片格式支持 1> 首先,我们登录到PHPMyWind的后台,网站信息配置>附件设置,在上传图片类型添加PNG类型,如 ...

最新文章

  1. Linux系统守护进程详解
  2. hibernate关联关系(多对多)
  3. 个人代码库のC#千千静听 - 桌面歌词 (功能模拟)
  4. Java开发者写SQL时常犯的10个错误
  5. lua math.random()
  6. 搜狗浏览器收藏夹在哪_安卓Edge浏览器最新版42.0.2轻体验,整体优良但无特别惊喜...
  7. linux ssh证书登录
  8. oracle字符串转日期比较大小写,【varchar】oracle中比较日期大小日期定义的是varchar2类型的......
  9. 遗传算法详解 附python代码实现
  10. 事半功倍,在JCreator中查询java API
  11. 阿里图标库——批量下载图标
  12. 德语翻译器在线翻译中文-德语翻译器支持各大语言翻译
  13. Java集合、泛型和枚举
  14. 站在潮流前沿,不到100行代码快速实现一个简易版 vite
  15. 弗洛伊德:本我、自我和超我
  16. 解析Linux中的VFS文件系统
  17. ifconfig 命令使用
  18. 免费的Office办公套件LibreOffice for Mac
  19. iOS 获取设备类型和系统信息
  20. 蓝桥杯--黄金连分数

热门文章

  1. 学习计算机基础知识论文,中小学生应注重学习计算机的基础知识_信息技术论文.doc...
  2. 这是一份全面 清晰的架构设计指南:MVC、MVP MVVM模式(含实例讲解)
  3. [Linux]Xshell给CentOS虚拟机配置静态IP
  4. T460/s 安装Sierra 10.12.2 成功分享……
  5. 基于snooplog分析蓝牙连接过程,进一步学习蓝牙协议栈
  6. 导入sql文件遇到的尴尬(错误1366、cmd显示乱码)
  7. 如何写论文的参考文献
  8. 小伦智造冲刺上市:毛利率整体下滑,王小伦不再是董事长兼总经理
  9. Radiology第11期:心脏MRI预测扩张型心肌病的心源性猝死风险
  10. Mac中使用ToolBox下载的idea无法打开解决办法