upload靶场1~10关

第一关(JS校验)

前端检验根本没用

准备好脚本文件

发现无法上传php文件

先将文件改为6.png

上传该文件并用bp抓包,send to Repeater,将其后缀改回6.php,再send即可上传成功

第二关(服务端(后端)验证)

查看源码,发现本题的漏洞在于后端利用 PHP 的全局数组$_FILES()获取上传文件信息,其只检测content-type字段

常见的content-type字段有

mage/jpeg :jpg 图片格式

image/png :png 图片格式

image/gif :gif 图片格式

text/plain :纯文本格式

text/xml : XML 格式

text/html : HTML 格式

直接上传6.php

使用burp抓包后发送到repeater

修改content-type为image/jpeg

上传成功

第三关(文件后缀名校检)

还是先上传一下6.php,大败而归

观察提示和源码,发现有一些黑名单文件

可以换一个后缀,改为6.php3

可以换一个后缀,改为6.php3

上传成功

第四关(文件名后缀校验(配置文件解析控制))

康康源码,发现那些后缀都被过滤掉了。。。

但是.htaccess文件可以用

什么是.htaccess呢

htaccess是一个用于配置Apache Web服务器的分布式配置文件,它可以在目录级别配置网站的访问控制、重定向、错误页面等功能。它的作用类似于nginx中的location块,但是.htaccess文件是基于文件系统的,而不是基于nginx的配置文件。因此,.htaccess文件可以在不重启Web服务器的情况下实时生效。

写一段htaccess代码在记事本上

如下

  1. <FilesMatch "p.jpg">

  2. SetHandler application/x-httpd-php

  3. </FilesMatch>

更改名称

再写一个php文件,后缀改名为.jpg

先上传.htaccess

再上传 p.jpg

访问http://127.0.0.1/upload-labs/upload/p.jpg

成功访问

第五关(文件名后缀校验(.user.ini解析))

康康源码

这关把上关使用的.htaccess也过滤掉了 。。。

这关可以利用.user.ini配置文件

什么是.user.ini配置文件

.user.ini配置文件是一个能够被动态加载的ini文件,类似于.htaccess文件,它是对当前目录下所有php文件的配置设置。和php.ini不同的是,.user.ini文件不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。利用.user.ini文件可以进行文件上传等操作,但需要满足服务器以fastcgi模式启动、允许上传.user.ini文件、上传文件的所在目录存在php文件等条件。例如,可以在.user.ini文件中设置auto_prepend_file属性,使得所有的php文件都自动包含指定的文件。

php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。 但是想要引发 .user.ini 解析漏洞需要三个前提条件:

1 服务器脚本语言为PHP

2 服务器使用CGI/FastCGI模式

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

什么是CGI/FastCGI模式

CGI(通用网关接口)是一种标准的Web服务器和应用程序之间进行交互的方式。在传统的CGI模式中,每个HTTP请求都会启动一个新的进程来执行CGI程序,这会导致性能上的损失。

为了解决这个问题,FastCGI模式被引入。FastCGI是一种改进的CGI模式,它允许Web服务器保持一个CGI程序的进程,而不是为每个请求都启动一个新的进程。这样可以显著提高性能,减少资源消耗。

在FastCGI模式下,Web服务器和CGI程序之间通过一个持久的连接进行通信,这样可以避免重复的初始化和清理工作,从而提高了性能和效率。

总的来说,FastCGI模式相比传统的CGI模式具有更好的性能和可伸缩性,因此在大型网站和应用程序中被广泛使用。

做题如下

新建一个txt文件或者php文件,写入如下代码:

auto_prepend_file=p.jpg

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

php.ini)

再将文件名改为.user.ini

回到题目,先上传.user.ini文件,再上传p.jpg文件

后面跟上一题相同

第六关(文件名后缀校验(大小写绕过))

这关连.ini都给过滤了

但是没有使用strtolower()函数

什么是strtolower()函数

strtolower()函数是一个PHP函数,用于将字符串中的所有字符转换为小写。该函数通常用于对用户输入的数据进行标准化处理,或者用于在比较字符串时忽略大小写。示例代码如下:

$str = "Hello World"; echo strtolower($str); // 输出 "hello world"

可以使用大小写绕过黑名单

把.php 格式改为.Php 上传上去之后

就会自动解析为.php

上传成功!

第七关(文件名后缀校验(空格绕过))

康康源码

他未做去空格的操作->trim() ,所以还有空格绕过

trim()是什么

trim()是一个字符串处理函数,用于去除字符串首尾的空格或其他指定字符。该函数通常用于清理用户输入的数据,以确保数据的一致性和准确性。示例代码如下:

$str = " Hello World "; echo trim($str); // 输出 "Hello World"

Windows 系统下,对于文件名中空格会被作为空处理

程序中的检测代码却不能自动删除空格。从而绕 过黑名单

bp抓包,p.php后加一个空格,上传成功

第八关(文件名后缀校验(点号绕过))

看看源码

他对上传的文件后缀名未做去点的操作 deldot()

"deldot()"是一个自定义函数,那么它可能是用来删除字符串中的句号(".")的函数。这样的函数可能会在数据处理或字符串操作中使用,以去除不需要的字符

我们还有点号绕过

接下来就和上一关一样了

bp抓包,在p.php后加个.就行了

成功上传

第九关(文件名后缀校验(::DATA绕过))

还是康康源码

deldot()函数过滤了点号

但又对上传的文件后缀名没有做去::$DATA 处理

($DATA可能是指对数据进行处理的过程。这可能包括从用户输入中获取数据,对数据进行清洗和验证,然后将其存储到数据库或进行其他操作。数据处理通常涉及对数据进行格式化、转换、验证和安全性检查等操作,以确保数据的完整性和安全性。在不同的编程语言和框架中,数据处理的具体方式可能有所不同。)

因此我们可以利用::$DATA后缀

Windows 系统下,如果上传的文p.php::$DATA 会在服务器上生成一个

p.php 的文件,其中内容和所上传文件内容相同,并被解析

bp抓包,在p.php后加个::$DATA就行了

但是要注意

如果后期要在网站上访问的话

要去掉::$DATA

第十关(文件名后缀校验(拼接绕过))

依旧是康康源码

该处理的都处理了,可恶

类比pikachu的SQL注入

构造一个p.php. .(点空格点)

接下来和上一关一样

如下

成功上传!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值