DVWA---文件上传
File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的。
网页能够上传文件的条件
表单提交方式:post (get方式提交有大小限制,post没有)
表单的enctype属性:必须设置为multipart/form-data
表单必须有文件上传项:file
DVWA文件上传
服务端代码 LOW
代码分析:
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
设置上传文件的路径,DVWA_WEB_PAGE_TO_ROOT早已定义为某个路径(网站根目录),用.连接后面的字符串。
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
获取上传的文件名。basename(path,suffix)函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
move_uploaded_file(file,newloc)函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。
可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
漏洞利用
文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。不幸的是,这里三个条件全都满足。
上传一句话木马
打开菜刀
然后菜刀就会通过向服务器发送包含apple参数的post请求,在服务器上执行任意命令,获取webshell权限。可以下载、修改服务器的所有文件。
服务端代码 Medium
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) )
对上传文件的类型和大小做出了限制,只能上传图片的JPEG和PNG格式,问价大小为100000B 大约为97.65KB。
漏洞利用
打开burpsuite 抓包
将Content-Type: application/octet-stream改掉。
服务器代码 High
strrpos(string,find,start)
函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。
getimagesize(string filename)
函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”.jpg”、”.jpeg” 、”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。
漏洞利用
采用%00截断的方法可以轻松绕过文件名的检查,但是需要将上传文件的文件头伪装成图片,由于实验环境的php版本原因,这里只演示如何借助High级别的文件包含漏洞来完成攻击。
首先利用copy将一句话木马文件hack2.php与图片文件1.jpg合并
或者使用C32直接加在后面
阅读更多
- Dvwa之文件上传漏洞
- DVWA之PHP文件上传漏洞(File Upload)
- html5 input设置允许的文件类型上传
- 用30行代码开发一个上传、下载文件的接口
- 文件问题折腾:利用Node.js+express框实现图片上传
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- 上传word文件并预览
- 异步请求之同域名异步文件上传iframe标签
- Java String MVC框架使用uploadify上传文件
- AJAX实现基于WEB的文件上传的进度控制
- Winform上传下载文件代码
- 关于文件上传
- ext3.4 实现多文件上传UploadDialog
- 通过 http 协议上传文件(rfc1867协议概述,jsp 应用举例,客户端发送内容构造)
- java 文件上传与下载
- Xshell实现Windows上传文件到Linux主机
- Mp3文件上传控件发布-Mp3Uploader
- django 一次性上传多个文件, 批量上传
- 【Java】JavaWeb文件上传和下载
- ASIHTTPRequest系列(三):文件上传