精华内容
下载资源
问答
  • 文件上传攻击
    千次阅读
    2022-04-10 16:21:30

    实验环境:

    攻击机,Win10物理机(192.168.17.129)

    靶机,OWASP Broken Web Apps(192.168.17.130)桥接模式

    由于实验分时段完成,每次的网段不一样,但攻击机和靶机的地址始终为129和130。

    工具,中国蚁剑

    1.在Win10浏览器中输入192.168.17.130访问OWASP,点击“Train”,在username中输入 :admin‘or’1=1,登录成功后,选择“Damn Vulnerable Web Application”训练环境。

    <

    更多相关内容
  • 文件上传攻击

    2021-10-22 08:04:40
    2.了解文件上传攻击的方式 3.掌握防范攻击的方法 预备知识 有时候需要让来访者能够上传文件,例如在邮件服务中上传附件,在博客中上传图片,或是提供PHP+MySQL网页空间来让来访者上传文件。 在PHP中,文件...

    1.理解文件上传的概念

    2.了解文件上传攻击的方式

    3.掌握防范攻击的方法

    预备知识

            有时候需要让来访者能够上传文件,例如在邮件服务中上传附件,在博客中上传图片,或是提供PHP+MySQL网页空间来让来访者上传文件。

            在PHP中,文件的交换与表单数据传递的方式不同,在<form>标签中必须指定enctype属性值是multipart/form-data:

    <form action="upload.php" method="post" enctype="multipart/form-data">

           当同时传递文件与表单数据时,HTTP请求会有特殊的格式。因此在<form>标签中指定enctype属性值是multipart/form-data时,才能让文件正确上传。

             设置上传文件的类型,需要设置type属性值为file的input标签:

    <input type="file" name="file1" />

    一个简单形式的文件上传表单:( 详细程序代码看 :

    <meta Contenr-type="test/html" charset="utf-8" />
    <form action="ex9-1-upload.php" method="post" enctype="multipart/from-data" target="form-target" onsubmit="startUpload();">
            上传: <input type="file" name="file1" />
                 <input type="file" name="MAX_FILE_SIZE" value="1000000" />
                 <input type="submit" name="submit" value="上传文件" />
    </form>

    <input type="file" />类型用来指定上传文件的路径。

       MAX_FILE_SIZE隐藏类型用来设置能够允许上传的最大文件大小是40106字节。

    <input type="submit" />类型用来激活一个上传文件的操作。

     点击“演示一”

    点击“演示2”文件是一个一般形式的文件上传表单,如图:

    上传文件的大小

        在PHP的配置文件php.ini中,上传文件的大小默认值是2MB。也可以编辑这个数值,来修改允许上传的文件大小。

    打开“C:\xampp\php\php.ini"文件找到“upload_max_filesize”字段的位置,如图:

     修改可以上传文件的大小

        上传文件的大小默认值是128MB,可以更改这个数值来修改可以上传文件的大小,更改后保存php.ini文件,并且重新启动Apache服务器使修改的数据生效。

        另外一种设置上传文件大小的方式,是在表单内加入一个隐藏按钮:

                 <input type="hidden" name="MAX_FILE_SIZE" value="2M" />

        隐藏按钮的名称必须是“MAX_FILE_SIZE”,而且必须放在所有上传文件类型的前面。

       “MAX_FILE_SIZE”隐藏按钮的value属性值,就是允许上传文件的最大大小。注意浏览器不一定会按照“MAX_FILE_SIZE”隐藏按钮的设置值,使用php.ini文件来设置是最保险的方式。

    $FILES数组变量

    PHP使用变量$_FILES来上传文件,$_FILES是一个数组。如果上传test.txt文件,那么使用:             print_r($_FIIES);    来显示$_FILES数组的内容,将会得到:      

    $_FILES
    
           Array
    
             (
    
                [file] => Array
    
                (
    
                      [name] => test.txt
    
                       [type] => text/plam
    
                       [tmp_name] => C:\WINDOWS\TEMP\php5D.tmp
    
                     [error] => 0
    
                    [size] => 1662
    
                  )
    
              )

        ●  ['name']:这是在客户端的原始上传文件的名称,不包含路径。

        ●  ['type']:上传文件的MIME类型。

        ●  ['tmp_name']:服务器端用来保存上传文件的临时文件路径。

        ●  ['error']:上传文件时的错误信息。

        ●  ['size']:上传文件的大小,单位是字节。

    其中,name与type是由来访者提供,tmp name、error与size则是由PHP系统提供。

        如果“上传文件”按钮的name属性值是file:

             <iput type="file" name="file" />

        那么使用$_FILES['file']['name']来取得客户端的上传文件名称,不包含路径。使用$_FILES['file'][’tmp_name']来取得服务器端用来保存上传文件的临时文件路径。

    存放上传文件的文件夹

        PHP不会直接将上传文件放在网站的根目录中,而是保存为一个临时文件,这个临时文件的名称就是$_FILES ['file']['tmp_name']的值。用户必须将这个临时文件复制到存放的网站文件夹中。

        $_FILES['file']['tmp_name']的临时文件名称是由PHP设置的,与上传文件的原始名称不一样。用户必须使用$_FILES['file']['name']来取得上传文件的原始名称。

    存放上传文件的文件夹路径是由php.ini文件的upload_tmp_dir来设置的。

    上传文件时的错误信息

    $_FILES['file']['error']变量用来保存上传文件时的错误信息,它的数值如表10-1所示。

    文件上传攻击

    黑客能发动的文件上传攻击包括以下几个方面。

        (1)黑客将可执行的PHP文件上传到网站的公共文件夹内,然后执行这个PHP文件来进行攻击。

        (2)如果黑客了解您的网站的文件结构,他就可以上传与您的网站文件有相同名称的文件来覆盖您网站内的原有文件。

        (3)黑客可以连续不断地上传文件,使您的Web应用程序没有更多的资源处理其他来访者的请求,由此来瘫痪您的网站,发动阻断服务攻击。

        (4)上传的文件会保存到一个临时的文件夹,默认值的位置是系统的文件夹。

    如果黑客有权限存取这个文件夹,就可以在文件上传期间在PHP还没有移动到目的文件夹之前读取上传的文件数据。

    上传可执行文件

        如果网站提供来访者上传图片的功能,那么必须小心来访者上传的实际上可能并不是图片,而是可以执行的PHP程序。如果存放图片的是一个公开的文件夹,黑客就可以远程执行上传的PHP文件来进行攻击。

    上传的文件名称是在表单内指定,然后经由浏览器传递给服务器的。详细代码:

    <meta Contenr-type="test/html" charset="utf-8" />
    <form action="ex9-5.php" method="post" enctype="multipart/from-data" target="form-target" onsubmit="startUpload();">
            上传: <input type="file" name="file1" />
                 <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
                 <input type="submit" name="submit" value="上传文件" />
    </form>

    假设现在我们打开“演示2”,单击浏览按钮,然后上传:

    C:\xampp\htdocs\example_code\source\code10\ex10-3-attack.php文件

    attack.php文件

    然后点击上传,此时你将会看到ex9-3-attack.php文件上传成功:

     这时我们就可以在远程执行下列HTTP请求,点击“攻击2”

     ex10-3-attack.php文件只是显示一行文字:

          Hello! 我是黑客

    如果ex9-3-attack.php文件中的代码具有删除目录/文件或其他攻击性的程序代码,那么就会对网站造成极大的伤害。

    现在来看打开ex10-4-attack.php文件的例子:详细代码

    <meta Contenr-type="test/html" charset="utf-8" />
    <form action="ex9-6.php" method="post" enctype="multipart/from-data" target="form-target" onsubmit="startUpload();">
            上传: <input type="file" name="file1" />
                 <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
                 <input type="submit" name="submit" value="上传文件" />
    </form>

    点击“攻击3”

     这会显示网站的C:/xampp/htdocs/example_code/source/code10/image文件夹的信息。

    覆盖原有文件

            如果黑客了解网站的目录结构,他就可以上传与网站文件有相同名称的文件。黑客可以藉此来覆盖网站内的原有文件,可以是系统文件、PHP文件,或是Web应用程序所使用的文件。

    瘫痪网站

            黑客可以连续不断地上传文件,或上传极大的文件,使Web应用程序无暇处理其他来访者的请求,借此来瘫痪网站,发动阻断服务( Denial of Service)攻击。

    存取上传的文件数据

            上传的文件会保存到一个临时的文件夹,默认值的位置是系统文件夹,在Windows上就是C:\WINDOWS\TEMP。

            这个上传文件的临时文件夹通常是所有来访者都可以读取的。在文件土传期间,在PHP还没有将上传的文件移动到目的文件夹之前,任何来访者都可能存取上传的文件数据。    ‘

    防范的方法

      在防范文件上传攻击时,可以使用下列方法。

          (1)如果您的Web应用程序不需要上传文件的功能就将它关掉。

          (2)限制能够上传的文件大小。

          (3)检查是否真的是上传的文件。

          (4)更改保存上传临时文件目录的路径。

          (5)读取上传文件的绝对路径与文件名称。

          (6)隐藏文件的路径。

    关掉上传文件的功能

        如果Web应用程序不需要上传文件的功能,则可以直接将上传文件的功能关闭来避免不必要的麻烦。

        打开“C:\xampp\php\php.ini”文件,找到file_uploads的位置,将file_uploads设置成Off。

    关闭文件上传的功能

    限制允许上传的文件大小

        如果黑客采取连续不断地上传文件,或是上传极大的文件,来使您的Web应用程序没有更多资源来处理其他来访者的请求,黑客就可以借此来瘫痪您的网站。

    PHP的限制机制可以让您限制允许上传文件体积的最大值,来避免来访者上传太大的文件。

        单独POST请求的最大值,可以使用php.ini文件的upload_max_size来设置。

    打开“C:\xampp\php\php.ini”文件,找到upload_max_size的位置,将upload_max_size设置成您想要的值,如图。

    限制单独POST请求的最大值

        upload_max_size的默认值是8M,表示整个POST请求的最大值是8MB。注意,upload_max_size的数值并不是单一上传文件的最大值,而是整个POST请求的最大值。

           整个POST请求包括上传的文件、表头、其他表单类型。如果上传的文件有10个,那么这10个上传文件的大小总和不能够超过8MB。

           上传文件的最大值可以用php.ini文件中的upload_max_filesize来设置。

    upload_max_filesize的默认值是2M,表示所有上传文件的最大值是2MB。注意,upload_max_filesize的数值并不是单一上传文件的最大值,而是所有上传文件的最大值。

           upload_max_filesize的设置值会比post_max_size的设置值小,这是因为post_max_size还包含了表头及其他的表单类型。

           更改post_max_size与upload_max_filesize的设置值,来符合网站的需求。因为黑客可以上传极大的图片或文件来占用服务器的处理时间。如果服务器只处理这些上传的图片或文件,就无法提供服务给其他的来访者。

           将post_max_size与upload_max_filesize的设置值设置得小些,具体的值就要视网站的需求而定。

    检查是否真的是上传的文件

       黑客会在上传的类型中输入类似:

            ../../etc/password

       的路径字符串,来显示网站内其他文件夹的文件,尤其是存放账号与密码的文件。

       PHP提供两个函数is_uploaded_file和move_uploaded_file,来检查是否是真正的上传文件。

        

        (1)如果要检查$_FILES变量中tmp_name所表示的是否是一个上传的文件,可以使用is_uploaded_file函数。

           is_uploaded_file函数的用法如下:

                      bool is_uploaded_file ( string filename )

           filename是上传文件的路径

               如果filename是使用HTTP的POST方法来上传的,那么is_uploaded_file函数会返回TRUE,请参考ex10-5.php文件。

                源代码:C:\xampp\php\php.ini

        (2)如果要将上传的文件移动到某个文件夹,可以使用move_uploaded_file函数。move_uploaded_file函数的用法如下:

          bool move_uploaded_file ( string filename, string destination )

        ●  filename是上传文件的路径。

        ●  destination是要移动的目的路径。

        如果filename是使用HTTP的POST方法来上传的,那么move_uploaded_file函数会返回TRUE。如果filename不是上传的文件,或是无法移动到目的路径,那么move_uploaded_file函数会返回FALSE。

        请参考ex10-6.php文件。

           源码详细请看:C:/xampp/htdocs/example_code/source/code10/ex9-6.php

    <?php
    header("Content-Type: text/html; charset=UTF-8");
    sleep(2);
    $fileTypes=array('jpg','png','gif','bmp'.'php','txt','html','asp','htm','doc','docx','xml','pdf','ini','exe','dll','chm');
    $result = null;
    $uploadDir = 'c:/xampp/htdocs/example_code/source/code10/image/';
    $maxSize = 1 * pow(2,20);
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {
        $myfile = $_FILES['filel'];
    
        $myfileType = substr($mfile['name'],strrpos($myfile['name'],".") + 1);
           if ($myfile['size'] > $maxSize) {
             $result = 1;
           } else if (!in_array($myfileType, $fileType)) {
              $result = 2;
           } else if (is_uploaded_file($myfile['tmp_name'])) {
              $toFile = $uploadDir . '/' . $myfile['tmp_name'];
               if (@move_uploaded_file($myfile['tmp_name'], $toFile)) {
                   $result = 0;
                   echo "上传成功!";
                      echo "是上传的文件,而是移动到目的路径"。$new_filename;
                 } else {
                   echo "上传错误" ;
                 }
    }
    ?>
    <?php
    header("Content-type: text/html; charset=UTF-8");
    $old_filename=$_FILES["filel"]["tmp_name"];
    $new_filename="c:xampp/htdocs/example_code/source/code10/image/";
    if (move_uploaded_file($old_filename, $new_filename))
    {
        echo $old_filename ."是上传的文件,而且移动到目的路径"。$new_filename;
    }
    ?>

     

        (3)另外还可以使用filesize函数,来检查上传文件的大小是否正确。

           源码详细请看:C:/xampp/htdocs/example_code/source/code10/ex9-5.php

     

    <?php
    header("Content-Type: text/html; charset=UTF-8");
    sleep(2);
    $fileTypes=array('jpg','png','gif','bmp'.'php','txt','html','asp','htm','doc','docx','xml','pdf','ini','exe','dll','chm');
    $result = null;
    $uploadDir = 'c:/xampp/htdocs/example_code/source/code10/image/';
    $maxSize = 1 * pow(2,20);
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {
        $myfile = $_FILES["filel"]["tmp_name"];
    if (is_uploaded_file($filename))
    {
        echo "$filename是上传的文件";
    }
        $myfile = $_FILES['filel'];
        $myfileType = substr($mfile['name'],strrpos($myfile['name'],".") + 1);
           if ($myfile['size'] > $maxSize) {
             $result = 1;
           } else if (!in_array($myfileType, $fileType)) {
              $result = 2;
           } else if (is_uploaded_file($myfile['tmp_name'])) {
              $toFile = $uploadDir . '/' . $myfile['name'];
               if (@move_uploaded_file($myfile['tmp_name'], $toFile)) {
                   $result = 0;
                   echo "上传成功!";
                 } else {
                   echo "上传错误" ;
                 }
           } else {
               $result = 1;
           }
    }
    ?>
    

        (4)如果上传的是图片文件,您可以使用getimagesize函数来检查上传图片的大小。getimagesize函数的用法如下:

           array getimagesize ( string filename [,array &imageinfo])

           filename是上传图片文件的路径

    getimagesize函数会返回一个数组,包含以下5个元素。

        ●  图片的高度。

        ●  图片的宽度。

        ●  图片的类型。

        ●  height="yyy" width="xxx"的字符串。

        ●  图片的MIME类型。

    更改临时文件夹的路径

        上传的文件会保存到一个临时的文件夹,在Windows上,PHP默认值的位置是在C:\xampp\tmp。

        这个临时文件夹通常是所有的来访者都可以读取的,因此建立一个只有网站管理员可以存取的文件夹来存放上传的临时文件,对于维护上传文件的安全会有很大的帮助。

        PHP的上传文件的临时文件夹是在php.ini文件中的upload_tmp_ dir设置的。

    打开“C:\xampp\php\php.ini”文件,找到upload_tmp_dir的位置。将upload_tmp_dir设置成您要的路径,例如:

        upload_tmp_dir = C:\my_upload_dir\temp

    如图所示:

    另外还可以使用chown函数来指定文件的所有者。chown函数的用法如下:

         bool chown ( string filename, mixed user )

           ● filename是上传文件的路径。

           ● user是文件的所有者,可以是名称或数字。

    读取上传文件的绝对路径与文件名称

        如果上传文件的路径中包含有“./”或“../”等可疑的路径字符,有可能就是黑客在使用目录切换攻击。黑客的目的是为了获取目录中的重要文件,例如包含账号与密码的文件。

        您可以使用realpath和basename两个函数来确保上传文件的路径中不会出现“./”或“../”等可疑的路径字符。

        浏览器提供的上传文件的路径,应该使用realpath函数返回规范化的绝对路径名,以及使用basename函数来返回不包含路径的文件名称。

            (1) realpath函数用来展开文件路径中的“"./"”、“"../"”及“"/"”等字符,然后返回绝对的路径名称。realpath函数的用法如下:

                  string realpath( string path )

            path是浏览器提供的上传文件的路径。

            下列范例:              

    <?php
    
                        chdir ('/var/www/');
    
                        echo realpath('./../../etc/passwd');
    
                  ?>

            会得到:

                  /etc/passwd

            (2) basename函数用来返回不包含路径的文件名称,用法如下:

                  string basename ( string path [, string suffi_x] )

                     ●  path是浏览器提供的上传文件的路径。

                     ●  suffix用来指定扩展名。

            单击“防护4”你将会看到值为index

    隐藏文件的路径

        上传的文件不要保存在公开的文件夹内,以避免被黑客直接读取。另外将文件的路径隐藏起来,或是将文件名称改成没有扩展名的随机文件名,都可以增加上传文件的安全性。

    展开全文
  • 文件上传攻击与防护

    2022-02-20 00:14:19
    文件上传攻击 稍有经验的开发者都知道对文件上传功能进行一些限制,防止用户上传网页木马文件,但是如果开发者没有使用有效的限制手段,往往不能很好的阻止攻击者上传木马文件,以下是常见的限制手段和绕过限制...

    文件上传攻击

    稍有经验的开发者都知道对文件上传功能进行一些限制,防止用户上传网页木马文件,但是如果开发者没有使用有效的限制手段,往往不能很好的阻止攻击者上传木马文件,以下是常见的限制手段和绕过限制手段进行上传攻击的方式

    1. 文件上传漏洞—绕过js检测

    客户端使用javascript对上传的文件做了限制,不允许上传以php结尾的文件。 在本实验中,可以通过Burp拦截服务器响应包信息,修改限制条件,让.php为后缀的文件能够顺利上传。

    先创建一个包含一句话木马的php文件,选择上传

    点击上传

    提示上传格式为图片类型的格式,所以将php文件类型更改为jpg格式

    文件上传成功(如果提示上传失败,则要在相应的文件夹下创建保存的文件夹)

    使用抓包工具抓取数据

    将文件后缀名改为php,并点击forward

    文件上传成功

     

    2.文件上传漏洞——绕过MIME类型检测

    MIME多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。标准的文件上传组件中会自动上传文件的MIME类型,但是由于MIME类型是从客户端传递的,修改也不影响文件正常运行,因此通过BURP拦截和修改MIME类型可以轻易绕过此类检测。

    常见的MIME类型:

    超文本标记语言文本 .html text/html

    普通文本 .txt text/plain

    RTF文本 .rtf application/rtf

    PDF文档 .pdf application/pdf

    PNG图像 .png image/png

    GIF图形 .gif image/gif

    JPEG图形 .jpeg,.jpg image/jpeg

    ASP .asp application/x-a

    1. 上传一句话木马 eval.php,提示文件类型不正确,请重新上传!

    1. 浏览器设置代理到BurpSuit,并开启拦截;

    1. 上传eval.php
    2. 在拦截的数据包中将application/octet-stream修改为image/jpeg;

    文件上传成功

    文件上传漏洞——绕过黑名单检测

    绕过方式:.htaccess文件攻击修通过move_uploaded_file函数把自己写的.htaccess文件覆盖掉服务器上的这样就可以解析定义名单了。 .htaccess文件用处:通过.htaccess文件调用php解释器去解析一个文件名中只要包含 “aa”这个字符串的任意文件,无论你文件名是什么样子,只要包含”aa”这个字符串,都可以被以php的方式来解析。

    .htaccess文件内容:<FileMatch “aa”> SetHandler application/x-httpd-php</ FileMatch >

     

    文件上传漏洞——绕过黑名单检测

    黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件扩展名,如:php、asp、aspx等;

    绕过方式:解析绕过

    1. Apache解析漏洞

    一个文件名为test. php. aaa. bbb. ccc的文件,Apache会从ccc的位置往 php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么 Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的扩展名为止。

    存在漏洞的版本:apache 2.0-2.2 有可能存在

    创建文件名为: phpinfo.php.aaa.ccc 的文件 放到phpstudy 的 www目录下

    2)IIS解析漏洞

    #1 IIS6.0

    @1: 新建一文件名字为:任意文件名.asp;任意文件名.jpg 此文件会当成脚本运行

    1. asa;1.jpg,2.cdx;2.txt)

    @2: 新建一个文件夹,名字为任意文件名.asp ;那么在这个文件夹里的内容全部会被当场脚本取运行。

    @3:服务器配置错误(put协议)

    @1: 新建一文件名字为:任意文件名.asp;任意文件名.jpg 此文件会当成脚本运行(如:aa.asa;1.jpg)

     

    物理机访问虚拟机地址

     

    @2: 新建一个文件夹,名字为任意文件名.asp ; 那么在这个文件夹里的内容全部会被当场脚本取运行。

     

    创建文件并写入asp语言

    物理机访问

     

    @3:服务器配置错误(put协议) 抓取请求包发送到repeater模块修改为PUT协议写入文件

     

    利用MOVE协议把上一步的文件tys.txt 移动重命名为567.asp, 移动时增加 Destination:http://192.168.3.95/567.asp 内容为移动后内容

    访问

    IIS解析漏洞

    #2 IIS7.0,7.5

    正常路径:uploads/1.jpg 把php文件修改后缀为jpg进行上传

    黑客思路:uploads/1.jpg/任意文件名.php 访问方式

    这个文件就会被当成脚本去执行。

    注:IIS7.0/7.5与nging解析让绕过相同,当前版本由于过低,无法演示IIS7.0/7.5,所以这里用nginx代替

    Nginx解析漏洞

    #1

    正常路径:uploads/1.jpg

    黑客思路:uploads/1.jpg/任意文件名.php

    Nginx解析漏洞

    #2 对低版本的Nginx可以在任意文件名后面添加%00.php进行解 析攻击。

    • Nginx 0. 5. * Nginx 0. 6. *

    •Nginx 0. 7 <= 0. 7. 65 Nginx 0. 8 <= 0. 8. 37

    正常路径:uploads/1.jpg

    黑客思路:uploads/1.jpg%00.php 当做正常脚本执行

    #3

    • Nginx 0.8. 41 〜1.4. 3 ; 1. 5 <= 1. 5. 7:

    •在linux系统里,以上Nginx容器的版本下

    正常路径:uploads/1.jpg

    黑客思路:uploads/1.jpg%20%00.php 当做正常脚本执行

    黑名单检测:一般有个专门的 blacklist 文件,里面会包

    含常见的危险脚本文件扩展名,如:php、asp、aspx;

    绕过方式:其他方式

    某些情况下管理员错误的服务器配置会导致.html ; .xml等静态页面 后缀的文件也可被执行。

    多文件上传时,有时服务器只对第一个上传的文件进行了检查,这 时通过上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过 滤。

    文件上传漏洞——绕过文件内容检测

    上传文件内容检测:对上传的文件内容做检测,是否包含恶意代码

    绕过方式:图片码绕过

    把代码文件和图片文件进行二进制编码合并形成新的图片,进行上传. 注意2.php代码最前面需要有一个空格

    cmd下执行:建议使用小图片

    copy /b 1.jpg+2.php=3.jpg

    生成图片后修改为3.jpg.php进行上传

    将创建的1.png和1.php文件合成一个新的图片

    (1)上传正常的php文件,无法上传;

    (2)将合并的文件进行上传;

    (3)文件,上传成功;

    上传文件

    文件上传攻击防护

    1.上传文件的存储目录不给执行权限

    2.隐藏上传文件访问路径

    3.文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)

    4.不能有本地文件包含漏洞(include dama. jpg)

    5.及时更新web应用软件避免解析漏洞攻击

    展开全文
  • 第7章 Web应用安全任意文件上传攻击演示目标要求Objectives了解任意文件上传攻击的基本流程;掌握在DVWA平台下任意文件上传攻击的基本方法;任意文件上传攻击演示一、任意文件上传漏洞的利用思路1、使用passthru() ...
  • 文件上传攻击演练

    千次阅读 2018-08-24 16:48:46
    文件上传攻击攻击者利用网站的一个上传接口来上传恶意木马文件,在此记录下我的学习过程 首先编写文件上传代码 &lt;body&gt; &lt;form action="upload.php" method="post" ...

    文件上传攻击指攻击者利用网站的一个上传接口来上传恶意木马文件,在此记录下我的学习过程

    首先编写文件上传代码

    <body>
        <form action="upload.php" method="post" enctype="multipart/form-data" name="upload" onsubmit="return lastname()">
            <input type="hidden" name="MAX_FILE_SIZE" value="204800"/>
            请选择要上传的文件:<input type="file" name="file"/>
            <input type="submit" name="submit" value="上传"/>
        </form>
        </body>

    这是上传界面代码,接着是所要上传到的文件即服务器端文件

    <?php
     if(($_FILES['file']['type'] == 'image/gif') || ($_FILES['file']['type'] == 'image/jpeg') || ($_FILES['file']['type'] == 'image/png')
    || ($_FILES['file']['type'] == 'image/bmp'))
     {
         if(is_uploaded_file($_FILES["file"]["tmp_name"])){
             $upfile=$_FILES["file"];
             $name=$upfile["name"];
             $type=$upfile["type"];
             $size=$upfile["size"];
             $tmp_name=$upfile["tmp_name"];
    
             echo "上传文件名:" . $_FILES["file"]["name"] . "<br />";
             echo "上传文件类型:" . $_FILES["file"]["type"] . "<br />";
             echo "上传文件大小" . ($_FILES["file"]["size"] / 1024) . "Kb<br />";
    
             $destination="/var/www/html/文件上传攻击/image/".$name;
             move_uploaded_file($tmp_name,$destination);
    
             echo "文件上传成功";
             echo "<br>文件预览:</br>";
             echo"<img src=" .$destination.">";
         }
         else{
             echo "文件上传失败";
         }
     }
     else{
         echo "文件类型不对";
     }
    ?>

    文件上传流程

    首先先理一理文件上传流程。

    js防护

    防护思路是通过前台js脚本来限制上传文件的后缀名,可以在文件上传的时候检测文件类型,实现代码

    <script type="text/javascript">
                function lastname() {
                    var file = document.getElementsByName('file')[0].value;
                    if (file == null || file == "") {
                        alert("你还没有选择任何文件,不能上传!");
                        return false;
                    }
                    //定义允许上传的文件类型
                    var allow_ext = ".jpg|.jpeg|.png|.gif|.bmp|";
                    //提取上传文件的类型
                    var ext_name = file.substring(file.lastIndexOf("."));
                    //alert(ext_name);
                    //alert(ext_name + "|");
                    //判断上传文件类型是否允许上传
                    if (allow_ext.indexOf(ext_name + "|") == -1) {
                        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
                        alert(errMsg);
                        return false;
                    }
                }
            </script>

    即可在前端直接检测上传文件

    绕过方式:由于其是前端检测,所以可以通过禁用浏览器运行js脚本来达到上传目的 ,如火狐浏览器在地址栏输入aout:config,再搜索javascript.enabled更改其设置

    MIME防护

    在http协议中,会利用content-type标识本次上传的内容,一个方法是用burpsuite抓包修改文件后缀,设置手动代理,代理地址为127.0.0.1,即可将http包抓包修改再上传

    文件中的content-type即为服务器端的MIME防护效果,由客户端浏览器自动生成,可将其修改为Image/jpeg,再点击forward

    服务器端文件检测防护

    在服务器端检测文件后缀名,其关键代码为

    if(($_FILES['file']['type'] == 'image/gif') || ($_FILES['file']['type'] == 'image/jpeg') || ($_FILES['file']['type'] == 'image/png')
    || ($_FILES['file']['type'] == 'image/bmp'))

    有黑名单,白名单两种形式,针对此类的绕过方法便是多重测试,找寻遗漏文件名,可以是大小写测试 特殊文件名测试等。

    服务器端文件内容检测

    文件内容检测通常由三种方法。一是检测上传文件头,二是调用函数对文件进行加载测试,三是图像内容检测。

     

     

     

     

    展开全文
  • 文件上传攻击漏洞与防护。
  • PHP代码审计------文件上传攻击

    千次阅读 2019-09-22 14:59:48
    一....攻击者要想成功实施文件上传攻击,必须要满足以下四个条件: 1.网站有上传功能 2.上传的文件能够被Web服务器解析执行,特定的后缀名。并且存放上传文件的目录要有执行脚本的权限。 3.用户能...
  • 文件上传漏洞攻击与防范方法

    千次阅读 2020-08-29 20:39:33
    文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,...
  • http://kavy.iteye.com/blog/2219245
  • 1.文件上传攻击 (1)首先进入测试网站,选择WEB APPlication 登录 admin admin (2)首先选择低级别的代码,测试低级别的文件上传测试 (3)选择进行文件上传 没有做任何的文件格式限定,上传任意...
  • Webshell简介 webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页...文件
  • web安全技术-实验六、文件上传漏洞
  • 1. 当存在文件上传漏洞时,只要恶意代码没有被过滤,就存在被执行的危险。 2. 掌握修改.htaccess以改变各种文件执行程序的方法。
  • 基本文件上传漏洞攻击实验

    千次阅读 2020-06-09 23:35:35
    ),上传php脚本或直接写到服务器目录,使用菜刀连接。详细参考 3.实验结果: 菜刀连接失败,之前能访问的测试环境网址在尝试菜刀连接后已无法访问,但是能ping通,打开windows 的git bash尝试curl 访问依然失败,...
  • 文件上传防止攻击的操作

    千次阅读 2020-04-22 23:03:28
    即使做了文件的后缀限制,但黑客可能也会把病毒的后缀改成常用的文件名后缀, 上传到系统后对系统进行攻击. . 解决的方案 读取这个文件的二进制数据流,根据文件的二进制数据的开头的几个字节代表的magic number来判断...
  • 本实验主要介绍了文件上传的基本方法,通过本实验的学习,培养学生独立思考能力。 链接:http://www.hetianlab.com/expc.do?ce=70acbe22-3d18-4c1e-b848-dee5327a9877 实验简介 实验所属系列:Web应用安全 实验对象...
  • 文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。 分类 根据简介,主要分为上传(客户端)、解析(服务端)两大类。 上传-javascript检测 简介 通过js代码,对文件后缀进行判断。 原理 一般...
  • web安全之文件上传漏洞攻击与防范方法
  • 文件上传 06 解析攻击

    2018-08-13 00:04:29
    像缓冲区溢出攻击,sql 注入攻击文件上传攻击,文件包含攻击,脚本代码注入等等 主要分为两种情况 直接解析/执行攻击 像缓冲区溢出和sql 注入攻击,脚本代码注入就是很明显的属于这里攻击 直接将...
  • 文件上传攻防解析.doc

    2018-03-09 16:24:25
    (免责申明:本资料摘自网上,仅用于网络安全技术交流和教学学习目的,切勿用于非法目的)文件上传是...本文将对文件上传的检测方式以及如何绕过相应检测方式进行详细的分析,并提供针了对文件上传攻击的安全防护方法
  • kali实施文件上传漏洞攻击:

    千次阅读 2020-05-09 09:23:49
    3)利用文件上传漏洞,使用kali(192.168.111.142)攻击 3.2 步骤 实现此案例需要按照如下步骤进行。 步骤一:DVWA级别设置Low 1)访问DVWA,选择Low级别,然后点击“File Upload”,如图-26所示 图-26 2)...
  • 安全测试之文件上传攻击

    千次阅读 2017-01-02 22:57:36
    文件上传攻击  ​文件上传类应用的范围还是很广泛的,利用这个应用同样也可以进行攻击文件上传的方式有多种,可以通过FTP也可以通过HTTP等,对比起来,FTP的上传需要管理大量的用户帐号,并且无法进行SSL编码...
  • 文件上传点没有对上传的文件进行严格的验证和过滤时,就容易造成任意文件上传,包括上传动态文件(asp,php,jsp)...如果上传的目标目录没有限制执行权限,导致所上传的动态文件可以正常执行,就导致了文件上传漏洞。
  • 上传文件攻击

    千次阅读 2014-11-20 15:40:44
    本文将对文件上传的检测方式以及如何绕过相应检测方式进行详细的分析,并提供针了对文件上传攻击的安全防护方法。 文件上传攻击是指攻击者利用WEB应用对上传文件过滤不严,导致可以上传应用程序定义类型范围之外...
  • 文件上传漏洞12】竞争条件攻击

    千次阅读 2022-03-11 23:43:25
    1. 理解业务逻辑漏洞的分析思路,该靶场是先保存后再删除,就存在这样的可利用漏洞,正确的开发思路应该是先对一切客户端的输入(包括文件)过滤没问题后,才允许进入服务端。 2. 掌握利用竞争条件攻击逻辑漏洞的...
  • 文件上传之htaccess攻击
  • 文件上传漏洞方法总结

    千次阅读 2022-04-24 22:24:39
    这种攻击方式是最为直接和有效的,“文件上传” 本身没有问题,有问题的是文件上传 后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。 一 客户端绕过 可以通过禁用js来...
  • 前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击。本文基于 java 写了一个示例。原理在上网的过程中,我们经常会将一些如图片、压缩包之类的文件上传到远端服务器进行保存。文件上传攻击指的是恶意攻击者利用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,852
精华内容 29,540
关键字:

文件上传攻击

友情链接: bp_filter.rar