dvwa之File upload

文章介绍了PHP中的一句话木马概念,如何利用eval函数执行任意代码,并在文件上传漏洞场景下进行操作。在低级难度中,可以直接上传木马文件;中级增加了前端文件类型检查,可以通过修改后缀绕过;高级难度则检查图片尺寸,需伪造图片头信息。通过这些方法,攻击者可以获取webshell并控制服务器。

理论知识

我们首先了解一下一句话木马,一句话木马的代码一般为:

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

eval()函数表示括号里的内容把他当做PHP语言执行,@的作用是后面的代码及时出错也不报错,这样可以不暴露我们的上传的参数(也就是upload),完后$_POST[‘upload’],upload在这里是一个全局变量,我们后期要执行的代码都要通过赋值给upload来执行。我们后期如果要用菜刀进行连接时,也需要把我们的全局变量(也就是upload)告诉菜刀。
一句话木马可以拿到网站的webshell(也就是后门),得到此权限我们就相当于拿到了网站服务器的管理权限。

文件上传漏洞就是系统可能没有对上传的文件进行过滤,导致上传的文件是木马文件或者其他恶意文件,所以靶场此关我们只要成功上传我们的一句话木马文件就算通关成功。

低级

先查看源码在这里插入图片描述
$target_path = DVWA_WEB_PAGE_TO_ROOT . “hackable/uploads/”
DVWA_WEB_PAGE_TO_ROOT是网站的根目录,后面是进入根目录后要打开的文件路径,这一句就是定位文件上传目录的地方。

$target_path .= basename( $_FILES[ ‘uploaded’ ][ ‘name’ ] )
basename()函数返回路径中的文件名部分。

后面的代码意思就是将我们上传的文件放到他指定的文件夹

在低级难度中文件随便上传,先制作一个一句话木马文件

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

在这里插入图片描述
发现可直接上传成功,连接菜刀还有个条件就是我们必须知道我们的一句话木马文件在服务器具体哪个文件夹下,必须是绝对路径。

我们知道此网站的IP(也就是我们自己的电脑),而文件上传路径也在回显中提示了(红色的字),也就是说我们的木马文件路径是:127.0.0.1//hackable/uploads/test (2).txt

OK,万事俱备,连接菜刀(连接密码就是我们一句话木马代码中的POST后面递交的参数,也就是upload),连接过程就不具体展示了。

中级

查看源码在这里插入图片描述

// 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 ) ) {
多了这几行代码,前三行是获取上传文件的名字,类型,大小信息,后面是判断上传的文件是否是一个小于10000的图片文件(也就是后缀是否是jpeg)。

这里我们可以先将我们的木马文件后缀改为jpeg,上传时,在通过BP抓包将它的后缀改为PHP(我理解的是他这个过滤属于前端过滤,所以通过前端这一关后面再改回PHP就毫无影响了)在这里插入图片描述

高级

老规矩先看源码在这里插入图片描述
strtolower(string) // 函数把字符串转换为小写。 getimagesize() // 函数用于获取图像大小及相关信息
getimagesize(string filename)函数,它会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。所以我们上传的文件必须为图片类型。

针对这种防护,在文件头部加上jpg格式的GIF89,如图:在这里插入图片描述在这里插入图片描述

后期还是要抓包,更改后缀才能连接菜刀

### DVWA File Upload 漏洞利用方法及练习指南 DVWA(Damn Vulnerable Web Application)是一款用于安全测试和漏洞练习的靶场环境,其中的 **File Upload(文件上传)漏洞** 模块模拟了开发人员在处理用户上传文件时可能存在的不安全行为。通过该模块,学习者可以掌握文件上传漏洞的基本原理、检测方法以及攻击利用方式。 #### 漏洞原理 文件上传漏洞通常出现在 Web 应用程序允许用户上传文件的功能中。如果服务器未对上传的文件类型、内容或解析方式进行有效控制,攻击者可以上传恶意脚本(如 PHP、ASP、JSP 等),并通过访问该文件在服务器上执行任意命令。文件上传漏洞的关键在于服务器如何解析上传的文件,若服务器将上传的文件当作可执行脚本处理,则可能造成严重后果 [^3]。 #### DVWA File Upload 模块设置 在 DVWA 中,File Upload 模块有不同等级的安全设置(Low、Medium、High、Impossible),分别代表不同强度的安全防护。在练习中建议从 **Low 级别** 开始尝试,逐步提升难度。 #### 利用方法 ##### 1. **Low 级别** 在 Low 级别中,服务器几乎不对上传文件进行任何检查,因此可以直接上传可执行脚本。 - 准备一个简单的 PHP 一句话木马文件,例如 `shell.php`: ```php <?php eval($_GET['cmd']); ?> ``` - 将该文件上传到服务器。 - 通过访问该文件并传入参数执行命令,例如: ``` http://127.0.0.1/dvwa/hackable/uploads/shell.php?cmd=whoami ``` ##### 2. **Medium 级别** 服务器开始对上传文件进行一定程度的检查,例如限制文件类型为图片格式(如 `.jpg`)。 - 绕过方式:将 PHP 代码嵌入图片文件中,构造一个合法的图片文件并在末尾追加 PHP 代码。 - 使用工具如 `exiftool` 修改文件名后缀为 `.php.jpg`,欺骗服务器接受。 - 利用 Burp Suite 修改上传请求中的文件名或 MIME 类型。 ##### 3. **High 级别** 服务器对上传文件进行更严格的检查,例如白名单机制、文件重命名等。 - 绕过方式:利用服务器重命名机制的漏洞,如上传 `.php` 文件时,服务器可能仅重命名主文件名但保留后缀。 - 使用 `.htaccess` 文件上传配合解析漏洞(如 Apache 的解析特性),使 `.jpg` 文件被当作 PHP 执行。 ##### 4. **Impossible 级别** 服务器采用严格的安全措施,如使用白名单验证、文件重命名、MIME 类型检查等,几乎无法被绕过。 - 该级别主要用于学习如何正确防御文件上传漏洞。 #### 练习建议 - **使用工具辅助**:Burp Suite 可用于拦截上传请求并修改文件名、MIME 类型;使用 `nc` 或 `curl` 测试上传后的脚本执行。 - **尝试不同绕过方式**:包括大小写绕过、空格绕过、双后缀绕过、路径绕过等。 - **结合其他漏洞**:如配合文件包含漏洞(File Inclusion)实现远程文件执行。 #### 安全建议 - 严格限制上传文件类型,使用白名单机制。 - 对上传文件进行重命名,避免直接使用用户提供的文件名。 - 将上传目录设置为不可执行脚本。 - 对上传文件内容进行扫描和验证(如使用图像处理库验证图片内容)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值