00截断上传绕过_关于上传中的00截断分析
关于上传中00截断的细节,很多朋友在渗透中都会发现一些这样的有趣现象,这个站点使用00截断上传的方法上传成功了,而换一个站点又失败了,这是什么原因呢?你看了这篇文章就会明白。
00截断原理
0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
00截断的限制条件1PHP<5.3.29,且GPC关闭
00截断的利用方法
上传文件后缀检测代码1
2
3
4
5
6
7
8
9
10
11
12
13$uploaded_name = $_FILES[ 'file' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); // 提取上传文件后缀
$target_name = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext; // 对上传文件进行重命名
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ))
{
move_uploaded_file($_FILES["file"]["tmp_name"],
$dir . $target_name); // 将临时文件移动到指定目录
$result = $dir . $target_name;
echo "Stored in: $result";
}
else{
echo "Invalid file";
}
误区
有很多朋友喜欢在文件名中加%00进行截断,笔者认为这种方式是不对的,为什么呢?比如攻击者构造文件名:admintony.php%00a.jpg,在提取后缀名的时候遇到%00则认为字符串结束了,那么他提取到的后缀名会是.php,.php后缀又不允许上传所以上传失败了(这里有必要提一句,有人可能会说在一些情况下,%00截断文件名可以成功,这种案例你试一下是不是任意文件上传,西普的00截断实验就是一个任意文件上传的上传点,既然是任意文件上传又何必用00截断绕过呢?)
正确用法
那么00截断应该在什么时候使用呢?笔者认为,数据包中必须含有上传后文件的目录情况才可以用,比如数据包中存在path: uploads/,那么攻击者可以通过修改path的值来构造paylod: uploads/aa.php%00
为什么修改path才可以,因为程序中检测的是文件的后缀名,如果后缀合法则拼接路径和文件名,那么攻击者修改了path以后的拼接结果为:uploads/aaa.php%00/2018051413370000.php,移动文件的时候会将文件保存为uploads/aaa.php,从而达到Getshell效果。
疑问:
为什么效果图中打印的结果和预期不符,是因为echo的特殊性质,官方解释的echo:
正是因为echo可以输出多个字符串,一个字符串截断后就变成了两个字符串,所以会输出后面的内容。
%00和%00(urldecode)
在网上常见用Burp将数据包中的%00进行urldecode的操作,那为什么要进行这一个操作?网上也常见直接放入%00就可以截断成功的案例,为什么呢?
%00(urldecode)
首先解释为什么要进行urldecode操作呢?其原因在于上传的表单中有一个enctype的属性,并且需要enctype="multipart/form-data" (不对表单中数据进行编码),path大多数都是存放在表单中的,因此需要在数据包中进行urldecode操作使%00变成字符串结束符号。
%00
那么为什么网上也有直接添加%00而不进行urldecode操作呢?因为path也可以存放在URL或者Cookie中,而在提交数据的时候,浏览器会对数据做一次urldecode的操作,而到服务端,会对数据进行一次urldecode的操作,因此如果path在非enctype=multipart/form-data的表单中或URL or Cookie中的时候,就可以直接写%00不需要进行URLdecode操作,让服务端对%00进行URL解码即可。
00截断上传绕过_关于上传中的00截断分析相关推荐
- 00截断上传绕过_【文件上传与解析】文件上传与解析漏洞总结v1.0
点击上方"公众号" 可以订阅哦! Hello,各位小伙伴晚上好~ 这里是依旧勤劳写公众号的小编~ 今天本公众号将推出一个新的模块,那就是漏洞知识点总结模块!!!(此处应有掌声~) ...
- 00截断上传绕过_小谈截断上传漏洞
0x00 前言 小菜今天在测试网站的时候,发现存在上传点,于是尝试各种姿势,环境为iis7.5,于是乎来一个解析漏洞,发现并不可以,最终百度乎,发现上传有很多种利用方法,所以小菜就去学习了一下截断上传 ...
- 00截断上传绕过_上传绕过总结
欢迎各位关注我的专栏,在以后的时间里,我将分享更多技术,在这里你能学到很多知识和姿势.自我介绍:高级安全研究员|擅长Python\PHP\JAVA审计;SONRT规则;etc.|陈小兵著<SQL ...
- java 文件上传漏洞_文件上传漏洞(绕过姿势)
文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识.俗话说,知己知彼方能百战不殆,因此 ...
- java 文件上传漏洞_文件上传漏洞(File Upload)
简介 File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制 ...
- react怎么存上一页_如何实现 React 中的状态自动保存?
什么是状态保存? 假设有下述场景: 移动端中,用户访问了一个列表页,上拉浏览列表页的过程中,随着滚动高度逐渐增加,数据也将采用触底分页加载的形式逐步增加,列表页浏览到某个位置,用户看到了感兴趣的项目, ...
- canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...
- c#如何通过ftp上传文件_定时上传文件到ftp,2步完成Windows系统定时上传文件到ftp...
FTP能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长:并且不时的必须执行一些冗长的登 ...
- iis mysql php 附件上传大小_修改上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法...
在服务器上架设好WordPress后,使用过程中发现,上传附件大小有2M的限制 话说服务器就是本机,可以直接把文件拖到附件存储文件夹下,然后在需要附件的地方引用链接 可是这种落后的方法终究不是办法,还 ...
最新文章
- python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题
- 手机数据抓包入门教程
- @Autowired注入了dao,为什么还要写getDao(){return userDao}这个方法?有什么作用?
- 编码问题(BOM头简单了解)
- css长图如何展示局部,css可以设置图片以最短边为依据展示在父级中吗?
- 如何用python画函数曲线_Python笔记:用matplotlib绘制函数曲线图
- python for
- c++ 随机字符串_关于Python的随机数模块,你必须要掌握!
- Visual Studio Code的下载与安装
- js 判断数组元素是否存在重复项
- 共享hp无线扫描到计算机,共享HP / HP扫描仪的OpenWrt路由器
- wmp.dll 自动注册失败
- Bus error 问题原因
- NLP比赛-小布助手对话短文本语义匹配
- app支付宝支付java后台_手机APP如何接入支付宝支付(java后台)
- VScode 无法保存,文件内容较新
- linux文件权限 705,Linux 文件权限 - osc_86eb7mly的个人空间 - OSCHINA - 中文开源技术交流社区...
- 编程计算图形的面积(圆形,正方形,长方形)
- 黑苹果gtx1050显卡驱动问题
- 用沐神的方法阅读PyTorch FX论文