Upload-labs靶场Pass01-Pass21全解

Pass-01 前端JS

前端JS的检验
加载时弹出对话框
绕过:

1.利用BP工具
2.修改webshell为允许上传类型

先上传个a.php试试,发现弹窗口,只能上传jpg、png、gif类型的图片

image-20240722154750390

写个一句话木马,尝试上传

image-20240722165703450

JS绕过上传

可能是前端存在过滤,打开F12检查一下,发现是checkFile()函数存在过滤

image-20240722164008313

禁用JS,因为这个checkFile()函数是前端的脚本,所以如果经用了JS,实际上就是禁用这个检测的checkFile函数,或者直接删除掉这个checkFile的函数,因为如果要禁用JS的话,就有可能禁用掉正常的JS代码,可能会影响文件的正常上传

然后再次上传a.php,发现上传成功了(然后用hackbar)

image-20240722163356584

image-20240722163443855

或者用burp抓包的方式

image-20240722164259262

修改后缀的png变成php,然后重新发包

可以看到已经上传成功,得到了图片的url

image-20240722164602326

然后用蚁剑连接一下,就可以连接后台噜

密码就是一句话木马上传的那个

image-20240722165453034

image-20240722165605870

Pass-02 MIME检测

服务器MIME检测:检测Content-Type的内容
绕过:修改类型

php文件上传,发现不行

image-20240722170940270

然后将其后缀改成png并抓包

image-20240722171257331

可以看到文件类型为png

image-20240722171414269

修改一下后缀,和上道题的方法相同

image-20240722171345088

然后连接蚁剑,拿到后台

image-20240722171619240

Pass-03 特殊文件后缀

特殊解析后缀

服务器文件名拓展名检测(检测根文件 extension 相关的内容)
 
基于黑名单检测:黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多。一般由个专门的blacklist,里面包含常见的危险脚本文件。
绕过:1.文件大小写让绕过(Php ,PhP pHp,等)
     2.黑白名单绕过(php,php2,php3,php5,phtml,asp,aspx,ascx,ashx,cer,asa,jsp,jspx)cdx,\x00hh\x46php
     3.特殊文件名绕过
(1)修改数据包里的文件名为 test.php 或 test.asp_(下划线是空格)由于这种命名格式在       windows系统里是不允许的,所以在绕过上传之后windows系统会自动去掉.点和空格。Linux和      Unix中没有这个特性。
(2)::$DATA(php在windows的时候如果文件名+"::DATA"会把::DATA之后的数据当作文件流处 
理,不会检测后缀名,且保持"::DATA"之前的文件名,其目的就是不检查后缀名)
     4.0x00截断绕过(5.2 C语言中将 \0 当作字符串的结尾)
     5.htaccess文件攻击(结合黑名单攻击)
     6.解析绕过

上传3.php,发现失败了

查看一下源代码吧

if (isset($_POST['submit'])) {
   
    if (file_exists(UPLOAD_PATH)) {
   
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

浅浅分析一下:isset是确定上传按钮存在

file_exists是确定上传路径存在

deny_ext是删除后缀名为’.asp’,‘.aspx’,‘.php’,‘.jsp’

trim:是php的函数,是去除字符串首尾的空白符

deldot是即从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止

strchr:查找.的第一次出现,并返回此字符串的其余部分

strtolower:把所有字符都转换为小写

str_ireplace:把不允许的后缀名都给删除了,并且不区分大小写 ,将::$DATA替换为空

黑白名单绕过

在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。

image-20240722172348649

我们可以试试将3.php改成3.php3

image-20240722172444101

上传成功了,但是文件名的名字发生改变

image-20240722173535403

特殊文件名绕过

进行特殊文件名绕过

image-20240722173301849

可以发现成功上传,但是文件名有变动

image-20240722173458171

Pass-04 .htacess上传

.htacess上传绕过

文件上传之.htaccess绕过黑名单——upload-labs靶场第四关

.htaccess上传绕过文件上传黑名单
Apache服务器允许在每个目录下存在一个名为.htaccess的文件,.htaccess是一个纯文本文件,该文件可以作为Apache辅助配置文件,仅在当前目录生效。.htaccess文件可以实现URL重写、自定义错误页面、MIME类型配置以及权限访问控制等。起到了伪静态应用、图片防盗链、自定义404错误页面、允许或阻止特定IP地址范围访问、目录浏览与主页、禁止访问指定文件类型以及文件密码保护等等的作用。

.htaccess只针对Apache服务器有效

上传一个php文件,发现不能上传

image-20240723104354139

查看源码:

if (isset($_POST['submit'])) {
   
    if (file_exists(UPLOAD_PATH)) {
   
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

上一道题因为过滤了上传文件的文件名后缀,所以我们可以使用php5、phtml、php3、phps等后缀名来进行绕过,但是这一关将这些后缀名也进行了过滤,所以我们可以用.htaccess上传来绕过

可以上传一个.htaccess的文件

创建一个.htacess的文件,里面写入:
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
FileMatch表示匹配4.png的文件,当该文件匹配成功后,setHandler表示将文件名中有“4.png”的文件作为PHP类型的文件来进行处理

然后再上传4.png,利用图片构造HackBar请求

image-20240723115002670

Pass-05 user.ini文件上传

user.ini文件上传

Upload-labs Pass-05 .user.ini文件上传-优快云博客

.user.ini文件上传
从上一关,我们可以知道.htaccess可以覆盖apache的配置文件,而user.ini 则可以覆盖php.ini的配置

.htaccess文件只能用于apahce,不能用于iis和nginx等中间件
.user.ini只能用于Server API为FastCGI模式下,而正常情况下apache不是运行在此模块下的。
.htaccess和.user.ini都只能用于访问本目录下的文件时进行覆盖。

所以先创建.usere.ini文件

里面写入:
方法一:
auto_prepend_file = 5.png         //包含在文件头
方法二:
auto_append_file = 5.png          //包含在文件尾

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

然后上传.user.ini,再上传5.png

发现上传成功

image-20240723114628128

直接查看图片路径会现在解析图片错误,是因为只有在访问php文件时,才会自动包含5.png,所以作者给了提示在上传目录下是有一个readme.php文件的,所以直接访问此文件就可以包含上传的shell

image-20240723115143474

Pass-06 大小写绕过

大小写绕过

上道题的源码,有个strtolower

image-20240723140534545

这道题的源码:

image-20240723140645018

可以看到没有strtolower了,所以直接用大小写绕过

利用BP抓包看一下,修改一下大小写

image-20240723120826066

大小写绕过原理:
Windows系统下,对于文件名中的大小写不敏感,例如test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感,例如:test.php和 TesT.php就是不一样的。

Pass-07 空格绕过

空格绕过

查看源码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
   
    if (file_exists(UPLOAD_PATH)) {
   
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = $_FILES['upload_file']['name'];
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        
        if (!in_array($file_ext, $deny_ext)) {
   
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值