文件上传漏洞基础/content-type绕过/黑名单绕过/
目录
一、content-type绕过
contenent-type
有些上传模块,会对http的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务器是通过ent-type判断类型,content-type在客户端可被修改,则此文件上传也有被绕过的风险!
源代码分析
upload-labs pass-02
$is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) { $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name']; $is_upload = true; } } else { $msg = '文件类型不正确,请重新上传!'; } } else { $msg = $UPLOAD_ADDR.'文件夹不存在,请手工创建!'; }}
关键代码
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
在后端检测了上传文件的content-type是不是图片格式,也就是说,我们前面用的删掉前端函数,直接上传方式是用不了的,我们需要发送数据包中的content-type为image/png
绕过方式
①修改脚本后缀,上传,抓包中修改后缀(因为上传的就是图片,所以content-type就是image/png)
②直接上传脚本,抓包中直接修改conent-type
尝试绕过
还是先清空前面上传的文件
尝试上传test.php
①修改后缀上传
可以看到content-type就是image/png,这时候我们直接修改后缀即可
上传成功
②直接上传脚本修改content-type
修改content-type 为 image/png
上传成功
二、黑名单绕过
黑名单
上传模块,有时候会加入黑名单限制,在上传文件的时候获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,将禁止文件上传
代码分析
upload-labs pass03
$is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { $deny_ext = array('.asp','.aspx','.php','.jsp'); $file_name = trim($_FILES['upload_file']['name']); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, '.'); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //收尾去空 if(!in_array($file_ext, $deny_ext)) { if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR. '/' . $_FILES['upload_file']['name'])) { $img_path = $UPLOAD_ADDR .'/'. $_FILES['upload_file']['name']; $is_upload = true; } } else { $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!'; } } else { $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!'; }}
分析一下代码,其中$deny_ext是一个数组,里面存放着需要被检测的后缀名,即黑名单
$file_ext进行处理提取后缀名并转为小写
in_array($file_ext, $deny_ext)
判断$file_ext是否在$deny_ext中,即后缀名是否在黑名单中
后缀名不在黑名单中时,才进行上传操作
绕过方法
尝试其他的后缀名,如该题屏蔽了asp、aspx、php、jsp,我们可以使用如asa、cer、ashx、phtml文件,但要确保服务器可以执行该类型文件
这里屏蔽的asp 那asa cer cdx 大概率是可以使用的,如果网站允许.net执行ashx可以代替aspx
在不同的中间件中有特殊的情况,有点apache版本会默认开启AddType application/x-httpd-php .php .php3 .phtml,将后缀名为phtml、php3的文件解析成php文件
尝试绕过
我们尝试将脚本文件改为phtml后缀上传
上传成功访问一下
这啥都没有啊
查看一下配置文件
可以看到这里没有默认开启,而是被注释掉了,导致我们上传的文件无法被执行
我查阅了一下其他大佬的通关秘籍,发现这里都是直接把这个注释打开,那咱也打开
重启phpstudy再次访问
可以看到成功访问到了!
来源地址:https://blog.csdn.net/qq_40345591/article/details/127449928
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341