news 2026/5/7 20:48:09

文件上传php知识和理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文件上传php知识和理解

为什么要学

真实黑客攻击:

找目标网站——上传恶意文件——猜网站的漏洞——上传木马文件——成功

然后可以走两个方式

1.蚁剑连接

测试连接——成功,这里的连接其实就是上传的一句话木马文件的POST里面你写的“密码”,蚁剑叫它密码,但是其实它不能算是密码,它其实是一个参数,也可以说是一个小门,因为你可以通过=的方式给它赋值,准确来说是给参数传指令,而蚁剑的连接测试就是看有没有连接到你的小门,连接成功,你就可以在蚁剑里面直接进行操作,蚁剑会把你的操作直接转化成php指令传到小门里面,这样就不需要你去写很多复杂的php指令,主打就是一个方便

2.url上面操作

url是否能操作,关键是是否能找到真实的木马文件的路径,也就是小门一定要找到,get和post传参其实目的和蚁剑一样的,都是找到精准的小门然后去给小门的参数传指令进而窃取数据,get是直接放到url上面,但是容易被拦截而且长度太短(网址的长度又能到哪里去),相比来说,post是使用工具(hackbar),找到url地址,然后把命令放在body里面,这也就理解了为什么body里面要写参数=xxxxxx,这样的做法显然是比get隐蔽的,而且显而易见在body里面写的指令长度限制绝对比get要小,能写的东西也更多

因此,get常常用来猜文件路径:比如说upload/labs/1.php这种通过文件路径说不定就能直接访问到核心信息(如果服务器没有限制的话),而post就常用来写恶意代码,执行一些复杂的操作

综上,如果说真实网站操作上传恶意文件是一个导数压轴题,那我们练习的靶场就是这类题的所有可解方法,当我们处于真实环境是,就可以一个一个方法去试(再看看服务器的反应,这里可以和靶场的反应对应)取猜出它的漏洞

而php特性的学习则是让我们能在url上直接练习一部分操作方法,同时知道php的一些可能会被利用的特性,对php的漏洞有更深刻的了解

文件上传的知识点

文件上传漏洞产生的原因:

对于上传文件的后缀名(扩展名)没有做较为严格的限制

对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查

权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件)

对于web server对于上传文件或者指定目录的行为没有做限制

其实说白了就是:

管了你的文件后缀但没考虑全让你给绕了

管了文件类型但是没考虑全让你给绕了

敏感文件目录没加密你找着就能看

不管你有没有找不找目录的行为

知识点:

1.js绕过

一般来讲,php语法变量都是带$的,而javascript语言的变量就类似于c语言,就是先声明变量类型再写变量,我们知道web的脚本语言一般就是js,Python,比较简单的看着复杂的就是js,就是绕过就是在检查里面的设置直接禁用

2.检查扩展名

黑名单和白名单(会拦截在黑名单和不在白名单的)

一般的方法:

大小写绕过

加个点

加个空格,

加$DATA

//黑名单策略 <li id="show_code"> <h3>代码</h3> <pre> <code class="line-numbers language-php">$is_upload = false; $msg = null; if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array('.asp','.aspx','.php','.jsp'); $file_name = trim($_FILES['upload_file']['name']); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, '.'); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //收尾去空 if(!in_array($file_ext, $deny_ext)) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext; if (move_uploaded_file($temp_file,$img_path)) { $is_upload = true; } else { $msg = '上传出错!'; } } else { $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!'; } } else { $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!'; } } </code> </pre> </li> //白名单策略 <li id="show_code"> <h3>代码</h3> <pre> <code class="line-numbers language-php">$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类型文件!"; } } </code> </pre> </li>

3.检查Content-Type

HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改

文件后缀Mime类型说明
.flvflv/flv-flash在线播放
.html或.htmtext/html超文本标记语言文本
.rtfapplication/rtfRTF文本
.gif 或.pngimage/gif(image/png)GIF图形/PNG图片
.jpeg或.jpgimage/jpegJPEG图形
.auaudio/basicau声音文件
.mid或.midiaudio/midi或audio/x-midiMIDI音乐文件
.ra或.ram或.rmaudio/x-pn-realaudioRealAudio音乐文件
.mpg或.mpeg或.mp3video/mpegMPEG文件
.avivideo/x-msvideoAVI文件
.gzapplication/x-gzipGZIP文件
.tarapplication/x-tarTAR文件
.exeapplication/octet-stream下载文件类型
.rmvbvideo/vnd.rn-realvideo在线播放
.txttext/plain普通文本
.mrpapplication/octet-streamMRP文件(国内普遍的手机)
.ipaapplication/iphone-package-archiveIPA文件(IPHONE)
.debapplication/x-debian-package-archiveDEB文件(IPHONE)
.apkapplication/vnd.android.package-archiveAPK文件(安卓系统)
.cabapplication/vnd.cab-com-archiveCAB文件(Windows Mobile)
.xapapplication/x-silverlight-appXAP文件(Windows Phone 7)
.sisapplication/vnd.symbian.install-archiveSIS文件(symbian平台)
.jarapplication/java-archiveJAR文件(JAVA平台手机通用格式)
.jadtext/vnd.sun.j2me.app-descriptorJAD文件(JAVA平台手机通用格式)
.sisxapplication/vnd.symbian.epoc/x-sisx-appSISX文件(symbian平台)

使用各种各样的工具(如burpsuite)强行篡改Header就可以,将Content-Type: application/php改为其他web程序允许的类型

4.文件头检查文件

利用的是每一个特定类型的文件都会有不太一样的开头或者标志位

一般是图片码用这个

文件格式名称及其对应的文件头签名(十六进制值)

文件格式文件头签名
TIFF (tif)49492A00
Windows Bitmap (bmp)424D
CAD (dwg)41433130
Adobe Photoshop (psd)38425053
JPEG (jpg)FFD8FF
PNG (png)89504E47
GIF (gif)47494638
XML (xml)3C3F786D6C
HTML (html)68746D6C3E
MS Word/Excel (xls or doc)D0CF11E0
MS Access (mdb)5374616E64617264204A
ZIP Archive (zip)504B0304
RAR Archive (rar)52617221
Wave (wav)57415645
AVI (avi)41564920
Adobe Acrobat (pdf)255044462D312E

绕过方法

给上传脚本加上相应的幻数头字节就可以,php引擎会将 <?之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行

5.00截断

就是服务器读数据包的时候,读到%00就会自动结束,1.php%00.jpg就会被读成1.php(get直接改,POST无法自己解码,再hex里面再改一下)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 12:12:56

微观交通流仿真软件:AIMSUN_(15).用户界面与操作

用户界面与操作 1. AIMSUN用户界面概述 AIMSUN 是一款强大的微观交通流仿真软件&#xff0c;用户界面设计直观且功能丰富&#xff0c;旨在帮助用户高效地进行交通网络建模、仿真和分析。本节将详细介绍 AIMSUN 用户界面的主要组成部分和基本操作方法&#xff0c;帮助用户快速…

作者头像 李华
网站建设 2026/5/2 20:26:12

微观交通流仿真软件:Paramics_(1).Paramics软件基础与安装

Paramics软件基础与安装 1. Paramics软件简介 Paramics是一款强大的微观交通流仿真软件&#xff0c;广泛应用于交通规划、道路设计、交通管理和研究等领域。它通过模拟交通系统中的车辆、驾驶员、交通设施等微观元素的行为&#xff0c;提供详细的交通数据和分析结果。Paramics不…

作者头像 李华
网站建设 2026/5/1 17:24:03

mac m3上使用vscode + platformio开发esp32

前言 之前使用过arduino ide去开发esp32。但是感觉有两个问题&#xff0c;一是arduino上面那个esp32的插件不太好下载&#xff0c;二是本人习惯使用vscode的了&#xff0c;想用vscode去开发。所以这次使用vscode platformio arduino库去做开发。 环境介绍 电脑&#xff1a…

作者头像 李华
网站建设 2026/5/1 17:26:20

Vue.js前端框架技术:从入门到精通的深度指南(含实战秘籍)

在前端开发的技术浪潮中&#xff0c;框架的选型直接决定项目的研发效率、性能上限与可维护性壁垒。Vue.js以“渐进式框架”为核心理念&#xff0c;凭借简洁优雅的API设计、灵活的集成能力、卓越的性能表现以及极低的上手门槛&#xff0c;成为全球开发者与企业的首选前端技术方案…

作者头像 李华
网站建设 2026/5/1 11:22:44

Chrome Lighthouse优化

Lighthouse 是 Google 推出的前端性能与质量评估工具&#xff0c;核心优化场景围绕 性能&#xff08;Performance&#xff09;、可访问性&#xff08;Accessibility&#xff09;、最佳实践&#xff08;Best Practices&#xff09;、SEO、PWA 五大维度&#xff0c;其中 性能维度…

作者头像 李华
网站建设 2026/5/1 17:00:20

【小白笔记】DFS(岛屿数量,单词搜索(DFS+回溯))

这是一个非常核心的问题。&#xff1a;DFS&#xff08;深度优先搜索&#xff09;首先是一种思想&#xff0c;然后才是具体题目中的代码实现。 理解 DFS 的关键在于&#xff1a;“不撞南墙不回头”。1. DFS 的本质思想 DFS 的核心逻辑是&#xff1a;从一个起点出发&#xff0c;选…

作者头像 李华