【文件上传】00截断详解

一、00截断的原理

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。

二、php环境00截断的条件
  • php版本小于5.3.29
  • magic_quotes_gpc = Off
三、php环境00截断详解

1、文件上传后端源码:

<?php
var_dump($_FILES['upload_file']); //打印接收的文件变量数组
echo "<br />";
$file_ext = substr($_FILES['upload_file']['name'],strrops($_FILES['upload_file']['name'],".")+1);	//截取文件名后缀
var_dump($file_ext);  
echo "<br />";
$tmp_file = $FILES['upload_file']['tmp_name']	//文件临时存储位置
vardump($tmp_file);
echo "<br />";
$img_path = $_POST['save_path']."/".rand(100,999).date("YmdHis").".".$file_ext; //将上传目录、随机数、时间戳和扩展名拼接为文件保存路径
var_dump($img_path);
echo "<br />";
move_upload_file($tmp_file,$img_path);	//将临时文件移动到文件保存路径上
?>
<form enctype="multipart/form-data" method="post">
	<p>请选择要上传的图片:</p>
	<input type="hidden" name="save_path" value="upload" />
	<input class="input_file" type="file" name="upload_file" />
	<input class="button" type="submit" name="submit" value="上传" />
</form>

2、客户端页面:
在这里插入图片描述
3、上传info.png文件burp抓包。可以看到,当前端提交请求时,系统自动产生一个filename=“info.png"。后端则由$_FILES[‘upload_file’][‘name’]变量进行接收。
在这里插入图片描述

4、错误截断方式。改包filename="info.png\0.jpg"重放,发现$_FILES[‘upload_file’][‘name’]变量在接收filename的值时,自动将\0后的字符串进行的截断,此处取后缀仍然为.php,因此不能通过修改filename的值来进行00截断
在这里插入图片描述

5、正确截断姿势。改包:在upload后加\0/1.php,重放后返回路径$img_path值为
string(34) “upload/1.php/6920200330192442.png”,其中包含\0,因此可以总结出,除了$_FILES[‘upload_file’][‘name’]这种变量,其他变量都会将字符串原封不动进行拼接,形成字符串变量中存在\0字符,一旦这个字符串被操作系统用作文件的命名,就会产生00截断的情况
在这里插入图片描述
此时后端upload文件夹,生成1.php文件
在这里插入图片描述

  • 00截断时,实际上传的变量值
$destination = uploading/1.php\0time().random(100,999)".".$ext
  • get方法中,当url中加入%00时,通过urlencode,%00得到字符\0。

6、总结此类截断的几个关键参数

上传目录时间戳+随机数扩展名
upload/time().random(1000,9999)ext
上传目录可控修改文件名防止重复命名扩展名符合白名单
  • 19
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ctfhub 文件上传 - 00截断是一种常见的安全漏洞,攻击者可以通过截断文件名或者文件内容来绕过文件上传的限制,从而上传恶意文件或者执行任意代码。这种漏洞需要开发人员在编写文件上传功能时注意对文件名和内容进行严格的校验和过滤,以防止攻击者利用截断漏洞进行攻击。同时,用户也应该注意不要上传可疑的文件或者访问不可信的网站,以保护自己的计算机安全。 ### 回答2: 文件上传漏洞是目前很多Web应用存在的一种常见漏洞,该漏洞的攻击者可以利用该漏洞从Web应用程序中上传恶意文件,绕过访问控制机制,并在受害者服务器上执行任意命令。 在CTFHub文件上传-00截断中,漏洞原理是:在上传文件时,上传文件的后缀名是通过从客户端请求中获取的,如果在获取后缀名的过程中,我们可以通过攻击来修改请求,就可以上传任意类型的文件,甚至是可执行文件,从而达到绕过文件类型的限制。 具体细节如下: 1. 开始上传文件,上传的文件后缀名为.php 2. 修改上传请求中的文件后缀名为.gif,并截断请求,使之只保留文件的前8个字节。 3. 上传的文件类型变为gif,并成功上传。 4. 由于文件类型被篡改,服务器未检测到有可执行文件被上传,因此上传成功。 5. 资产管理窗口中能够看到已上传的文件,并能够通过访问路径访问到上传的文件,例如,可以直接访问上传的可执行文件,从而达到绕过文件类型限制,执行任意命令的目的。 由此可见,文件上传漏洞是一种危害性较高的漏洞,因此开发人员在开发Web应用程序时,一定要认真检查,确保不会出现类似的漏洞现象。同时,在测试人员测试网站时,也应该重点检查文件上传功能,以确保网站的安全性和可靠性。 ### 回答3: ctfhub 文件上传 - 00截断是一种常见的文件上传漏洞攻击,攻击者利用该漏洞可以上传恶意文件并将其存储到服务器中,从而导致服务器被攻击。 文件上传 - 00截断漏洞主要是利用了一些文件上传的不足之处,攻击者可以通过伪造请求包来修改原始文件名,从而实现文件截断的目的,也就是只保留了原始文件名的部分内容而去掉了后面的内容。 当攻击者上传文件时,如果原始文件名过长,则服务器会自动截断文件名,一旦攻击者将文件名截断并发送一个伪造的请求包到服务器上,则服务器会根据该请求包上传一个被截断的文件,从而导致服务器受到攻击。 例如,攻击者可以将文件名设置为“hack.php\x00.jpg”,当该文件上传到服务器上时,服务器会将文件名截断为“hack.php”,从而隐藏了文件的真实后缀名,诱骗用户下载并执行该文件。 为了避免被此类文件上传漏洞攻击,开发人员应该加强字符串截断的限制,防止非法输入,并进行文件类型检测,只允许上传指定的文件类型,同时加密重要文件和数据,保护系统安全。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值