0x01:

检查源代码,发现JS前端验证,关闭JS即可连接,或者手动添加.php,或者上传1.jpg,再抓包修改为php

0X02:

if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
仅存在判断connect-type,抓包修改为image/jpeg,image/png,image/gif,BP抓包,可上传



0X03:

查看源码,尝试用php3,phtml绕过

0X04:

黑名单验证:(包含了所有的黑名单文件)
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".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",".ini");
.htaccess文件,全称为Hypertext(超文本入口),提供了针对目录改编配置的方法,在一个特定的文档中放置一个包含一个或者多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受限制,管理员可以通过Apache的AllowOverride来设置
0上传.htaccess文件,写入SetHandler application/x-httpd-php,所有文件解析为PHP
然后上传<?php phpinfo(); ?> 可以解析

0x05:

逻辑绕过和第十关一样 加上一个空格

0x06:

$file_name = strtolower($file_ext) //转换为小写
源码没有大小写,转为为2.PhP,可以上传

0x07:

没有$file_ext = trim($file_ext) 没有首尾去空

0x08:

没有进行.处理,利用windows特性,会自动去除后缀的.,后缀加.进行绕过

0X09:

没有进行::DATA绕过,可在后缀名加::DATA绕过
::DATA会把这之后的数据当成文
件流处理,且不会检查后缀名,保持之前的::DATA之前的文件名
$file_ext = str_ireplace('::DATA','',file_ext); 上传成功出现403页面,不能正常解析

0x0A:

先进行去除最后的.操作,再进行首位去空操作
修改文件名为info.php. . 经过处理后称为upload_path/info.php.

0X0B:

$fire_name = str_ireplace("deny_")(deny_ext,"",$file_name)     把带有黑名单中的后缀变为空
例子:
echo str_ireplace("world","shanghai","world world!")
hello shanghai
上传.pphphp
循环过滤还是递归过滤 接下来为白名单绕过

0X0C:

00绕过。。。文件系统读到0X00时,会认为文件已经结束。利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0X00,%00上传截断。

因为php的底层基于C语言开发的,c语言的截断就是%00截断

抓包将info.php.jpg后面的一个.换为0x00,在上传时,当系统文件读到0x00时,会认为文件已经结束。从而将info.php.jpg的内容写入到evil.php中,从而达到攻击的目的。

0X0D:

GET型和POST型

0X0E,OXOF:

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。 如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误。

0XA1:

图片马

0XA2:

。。。图片渲染  winhex可改

0XA3:

条件竞争

0XA4:

图片马

0XA5:

空格

0XA6:

数组
explode() 函数把字符串打散为数组,end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功),这里是取post参数数组中的最后一个文件名。reset() 函数将内部指针指向数
组中的第一个元素,并输出。
可控点是save_name: 传空/字符串
则取上传文件名
如果上传conn19.php.jpg,会遇到explode分割为数组:
$file[0]=conn19,$file[1]=php $file[2]=jpg
$ext=jpg可以过白名单
但是reset($file)=conn19.$file[3-1]=jpg就是图片了
所以这里应该用到save_name,而且要传数组(传字符串就和空一样效果) 传数组
save_name[3]=conn19.php
save_name[5]=jpg
$ext=jpg过白名单
reset($file)=conn19.php $file[1]=null
就成功上传conn19.php.(多出个点但是windows自动去掉了没影响) 还可以尝试
1=conn19
2=php
3=jpg
或者Pass19的00截断
0=conn19.php(0x00)
1=jpg

注:没有详细说明的靶场会在渗透测试体系化学习笔记会补充

upload-labs 1-21关通关记录的更多相关文章

  1. SUCTF 2019 Upload labs 2 踩坑记录

    SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...

  2. 靶场练习-Sqli-labs通关记录(1-4关)

                              0x00 实验环境 本地:Win 10 靶场:sqli-labs(共65关,每日一关) 0x02 通关记录 简介:一天一关! (1)第一关: 简单的 ...

  3. upload-labs通关记录

    upload-labs通关记录 一句话木马解读 一般的解题步骤 或者可以直接用字典爆破一下 https://github.com/TheKingOfDuck/fuzzDicts/blob/master ...

  4. 靶场练习-Sqli-labs通关记录(盲注)

              0x00 实验环境 本地:Win 10 靶场:sqli-labs(共65关,每日一关) 0x02 通关记录 简介:一天一关! (5)第五关: 由于此处与前四关有明显的差别,故在此我 ...

  5. Upload - Labs (下)

    Pass - 11: 1.查看源代码,发现进行了一次对后缀名替换成空格,因此考虑双写绕过, 2.上传成功, 关键代码: $is_upload = false; $msg = null; if (iss ...

  6. SQL Labs刷题补坑记录(less1-less30)

    补坑加1,这几天快速刷一下sqllabs 来巩固下sql注入基础吧,也算是把很久以前没刷的过一遍,do it! 第一部分: LESS1: 直接报错,有回显的注入, http://localhost/s ...

  7. 网络安全实验室 注入关通关writeup

    URL:http://hackinglab.cn 注入关  [1] 最简单的SQL注入username = admin' or ''='password随便什么都可以直接可以登录 [2] 熟悉注入环境 ...

  8. mysql5.7.21安装要点记录

    下载的是Zip解压缩版,Windows系统,因为很久没有在Windows上安装过,这次安装发现了几处和以前安装不一样的地方,特记录如下,供大家参考 MySQL配置文件位置 bin目录下的mysql_c ...

  9. Upload - Labs (上)

    Pass - 01: 1.尝试上传一个php文件:aaa.php,发现只允许上传某些图片类型,用bp抓包,发现http请求都没通过burp就弹出了不允许上传的提示框,这表明验证点在前端,而不在服务端 ...

随机推荐

  1. 题解-[HNOI2016]序列

    题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...

  2. VMware 虚拟机网卡设置与外网访问

    1 查看虚拟机网卡设置,查看虚拟机网关. 2 然后,设置本地机器VMnet8网卡的IP地址和子网掩码.切记,IP地址不能与虚拟机网卡IP地址相同. 3 配置虚拟机Centos的ens33网卡 TYPE ...

  3. JSON类型解析

    JSON类型解析 一.序列化和反序列化 程序中的对象,如python中的字典.列表.函数.类等,都是存在内存中,不方便传递或存储,所以需要将内存中的对象转化为文本或者文件格式,来满足传输和持久化(存储 ...

  4. 六、Jmeter测试元件-测试计划

    启动Jmeter时,会默认建好一个测试计划,启动一个Jmeter只有个测试计划 测试用到的源码下载地址 https://www.cnblogs.com/fanfancs/p/13557062.html ...

  5. Happens-Before原则到底规定了什么

    Happens-Before 规则 如何理解 Happens-Before 呢?如果望文生义(很多网文也都爱按字面意思翻译成"先行发生"),那就南辕北辙了,Happens-Befo ...

  6. 3分钟快速搞懂Java的桥接方法

    什么是桥接方法? Java中的桥接方法(Bridge Method)是一种为了实现某些Java语言特性而由编译器自动生成的方法. 我们可以通过Method类的isBridge方法来判断一个方法是否是桥 ...

  7. 抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实

    2020年中国.NET开发者大会活动纪实 1 2020年12月19日的苏州工业园区,天公作美,阳光明媚,气象迷人,正是一个搞事的好日子.在这里,数百名中国.NET开发者们汇聚一堂,怀揣着激情和梦想,一 ...

  8. angular8 大地老师学习笔记---第九课

    父组件:news组件 <app-header [title]="title" [msg]="msg" [run]='run' [home]='this'& ...

  9. Telegraf+Influxdb+Grafana自动化运维监控

    概述:Telegraf收集信息,influxdb时序数据库存储数据,grafana平台展示数据,并进行监控告警,组成一个自动化运维监控平台. 一.influxdb ​ InfluxDB是一个由Infl ...

  10. 【Hadoop】:Windows下使用IDEA搭建Hadoop开发环境

    笔者鼓弄了两个星期,终于把所有有关hadoop的环境配置好了,一是虚拟机上的完全分布式集群,但是为了平时写代码的方便,则在windows上也配置了hadoop的伪分布式集群,同时在IDEA上就可以编写 ...