upload-labs(1-10)

人过留名,雁过留声
人生天地间,凡有大动静者
必有猪头

Pass 1

① 源码分析

后端没有做任何限制,前端 js 代码使用白名单对可上传文件的后缀做了限制

在这里插入图片描述
在这里插入图片描述

② 漏洞利用

  1. 写一个脚本文件 test.php ,内容如下:
    在这里插入图片描述

  2. 直接上传 PHP 文件是不行的,因为前端的 js 有白名单限制。
    在这里插入图片描述

  3. 将脚本文件后缀名改为白名单中任意一个,上传之后用 Burpsuite 截包修改文件后缀名进行绕过。
    在这里插入图片描述

  4. 上传脚本文件之后的关键一步在于找到上传的脚本文件的路径,在这里上传的文件在页面中有回显,可以右键 ”查看图像位置“ ,然后再另一个窗口打开。
    在这里插入图片描述
    ps:还可通过repeater模块查看上传文件存储的位置。
    在这里插入图片描述
    在这里插入图片描述

  5. 前端限制的绕过可以有多种姿势,除却上面提及的一种姿势外还有下面常用的几种。
    ① 前端直接修改验证代码
    在源码中可以得知限制文件上传类型的白名单在 checkFile() 函数中,打开 F12 开发者工具,直接定位元素,发现 form 表单的动作调用了 checkFile() 函数,于是可以直接删除动作来接触前端对文件上传类型的限制。
    在这里插入图片描述
    删除动作之后直接上传 PHP 文件即可。
    在这里插入图片描述
    在这里插入图片描述
    ② 修改白名单
    ③ 浏览器禁用 JavaScript
    如果浏览器禁用 JavaScript,那么在 JavaScript 中的白名单自然也就无法作用了。
    在浏览器的搜索栏输入 about:config,在接下来的搜索栏中搜索 javascript.enabled,将 true 转换为 false,重启浏览器即可生效。
    在这里插入图片描述
    在这里插入图片描述

Pass 2

① 源码分析

在前端没有做限制,在后端 Content-Type 做了白名单限制,对文件名后缀(文件类型)没做限制。

在这里插入图片描述

② 漏洞利用

  1. 每做新的一个关卡要清空一下上传的文件,以便验证结果。
    在这里插入图片描述
  2. Burpsuite 截包修改 Content-Type 的值为白名单中任意一个即可。
    在这里插入图片描述
  3. 右键获取脚本地址,在新的窗口读取出来。
    在这里插入图片描述
    ps: 也可以把脚本的扩展名暂时修改为白名单允许的上传的类型,(此时的Content-Type自然也符合要求)然后再用 Burpsuite 抓包再修改过来。
    在这里插入图片描述

Pass 3

① 源码分析

trim() 函数移除字符串两侧的空白字符或其他预定义字符。
strrchr()查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
设置后缀名的黑名单'.asp','.aspx','.php','.jsp'
提取出后缀名之后再做限制:
1. 删除文件名末尾的点
2. 将后缀名转换为小写
3. 去除后缀名的字符串::$DATA
4. 后缀名结尾去空

在这里插入图片描述

② 漏洞利用

黑名单中限制了部分后缀名,针对于限制的后缀名分别由其他的后缀名可代替

asp : asa cer cdx
aspx : ashx asmx ascx
php : php3 php4 php5 phtml
jsp : jspx jspf
exe exee

可以选择对应的后缀名进行替换,然后绕过。(这里选择 .php3)

在替换后缀名的时候,如果需要替换尝试的后缀名多的话可以结合使用 burpsuite 的 repeater 模块进行数据包回放,也可以使用 intruder 模块进行暴力破解

在这里插入图片描述
从这里可以得知上传的文件被重命名了,这也是预防黑客攻击的一种手法。
ps:在这里就是由于上传文件被重命名导致 Pass 4 的某些绕过姿势在这里无法复现。
在这里插入图片描述
ps:这里需要注意的是,php3 之所以能够被成功解析都是因为 apache 的配置。在 PHP study 的目录下进入 \Apache\conf\httpd.conf
(如果将此项注释掉,那么将连最基本的 PHP 文件都无法解析,显示在浏览器页面的就是一堆源码)
在这里插入图片描述
如果在 httpd.conf 文件中没有配置 php3 或其他文件类型的话,可以手动添加,之后重启 apache 服务即可。

Pass 4

① 源码分析

和 Pass 3 相比,Pass 4 的黑名单限制更全

在这里插入图片描述

② 漏洞利用

1. 绕过姿势一

虽然黑名单的限制范围很广,但是还是没有对 php6 进行限制。
在这里插入图片描述
在这里插入图片描述

2. 绕过姿势二

利用中间件 apache 的解析漏洞绕过

在 apache 错误的环境配置下,对未知后缀名的解析,如果由多个后缀名的话,如 test.php.aaa.zhutou apache 会从右往左依次解析能够识别的后缀名为止。
在这里插入图片描述
在这里插入图片描述
ps:利用此方法绕过的前提是上传的文件没有被重命名。(故此方法不适用于 Pass 3)

3. 绕过姿势三

利用 .htaccess 文件进行解析

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

① 该文件默认开启,启用和关闭在httpd.conf文件中配置。

在这里插入图片描述

② 创建htaccess文件,编辑内容为:
SetHandler application/x-httpd-php

意思是将该目录下的所有文件解析为php文件来执行

③ 如果指定文件名的文件,才能被当做PHP解析,内容为:
<FilesMatch "zhutou">
SetHandler application/x-httpd-php
</ FilesMatch>

ps:FilesMatch 使用正则表达式,表示文件名或后缀如果有连续性的像 “zhutou” 这样的字符串即可被当成 PHP 文件解析

在创建 .htaccess 文件的时侯注意文件名必须为空,但是在 Windows 操作系统中会提示必须键入文件名。
在这里插入图片描述
可以先随便键入文件名,然后用 Burpsuite 截包再把文件名去除。
这里我的 .htaccess 文件内容以及解析的效果如下:
在这里插入图片描述
在这里插入图片描述

4. 绕过姿势四

利用 Windows 操作系统下的文件命名规则

文件名不能包含:< > / \ | : * ?
上传不符合 Windows 命名规则的文件名,windows系统自动去掉不符合规则符号后面的内容。

test.php.
test.php(空格)
test.php:1.jpg
test.php:: $ DATA
test.php::$DATA…… .

使用 Burpsuite 截包修改文件名
在这里插入图片描述
上传之后在 upload 文件夹上发现上传的文件,但是内容也被清除,所以此方法不完善,但可以有个概念。
在这里插入图片描述

Pass 5

① 源码分析

黑名单中添加了 .htaccess 类型,但是仍漏了 php6 (如果apache httpd.conf 的配置中有对 php6 进行解析的话可以使用其进行绕过)
重命名文件名,所以无法利用未知文件后缀名进行绕过。
和 Pass4 源码相比缺少了将后缀名转换为小写的限制
$file_ext = strtolower($file_ext);//转换为小写

在这里插入图片描述

② 漏洞利用

大小写绕过

ps:在 Windows 环境中文件名不区分大小写,在 Linux 环境中文件名区分大小写,所以在 Linux 环境中不能进行大小写绕过。
在这里插入图片描述
在这里插入图片描述

Pass 6

① 源码分析

和 Pass5 源码相比多了将后缀名转换为小写,却少了将首尾去空。
file_ext = trim($file_ext); //首尾去空

在这里插入图片描述

② 漏洞利用

在后缀名后面加空格进行绕过

在这里插入图片描述
在这里插入图片描述

Pass 7

① 源码分析

没有对上传的文件重命名
和 Pass6 的源码相比少了删除文件名末尾的点
$file_name = deldot($file_name);//删除文件名末尾的点

在这里插入图片描述

② 漏洞利用

1. 未知后缀名绕过

在这里插入图片描述

2. 后缀名加点绕过

在这里插入图片描述
在这里插入图片描述

Pass 8

① 源码分析

对上传的文件进行重命名(不能利用未知后缀名绕过)
和 Pass7 源码相比,少了在后缀名的后面去除字符串 ::$DATA
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

在这里插入图片描述

② 漏洞利用

Windows 文件流特性绕过

PHP 在Windows 上如果 “文件名” + “:: $ DATA” ,则 PHP 会将 “:: $ DATA” 之后的数据当成文件流处理,不会检测 后缀名,且保持 “::$DATA” 之前的文件名。

在这里插入图片描述
在这里插入图片描述

Pass 9

① 源码分析

红色框框内一波操作猛如虎,又有大量黑名单的加持(不过依然没有过滤 php6),看似天衣无缝,然而却又两处疏漏:
1. 没有对上传的文件重命名
2. 没有对题取后缀名做循环处理
任何一处的失误就导致漏洞产生

在这里插入图片描述

② 漏洞利用

用 Burpsuite 将上传的文件 test.php 修改为 test.php. .
在这里插入图片描述
在这里插入图片描述
ps:其实对于没有对上传文件进行重命名的都可以试试这个绕过姿势(如 :Pass7)

Pass 10

① 源码分析

定义了黑名单(但仍没有 php6,哈哈哈)
用 str_ireplace() 函数将文件名中含有黑名单中的字符串替换为空,且只替换一次。
ps:该函数不区分大小写,所以不能用大小写混淆绕过

在这里插入图片描述

② 漏洞利用

双写后缀名绕过

在这里插入图片描述
在这里插入图片描述

总结

  1. 如果是前端代码限制,可直接使用开发者工具进行前端代码修改绕过。

  2. 浏览器禁用 js

  3. 使用 .htaccess 文件解析绕过

  4. 使用Windows操作系统下的文件命名规则进行绕过 test.php:1.zhutou

  5. 利用 Windows 文件流特性进行绕过 test.php::$DATA

  6. 后缀名大小写,双写绕过

  7. 后缀名尾部加空格 test.php(空格)

  8. 后缀名尾部加点 test.php.

  9. 在没有对上传文件进行重命名的关卡中,可以尝试使用未知后缀名绕过和 test.php. . 的方式绕过

                                                                                                            猪头
                                                                                                         2020.2.12
    
发布了21 篇原创文章 · 获赞 3 · 访问量 636

猜你喜欢

转载自blog.csdn.net/LZHPIG/article/details/104265649
今日推荐