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

文件上传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里面再改一下)

http://www.jsqmd.com/news/116079/

相关文章:

  • 基于Springboot箱包存储管理系统【附源码+文档】
  • 【小白笔记】图论(Graph Theory),“二维数组”或“矩阵”
  • 大模型开发必备:8个实用工具与框架详解
  • PCL配准——粗配准+ICP
  • 2026 年 CRM 软件入门指南:概念、类型、厂商与选型策略
  • 【Parallel-R1 代码实现】sft
  • 微观交通流仿真软件:AIMSUN_(21).微观仿真与其他交通软件的集成
  • esxi手动添加vmfs分区
  • 大模型——基于浏览器收藏夹的知识库
  • CSP2025邮寄
  • MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)
  • 格式化输入输出
  • 什么最伤孩子视力?不是手机和电视,则是这些方面家长要注意了
  • 2025年海南和田玉推荐商家排名TOP10(三亚+海口首选攻略) - charlieruizvin
  • RadeGS——depth_order_loss/ranking_loss
  • 为什么近视越来越低龄化?保护孩子眼睛,又该从何做起?
  • RocketMQ 存储高可用与故障恢复深度剖析
  • 我靠这2个免费降AI率的工具,顺利通过论文AIGC查重!
  • 实用指南:在Mac上通过Multipass虚拟机中的Ubuntu系统使用Graphviz工具
  • 2025年海南和田玉商家排名TOP10(三亚+海口首选攻略) - charlieruizvin
  • 断路器,空开,漏电开关
  • 云服务器救援模式/单用户模式,恢复ssh连接
  • mysql | limit 用法详解及注意事项
  • Docker 安装 Tomcat
  • 食品级螺杆泵选型经验
  • mysql | 环境变量问题及其配置方法详解
  • 免费降AI率的工具怎么选?认准这2个降低AI率的工具,避免白忙活
  • XML Schema 复合元素 - 仅含文本
  • 精选著名未解决数学问题概览
  • 安卓隐私管理小技巧:一款无root的应用隐藏工具分享