当前位置: 首页 > news >正文

文件上传之%00截断(00截断)以及pikachu靶场

pikachu的文件上传和upload-lab的文件上传

目录

mime type类型

getimagesize

第12关%00截断,

第13关0x00截断


差不多了,今天先学文件上传白名单,在网上看了资料,差不多看懂了,但是还有几个地方需要实验一下,有请我们pikachu靶场登场,ok呀做题,我爱做题,我爱说实话

英文不会。先翻译一下,搞错了,pikachu好像没有文件上传白名单

没事的,把这个靶场也打一遍,

mime type类型

 先看mime type教程MIME 类型 | 菜鸟教程 (runoob.com),这个也是非常简单,意思是只对content-type的内容做了简单的验证,验证是否为图片类型,应该是后端验证吧,毕竟传给服务器了,ok呀这个好像前端验证都没有做,直接可以选择php文件

好像还要把application改成image,content-type: image/png

蚁剑就不连了,路径拼接就好了vul/unsafeupload/uploads/test.php,你妹的,被杀毒软件杀了,我就说半天找不到文件了

pikachu还有一个文件上传的题目,是这个

getimagesize

这个更简单了,只需要在文件头加上个GIF89a的图片格式就好了

ok呀,话不多说直接上uploads靶场第12关好吧

第12关%00截断,

主要是用于get类型(post类型由于不会url编码,所以是0x00截断,0x表示16进制)

前置知识

利用条件(参考文章WEB-00截断与%00截断 | wh1te (lddp.github.io))

利用条件
00截断的限制条件是PHP<5.3.29,且GPC关闭。%00截断
url中的%00(只要是这种%xx)的形式,webserver会把它当作十六进制处理,然后把16进制的hex自动翻译成ascii码值“NULL”,实现了截断burpsuite中16进制编辑器将空格20改成了00。本质上来说,都是利用0x00是字符串的结束标识符,进行截断处理。

ok呀也是不太明白,但是我好像知道单引号在url会自动转化为%27,

所以%27就是assci值中的单引号,ok呀,同理那%00就是assci值中的null字符

就不继续深入思考了,明白了这个,就开始做题

ok啊,上传了个文件,发现他自动把我文件名改了,也只能上传jpeg、png格式的

把Content-Type: image/png改成这样也不行,发现是 白名单上传

继续看代码,在网上找的文章也是没看太懂啊

 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

网上说这是get就是%00,是post就是0x00,

12关源代码$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上传出错!';}} else{$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

但是burp又是post传过去的,怎么又是get呢,ok不想分析,在去网上找一下,没找到,就时看

 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;是get还是post,

但是我在实战中怎么看他是post传参还是get传参

好了,直接在要拼接的地方加上我们的test.php%00,后面随机产生的名字就被忽略了

第13关0x00截断

ok呀,好像发现了,这一关和上一关不一样,这一关好像是在代码里面,上一关在url头中,

按照这么理解的话,在url头中是get传参,代码里是post传参吗,

先在php里加上个a,然后再hex找到a,把61改成00,记着要把test.php改成test.png,因为后端会检测图片的格式,但是他又会拼接内容,如果他不拼接路径,是不是就没有这个漏洞了

我把a的61改成00了,这里是16进制,00也就是0x00(0x就是16进制的意思)

然后后面的要拼接的路径都被0x00忽略了,最后就是test666.php了

上传成功

http://www.lryc.cn/news/453671.html

相关文章:

  • Chainlit集成LlamaIndex并使用通义千问实现和数据库交互的网页对话应用(text2sql)
  • 计组复习笔记
  • 62. 环境贴图2
  • MATLAB中数据导入与导出的全面指南
  • Jenkins从入门到精通,构建高效自动化流程
  • 【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2
  • 如何在电脑上浏览手机界面
  • 国产RISC-V案例分享,基于全志T113-i异构多核平台!
  • Day(16)--File
  • Axios入门使用
  • 大数据实时数仓Hologres(四):基于Flink+Hologres搭建实时数仓
  • 关于HTML 案例_个人简历展示02
  • Windows 11 24H2 v26100.1742 官方简体中文版
  • 【AIGC半月报】AIGC大模型启元:2024.10(上)
  • Codeforces Beta Round 14 (Div. 2) E. Camels (DP)
  • CSID-GAN:基于生成对抗网络的定制风格室内平面设计框架论文阅读
  • 02SQLite
  • 学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
  • JDBC编程
  • Python : 类变量、静态方法、类方法
  • 大厂笔试现已经禁用本地IDE怎么看
  • 【PostgreSQL】入门篇——如何创建、删除和管理数据库及其用户,包括权限设置和角色管理
  • 网络安全:保护数字时代的堡垒
  • 【rCore OS 开源操作系统】Rust 字符串(可变字符串String与字符串切片str)
  • 远程过程调用RPC知识科普
  • Java - LeetCode面试经典150题 - 区间 (三)
  • NVIDIA网卡系列之ConnectX-6 DX规格信息(200G-PCIe 4.0x16-8PF1000VF-2019年发布)
  • 【案例】平面云
  • 测试用例的进阶二
  • zotero WebDAV同步忘记密码