upload-labs通关笔记

upload-labs通关笔记

学术不精,wp还不完整,再经过一段时间的学习之后,将其补充完整

Pass-01 js检查

查看源码

在这里插入图片描述

可知,允许上传的文件类型为 .jpg|.png|.gif

我们上传一个jpg文件

在这里插入图片描述

burpsuite抓上传的包

在这里插入图片描述

将jpg改为php后,放包

在这里插入图片描述

上传成功!

Pass-02 Content-Type

查看源码

在这里插入图片描述

有源码可知,发现只判断Content-Type类型,所以我们只需修改Content-Type进行绕过即可

首先上传php文件,抓上传包

在这里插入图片描述

在这里插入图片描述

将红色划线部分修改为image/jpeg或image/png或image/gif后,放包,文件即上传成功!

在这里插入图片描述

Pass-03 黑名单验证

查看源码

在这里插入图片描述

有源码可知,本关不允许上传.asp,.aspx,.php,.jsp类型的文件

我们可以通过不常见的php扩展名绕过黑名单的限制

比如.phtml,.php3,.php4,.php5

在这里插入图片描述

Pass-04 黑名单验证(.htaccess绕过)

查看源码

在这里插入图片描述

有源码可知,黑名单拒绝了所有格式的文件后缀名,除了.htaccess

所以此关通过.htaccess绕过进行上传

首先,上传一个.htaccess文件

内容为:SetHandler application/x-httpd-php

文件命名为:.htaccess

在这里插入图片描述

接下来,上传一个.jpg文件

内容为:<?php
phpinfo();
?>

在这里插入图片描述

文件命名为:0.jpg(文件名自己定义)

上传即可。

Pass-05 黑名单验证(.user.ini)

查看源码

在这里插入图片描述

有源码可知,本关没有被限制的后缀名有php7和.ini

php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。

引发.user.ini需要的条件:

  • 服务器脚本语言为PHP

  • 服务器使用CGI/FastCGI模式

  • 上传目录下要有可执行的php文件

首先,创建一个.user.ini文件并上传

.user.ini文件里的意思是:所有的php文件都自动包含666.jpg文件。.user.ini相当于一个用户自定义的php.ini

.user.ini文件的内容:auto_prepend_file=123.jpg

在这里插入图片描述

接着再上传一个123.jpg文件,内容为:<?php eval($_POST['123'])?>

在这里插入图片描述

然后修改php配置文件php-ini,将300改为10

user_ini.cache_ttl控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。

在这里插入图片描述

保存后重新启动phpstudy,等待10s后文件即可上传成功

连接蚁剑,将文件名改为readme.php

在这里插入图片描述

在这里插入图片描述

Pass-06 黑名单验证(大小写绕过)

查看源码

在这里插入图片描述

有源码可知,本关过滤掉了.htaccess,但可以使用大小写绕过。

本关可以不使用Burpsiute修改后缀名,直接修改即可。

在Windows系统下,对于文件名中的大小写不敏感。

一开始做的时候,无论上传.PhP还是.phP都不成功。

后来发现是第五关源码文件中的$file_ext = strtolower($file_ext); //转换为小写语句没有注释掉,在前面加上//即可成功上传大小写后缀文件。

Pass-07 黑名单验证(空格绕过)

查看源码

在这里插入图片描述

由源码可知,代码中没有对上传文件的文件名做去空格处理,存在添加空格绕过黑名单的问题。

Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。

本关需要使用Burpsuite工具截断http请求,然后在文件名后添加空格。

首先,添加一个php文件,截取上传的包,截取成功后,在文件名后缀php后添加空格。

在这里插入图片描述

添加完成后,放包,文件即上传成功!

Pass-08 黑名单验证(点绕过)

查看源码

在这里插入图片描述

有源码可知,其中缺少取出文件名最后点的处理。

Windows系统下,文件后缀名的最后一个点会被自动去除。

和Pass-06类似,只需将截取的包中,文件名后缀的结尾处添加.,文件即可上传成功!

Pass-09 黑名单验证(特殊符号)

查看源码

在这里插入图片描述

Windows系统下,如果上传的文件名test.php::$DATA会在服务器上生成一个test.php的文件。其中内容和所上传文件的内容相同,并被解析。

和之前的关卡类似,首先上传一个php文件,将截取包中文件名的后缀之后添加::$DATA,文件即可上传成功。

Pass-10 黑名单验证(路径拼接绕过)

查看源码

在这里插入图片描述

由源码可知,上传后的文件没有进行随机化的重命名,直接保存在了服务器上。

在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。

在截取包的文件名后缀的最后添加. .(点 空格 点),文件即可上传成功。

Pass-11 黑名单绕过(双写绕过)

查看源码

在这里插入图片描述

在代码的编写过程中,只对黑名单中的内容进行空替换,由于只替换一次,所以造成双写绕过。

str_ireplace() 函数替换字符串中的一些字符(不区分大小写)。

该函数必须遵循下列规则:

  • 如果搜索的字符串是一个数组,那么它将返回一个数组。
  • 如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。
  • 如果同时需要对某个数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余的元素将用空字符串进行替换。
  • 如果是对一个数组进行查找,但只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。

注释:该函数是不区分大小写的。请使用str_replace()函数执行区分大小写的搜索。

**注释:**该函数是二进制安全的。

同样,本关在截取包中的文件名后缀修改为.pphphp或其他双写形式即可。

Pass-12 白名单验证(00截断_GET方式)

查看源码

在这里插入图片描述

0x00是十六进制的表示方法,是ASCII码为0的字符,在某些函数处理时,会把它当做结束符。

系统在对文件名进行读取时,若遇到0x00,会认为读取结束。

GET型提交的内容会被自动进行URL解码。

注意:需要关闭Apache配置文件中的GPC,否则无法成功。

本关建议使用php5.3.4以下的版本。

首先,上传一个.jpg文件

在这里插入图片描述

截取上传包,并修改文件名后缀

在这里插入图片描述

放包,文件即上传成功!

验证:http://127.0.0.1/upload-labs-master/upload/0.php?/7120210526181717.php

Pass-13 白名单验证(00截断_POST方式)

查看源码

在这里插入图片描述

在POST请求中,%00不会被自动解码,需要在16进制中修改00

选择.jpg文件上传,截取上传包

在这里插入图片描述

如图所示进行操作,在二进制中对%00进行修改,放包,文件即上传成功!

Pass-14 图片webshell上传

查看源码

在这里插入图片描述

在服务端的PHP代码中,对于用户上传的文件做文件类型检查,查看文件格式是否符合上传规范。可以检查文件二进制格式的前几个字节,从而判断文件类型是否正确。

本关可直接上传图片马,图片马的制作方法我的上一篇博客有做介绍,可参考。

首先我们需要简单了解文件包含漏洞

文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

php 中引发文件包含漏洞的通常是以下四个函数:

1、include() 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。

3、require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行

4、require_once() 它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。

当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。这一特性,在实施攻击时非常有用。

上传一个图片木马,截取上传包

在这里插入图片描述

蚁剑连接的URL:http://127.0.0.1/upload-labs-master/include.php?file=./upload/1720210530093823.jpg

在这里插入图片描述

Pass-15 getimagesize()图片马绕过

查看源码

在这里插入图片描述

getimagesize()是PHP提供的方法,用以判断目标文件是否为图片。其返回结果中有文件大小和文件类型(通过读取文件的前八位的十六进制)。

本关同样是上传图片马,我是用的方法是直接伪造头部。

Pass-16 exif_imagetype()图片马绕过

···

Pass-17 二次渲染绕过

···

Pass-18 竞争条件绕过(1)

查看源码

在这里插入图片描述

文件上传过程:服务器获取文件->保存上传临时文件->重命名移动临时文件

Pass-19 竞争条件绕过(2)

···

Pass-20 代码审计(1)

查看源码

在这里插入图片描述

有源码可知,本关没有对上传的文件做判断,只对用户输入的文件名进行判断。

首先,上传一个php木马文件,截取上传包

在这里插入图片描述

截取之后修改文件后缀名为.php/后放包,如下图

在这里插入图片描述

上传成功后,蚁剑连接

在这里插入图片描述

在这里插入图片描述

文件即上传成功!

Pass-21 代码审计(2)

查看源码

在这里插入图片描述

首先,上传一个php木马文件,截取上传包,修改部分数据,如下图

在这里插入图片描述

放包,文件上传成功

在这里插入图片描述

蚁剑连接

在这里插入图片描述

在这里插入图片描述

显示上传成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿刁〇하

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值