渗透学习

文件包含漏洞


文章目录

  • 渗透学习
  • 前言
    • *本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。*
  • 一、文件包含漏洞
  • 二、实验步骤
    • 1.文件包含特点
    • 2.本地包含配合文件上传包含图片马
    • 3.包含Apache日志文件
    • 4.PHP封装伪协议之php流input
    • 5.PHP封装伪协议之php流filter
    • 6.PHP封装伪协议之其他
  • 总结

前言

本系列用于记录本人渗透学习的过程,主要内容围绕Owasp TOP 10展开。

文件包含漏洞将用实验案例的方式介绍文件包含漏洞的成因特点,利用方法。在了解文件包含漏洞的危害的同时学习各类文件的包含、本地包含配合文件上传包含图片马和php封装伪协议。

本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。

一、文件包含漏洞

文件包含指把可重复使用的函数写入到单个文件,在使用该函数时,直接调用此文件,无需再次编写函数。这一调用文件的过程被称为包含。

文件包含漏洞原理:在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意代码的注入。

文件包含函数:
include():找不到被包含文件时会产生警告
include_once():与include()类似,代码已经被包含则不会再次包含
require():找不到被包含的文件时会产生致命错误
require_once():与require()类似,代码已经被包含则不会再次包含

利用条件:
1.include等函数通过动态执行变量的方式引入需要包含的文件
2.用户能控制该动态变量

在包含php文件和未知后缀名的文件(xxx)时,由于文件内容符合PHP语法规则,代码都可以执行,除此之外,jpg文件、rar文件、txt文件、doc文件等,只要文件内容符合PHP语法规则,代码都可以执行。

文件包含漏洞可以分为LFI(本地文件包含)和RFI(远程文件包含)两种。区分二者最简单的办法就是通过查看php.ini中是否开启了allow_url_include。如果开启就有可能包含远程文件。

二、实验步骤

1.文件包含特点

访问include.php,文件包含环境

在浏览器中访问http://ip/include/include.php?page=01/1.jpg

在浏览器中访问http://ip/include/include.php?page=01/1.rar

在浏览器中访问http://ip/include/include.php?page=01/phpinfo.xxx

因此,只要文件内容符合PHP语法规则,代码都可以执行。

另外,也可以利用此漏洞读取敏感文件等

2.本地包含配合文件上传包含图片马

通过文件上传漏洞上传图片马(点击此补习文件上传知识),图片马不能解析,因此利用PHP文件包含漏洞解析图片马。如果网站同时存在文件包含漏洞,利用文件包含无视后缀名,只要被包含的文件内容符合PHP语法规范,任何扩展名都可以被PHP解析的特点来解析上传的图片马。

先新建要上传的1.php文件

再从网上下载一张图片在CMD制作图片马

上传图片马文件

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

访问http://ip/include/include.php?page=…/up/upload/info.jpg(…返回上一级目录),包含图片马,图片马成功解析

掌握文件上传+文件包含的组合漏洞,在绕过上传的检测时可以制作图片马上传,图片马上传成功不能直接解析,可以利用文件包含的特点进行解析图片马。

3.包含Apache日志文件

找到Apache路径,利用包含漏洞包含日志文件获取Webshell。
Apache两个日志文件:access.log、error.log
很多时候,web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log

访问

?page=<?php phpinfo();?>

在access.log里出现记录

此时访问access.log

不会触发php脚本,因为<被编码无法生成。

解决方案:去BurpSuite里修改,在传入access.log里之前修改信息。

包含日志文件位置:
1.Apache+Linux日志默认路径
/etc/httpd/logs/access_log或/var/log/httpd/access log
2.Apache+Windows日志默认路径
XAMPP套件:xampp\apache\logs/access.log
phpStudy套件:phpStudy\Apache\logs/access/log
3.IIS6默认日志文件位置
C:WIDOWS\system32\Logfiles
4.IIS7默认日志文件位置
%SystemDrive%\inetpub\logs\LogFiles
5.Nginx日志默认位置
用户安装目录的logs目录下,也可以通过其配置文件nginx.conf,获取到日志的存在路径
6.SSH日志文件
ssh‘<?php phpinfo();?>'IP
7.session文件
在phpinfo页面的session.save_path参数处获取session文件路径
或者猜测常用路径:
/var/lib/php/sess_[PHPSESSID]
/tmp/sess_[PHPSESSID]

包含方法:
访问漏洞页面,在参数中构造payload:

session.php?a=<?php phpinfo();?>

然后通过BurpSuite抓包获取PHPSESSID,其文件名就是sess_[PHPSESSID],利用文件包含漏洞跨目录包含session文件。

4.PHP封装伪协议之php流input

通过文件包含漏洞,利用PHP封装伪协议,发送POST数据进行命令执行。

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

利用php流input中流的概念,将原来的文件流重定向到了用户可控的输入流中执行命令。(对allow_url_include:on,allow_url_fopen不做要求)

实验步骤:
访问http://ip/include/include.php?page=php://input,post data"<?php phpinfo();?>“,并发送数据执行。

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

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

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

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

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

5.PHP封装伪协议之php流filter

读取文件(对allow_url_include和allow_url_fopen都不做要求)

?page=php://filter/read=convert.base64-encode/resource=index.php

(index.php即想要读的文件)通过指定末尾的文件,可以读取base64加密后的文件源码,之后再base64解码一下就行,虽然不能直接获取到shell等,但能读取敏感文件危害也很大。

解码得:

其他姿势:

?page=php://filter/convert.base64-encode/resource=index.php

效果相同,少了read关键词,可以绕过一些waf

6.PHP封装伪协议之其他

对伪协议的用法总结如下:

zip://

?page=zip://C:/Users/40454/Desktop/text.jpg%23text.txt

先将要执行的PHP代码写好文件名为text.txt,将text.txt进行ZIP压缩,压缩文件名为text.zip,如果可以上传zip文件便直接上传,若不能便将text.zip重命名为text.jpg再上传,获取上传文件所在位置之后执行上述payload。

使用zip协议需要指定绝对路径,使用相对路径会包含失败;
同时将#编码为%23

phar://
利用姿势:
假如有个文件test.txt,打包成zip压缩包,指定绝对路径(或者使用相对路径)

?page=phar://C:/Users/40454/Desktop/text.zip%23text.txt

?page=phar://C:/Users/40454/Desktop/text.jpg%23text.txt

data://
命令执行(php版本大于等于5.2,allow_url_include和allow_url_fopen都为on的状态)

?page=data://text/palin,<?php phpinfo();?>

?page=data://text/palin;base64,PD9waHAgcGhwaW5mbygpPz4=


总结

以上结合实验案例介绍了文件包含漏洞的特点、文件包含漏洞和文件上传漏洞的组合使用使用图片马、包含日志文件等漏洞和php封装伪协议。包含了大部分常见的文件包含漏洞。总而言之,文件包含漏洞的一大特性是只要符合php的语法规则,代码就可以执行。

文件包含漏洞特点和php封装伪协议相关推荐

  1. 【web安全】——文件包含漏洞

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:一切为了她​​​​​​​ 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构 每日emo:可后来,除了梦以外的地方,我再 ...

  2. php伪协议语法,php文件包含漏洞(input与filter)

    php://input php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置.php:/ ...

  3. 文件包含漏洞分析和防御

    目录 简介 形成原因 文件包含函数 判断类型 文件包含 本地文件包含(LFI) 防御 本地包含技巧 php://协议的使用 data:协议 日志包含: session 远程文件包含(RFI) 文件读取 ...

  4. 南邮杯CTF 文件包含漏洞实战

    今天继续给大家介绍CTF刷题,本文主要内容是南邮杯CTF 文件包含漏洞实战. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未 ...

  5. 90.网络安全渗透测试—[常规漏洞挖掘与利用篇6]—[文件包含-PHP封装伪协议详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含-PHP封装伪协议简介 1.php内置封装协议 2.data://命令执行-伪协议 3.zip:// ...

  6. 文件包含漏洞及PHP伪协议

    文件包含漏洞及PHP伪协议 文件包含漏洞 1. 原理 攻击利用的原理 攻击成功的条件 2. 分类 本地文件包含 LFI的利用 远程文件包含 3. 文件包含漏洞防范 禁止0字节 在PHP中配置open_ ...

  7. PHP伪协议-文件包含漏洞常用的伪协议

    在实战中文件包含漏洞配合PHP的伪协议可以发挥重大的作用,比如读取文件源码,任意命令执行或者开启后门获取webshell等,常用的伪协议有 php://filter 读取文件源码 php://inpu ...

  8. php伪协议漏洞_php伪协议利用文件包含漏洞

    php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结.实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本 设置allow_url_fopen和 ...

  9. 文件包含漏洞 文件伪协议利用

    目录 0x0 文件包含漏洞原理 0x1 检测文件包含漏洞 0x2 文件包含漏洞类型 0x3 文件协议流 0x4 实战 简介 #文件包含漏洞 原理,检测,类型,利用,修复等 #文件包含各个脚本代码 AS ...

最新文章

  1. 统计学:统计学概述(一)
  2. jQuery对象与DOM对象的相互转化
  3. MIT研发无人机仓库管理系统,或将帮沃尔玛省下几十亿美元
  4. IE userdata
  5. scrapy 的三个入门应用场景
  6. 河北移动引入物联网4G专网APN提升交警执法效率
  7. Domino下邮箱用户数据库限额自助释放物理空间
  8. 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线
  9. php开发添加表情功能,WordPress网站评论区如何实现添加表情包功能?
  10. Oracle Net Services 配置:Xlib: connection to :0.0 refused by server
  11. 经济学家德鲁克的三个故事
  12. 桌面好看的linux系统,可以当桌面的LINUX漂亮壁纸
  13. C语言输出菱形不是梦
  14. CDN最通俗易懂的CDN解释
  15. 手机显示服务器维护是啥意思,手机系统维护怎么解除_手机显示系统维护是什么意思_游戏吧...
  16. SCI论文写作中常用的连接词和短语
  17. linux下敏感文件(账号密码)查找—内网渗透linux主机密码收集
  18. 【网络】Padavan固件获取运营商ipv6设置
  19. 左移赋值运算符 (<<=)
  20. win10下Abaqus 6.14 安装

热门文章

  1. 如何快速学习CADD计算机辅助药物设计
  2. 搭建Air版本FISCO BCOS联盟链(v3.x)
  3. 区块链丨霍尼韦尔凭借区块链技术推动二手飞机部件交易
  4. 我国北斗区域卫星导航系统明年将覆盖亚太
  5. 全国计算机等级考试科目中加入“二级Python”
  6. 双屏异触 --- 实现指定触摸为副屏触摸功能
  7. 2022年山东食品安全管理员模拟试题及答案
  8. Web网站实现简单的登录功能(php+mysql)
  9. 串口及串口通信硬件详解UART,I2C,SPI,USB
  10. 互联网专业词汇(转)