700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【漏洞靶场】文件上传只验证Content-type绕过--upload-labs

【漏洞靶场】文件上传只验证Content-type绕过--upload-labs

时间:2019-12-12 10:56:25

相关推荐

【漏洞靶场】文件上传只验证Content-type绕过--upload-labs

一、漏洞描述

Content-Type是http头中一个字段,在响应中Content-Type标头告诉客户端实际返回的内容的内容类型。在请求中客户端告诉服务器实际发送的数据类型,如果服务器对改字段的内容做了限制可以通过burp改包绕过

二、漏洞发现

在upload-labs第二关中就是采用了限制content-type 的类型做文件上传的限制,先在本地写php脚本若上传成功,且知道上传后文件在网站保存的路径,可通过网页访问获得服务器配置信息,命名为z.php

上传后发现返回文件类型不正确,请重新上传,猜测是服务器端验证了content-type字段

对于content-type常见字段有

text/html :HTML格式 text/plain :纯文本格式 text/xml :XML格式

image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png :png图片格式

application/xml : XML数据格式 application/json : JSON数据格式 application/pdf : pdf格式

application/msword : Word文档格式 application/octet-stream : 二进制流数据(如文件下载)

application/x-www-form-urlencoded:浏览器的原生form表单

我们通过抓包得知application/octet-stream意思是文件以二进制方式提交

可以猜测服务器对只允许“image/gif :gif图片格式 , image/jpeg :jpg图片格式 , image/png :png图片格式”这三种方式提交,查看源码验证猜想。

$_FILES['myFile']['name'] 客户端文件的原名称

$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持(就是content-type字段带的类型)

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认

move_uploaded_file(file,newloc)//file是要传入的文件,newloc是规定文件的新位置

由源码可知:服务器端拿上我们的http包后,先是取出MIME类型比对是否为“images/jpeg”或者“image/png”或者“image/gif”。如果是就将文件传入对应路径并且存入时名字就是我上传时候的文件名字

三、漏洞利用

抓包后改变content-type的值为服务器验证的正确类型,三种类型都可以

上传成功,并且通过文件在服务器的位置访问,获取服务器配置,也可上传一句话木马,通过蚁剑,菜刀等后门工具链接获取webshell。一般网站在这方面都会将文件名存入服务器的时候把文件名改为随机数,防止攻击者知道文件名利用访问。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。