暑假摆烂第三天

Upload-Labs-Linux 1-20

目录

Upload-Labs-Linux 1-20

 pass-1: 前端js验证​编辑​编辑

 Pass-2:Content-Type绕过

 Pass-3:特殊后缀名解析绕过

Pass-4:.htaccess绕过

Pass-5:后缀大小写绕过

Pass-6:文件后缀加点绕过

 Pass-7:利用函数漏洞绕过

 Pass-8:::$DATA(Windows文件流绕过)

Pass-9:deldot漏洞

Pass-10 :str_ireplace


 一打开是有介绍的,这是一个非常好的练习webshell的题目,提供了20种类型,有些方法可以通用,但要知道做题目的是掌握更多技能,所以每题都要好好做,题目由简入难,开始做题前先看一下这个。

 pass-1: 前端js验证

   题目以及给出源代码,可以对比一下其他题的代码,你会发现这个题目是没有GET或者POST传参的,再看一下代码类型,你不难发现这其实是一个js,说明这个题目提交文件的时候是需要在当前浏览器检查文件类型的,所以根据出题思路,最普通的就是绕过js,所以我们就要找到方法,使Google浏览器按f12再按f1,我们可以打开后台看到选项。

 看到调试程序的禁用,打勾。

再进行上传一句话木马,如果你不知道一句话木马的话,快去学习一下。

<?php @eval($_POST['cmd']);?>

创建一个php文件,写入这么一句代码。

然后上传,打开蚁剑进行连接,这里有一点要注意,地址是 图片右击复制地址,密码为cmd。

连接成功后在根目录就可以找到flag,不过这并不是我们目的,找到flag也只是锻炼技能所以继续下一题,记得删除文件再开始,

 Pass-2:Content-Type绕过

   根据提示和代码发现数据包会对文件类型辨别,只接受jpef/gif/png类型,这其实有很多思路,但根据提示应该是让我们通过content-type 进行绕过,所以用burp进行抓包,

 Pass-3:特殊后缀名解析绕过

 这题目你会发现不能上传文件名中含有PHP的文件了,改变content-typed类型不管用了,而因为黑名单过滤禁用.asp,aspx,php,jsp。但是一些特殊的后缀名文件可能会被Apache的配置文件httpd.conf当做php来解析。(可以了解一下文件上传到服务器机制原理,了解Apache的作用)

php3 php5 pht phtm phtml ......

把后缀修改到可以的,其他就一样了。

Pass-4:.htaccess绕过

 这一题你发现禁用了这些特殊的后缀名,所以需要想别的方法,这里用到了一个知识点,黑名单机制过滤了大量后缀名,但是没有过滤.htaccess

.htaccess文件也被称为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或者多个指令的文件,以作用于此目录及其所有子目录。

.htaccess可以用于文件密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定ip地址的用户、这个功能默认是不开启的。

创建一个这样后缀的文件,然后写入

AddType application/x-httpd-php .jpg

这个指令的含义是告诉服务器将以 .jpg 结尾的文件视为 PHP 文件。通常,.jpg 文件被认为是图片文件,但通过将其与 PHP 关联起来,服务器会将这些文件解析为 PHP 代码并执行。

通常情况下,服务器只会解析以 .php、.html 等扩展名结尾的文件作为 PHP 或 HTML 代码。但是,通过添加 AddType 指令并指定 application/x-httpd-php 类型,服务器会将指定的文件扩展名(此例中为 .jpg)与 PHP 关联起来,使其可以作为 PHP 脚本执行。

因为jpg类型并没有过滤,所以把一句话木马后缀名改为png上传即可,服务器自己会解析为php语言,只要是没在黑名单中的都是可以的,根据你自己喜欢选择。但htaccess文件写入的内容要相应改变. 

Pass-5:后缀大小写绕过

发现htaccess也已经背禁用,不过

发现这题代码和上一题少了一个转换大小写验证,所以这题应该是让我们用大小写绕过,

一般情况下,文件类型后缀的大小写是没有区别的。在大多数操作系统和网络环境中,文件扩展名的大小写是不敏感的,也就是说,不管是大写还是小写形式,它们被视为相同的文件类型。

例如,对于一个名为 “image.jpg” 的文件和一个名为 “image.JPG” 的文件,在大多数情况下,它们被视为相同的文件类型,都是 JPEG 图像文件。这意味着,无论您使用小写的 “.jpg” 还是大写的 “.JPG”,它们会被认为是相同的文件类型,并在应用程序或服务器中以相同的方式进行处理。

然而,需要注意的是,在某些特定的操作系统、文件系统或应用程序环境中,可能会对文件扩展名的大小写敏感。因此,在编写代码或处理文件类型时,最好遵循一致的约定,并对文件扩展名进行一致的处理。这样可以确保代码在不同环境中的一致性和可移植性。

 所以任意修改一下后缀大小写即可。

Pass-6:文件后缀加点绕过

这题代码和之前少了一个删除空格,所以自然想到使用空格

只有当服务器是Windows这种方法才可行,在shell.php后面加个空格即可,Windows的操作系统对文件名后有空格会直接去掉空格当做php文件解析.

 Pass-7:利用函数漏洞绕过

$file_ext = strrchr($file_name, '.');

需要了解一下这个函数的功能

这行代码使用了PHP内置函数strrchr()来获取文件名中最后一个出现的.之后的部分,即文件的扩展名。

具体解释如下:

  • $file_name 是一个包含文件名的字符串,例如 “example.jpg”。
  • strrchr() 函数返回$file_name字符串中最后一个出现的.字符及其之后的部分。如果在$file_name中找不到.字符,那么strrchr()函数将返回false
  • 所以,$file_ext 变量将包含扩展名的部分(包括.字符),例如 “.jpg”。

 会发现他是只找最后一个点,那我们如果用shell.php.是不是返回.后面是空的,那这个函数就不会截取到数据,那么就可以绕过下文的,仔细了解一下这个代码。

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

 Pass-8:::$DATA(Windows文件流绕过)

这题代码比前面少了一个

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

所以明显要我们用这个知识点,所以 

“::$DATA” 是 Windows 操作系统中的一个特殊标记,在某些情况下会出现在文件名的末尾。它表示文件是由另一个文件(通常是一个文件的剪贴板副本)或挂载点生成的数据流。

例如,如果你有一个文件名为 “example.txt” 的文本文件,当你将其复制到剪贴板,并将粘贴的文件重命名为 “example.txt::$DATA”,那么这个新文件会被视为是 “example.txt” 文件的数据流副本。

对于绝大多数应用和操作系统来说,文件名中包含 “::

 上传shell.php::$DATA即可

Pass-9:deldot漏洞

文件多了一个deldot函数,查询这个函数作用

deldot(file_name); //删除文件名末尾的点

所以发现他只是消除一个点,那我们直接传两个点的,就可以绕过。

上传shell.php..

Pass-10 :str_ireplace

PS:$file_ext = str_ireplace('::$DATA', '', $file_ext);可以使用双写绕过接着用Windows文件流绕过

这个函数是出去原来黑名单有的关键字,但我们可以运用这个弊端,就像水果消消乐消掉一部分,另一部分补过来依然会组成一组,而这里函数只用一次,所以传shell.pphphp.消掉第一个php剩下shell.php,所以依然可以 .

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值