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知识库]文件包含和伪协议漏洞知识总结

文件包含

文件包含漏洞也是一种“注入型漏洞”
文件包含的参数没有经过过滤或者严格定义,并且参数可控,就可能包含非预期的文件,如果文件中存恶意代码,无论文件是什么了类型,代码都会被解析或执行,在其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行
危害:网页被篡改 被挂马 服务器远程被控制 被安装后门
php常见的文件包含函数

require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once()include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once()require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

本地文件包含

无限制本地文件包含漏洞

常见敏感文件
Windows

\boot.ini                系统版本信息
\xxx\php.ini             PHP配置信息
\xxx\my.ini				 MySQL配置信息
\xxx\httpd.conf          Apache配置信息

Linux

/etc/passwd                   Linux系统账号信息
/etc/httpd/conf/httpd.conf    Apache配置信息
/etc/my.conf                  MySQL配置信息
/user/etc/php.ini             PHP配置信息

通过目录遍历可以读取系统中文件的内容

http://xxx.com/x.php?filename=../../../../../etc/passwd

如果test.txt的文件内容是<?php info();?>

http://xxx/x.php?filename=test.txt

就可以执行文件中的代码输出phpinfo信息

有限制本地文件包含漏洞

有限制:指代码中为文件包含漏洞指定了特定前缀或者.php .html等拓展名 需要绕过前缀或者拓展名过滤才能利用漏洞

%00截断

条件

magic_qoutes_gpc=off
php version < 5.3.4

原理:%00会被认为是结束符 后边的数据会直接被忽略导致扩展名截断

<?php
	$filename=$_get['filename'];
	include($filename . " .html");
?>

可以用以下方式

http://xxx.com/x.php?filename=../../././../../boot.ini%00

截断了后边的.html扩展名 读取了boot.ini的内容

路径长度截断

原理

Windows下目录最大路径为256B
Linux下目录最大路径为4096B
输入超过最大路径长度的目录,系统就会将后边的路径丢弃导致扩展名截断

<?php
	$filename=$_get['filename'];
	include($filename . " .html");
?>

可以

http://xxx.com/x.php?filename=../../././../../boot.initest.php/././././././././././././././././././././././././././././././././././././.././././././././././././././././././././././././././././././././././././././././././.././././././././././././././././././././././././././././././././././././././././././.././././././././././././././././././././././././././././././././././././././././././../././././

执行完成发现可以截断后边的扩展名

点号截断

适用于Windows系统 原理与路径阶段类似

http://xxx.com/x.php?filename=../../././../../boot.initest.php............................................................................................................................................................................................................................................................................

Session文件包含

要求 Session存储位置已知 Session文件内容可控

通过phpinfo的信息获取Session的存储位置

phpinfo中的 session.save_path保存的是Session的存储位置,通过phpinfo的信息获取Session的存储位置为/var/lib/php/session

通过猜默认位置

Linux中默认存储位置/var/lib/php/session

漏洞利用

<?php
session_start();
$s=$get['s'];
$_session["username"]=$s;
?>

$s的值可以通过GET型S参数传入 存入session中,可以利用GET型S参数将代码写入文件中,再利用文件包含传入恶意代码
访问

http://xxx/session.php?s=<?phpinfo();?>

之后 会在/var/lib/php/session目录下将s的值写入session文件
通过找到存放位置后 通过开发者模式 (F12)可以获取文件名称
然后通过文件包含解析代码

日志文件包含

简单说就是通过访问日志将恶意代码写入日志文件中

中间件日志文件包含

条件 日志文件存储位置已知 有可读权限
1.将代码写入日志文件
中间件开启访问日志记录功能 会将访问日志写入日志文件中
中间件日志文件会记录访问者IP 访问时间 路径 状态码等信息
在访问路径中加入恶意代码

http://xxx/<一句话木马>

访问信息会写入日志文件 但由于进行了URL编码所以无法利用
此时可以通过BP等抓包修改数据包

GET /XXX/马 HTTP/1.1

这样就可以写入日志文件中
2.文件包含日志文件
常见中间件都有默认存储位置
如CentOS系统Apache的日志access_log就存在/var/log/httpd/目录下

http://xxx/index.php?filename=../../../../../../../.../var/log/httpd/access_log

然后正常操作其中Php代码可以成功解析执行

SSH日志文件包含

条件 SSH日志路径已知 有可读权限
默认路径 /var/log/auth.log

SSH如果开启了日志记录功能会将连接记录到日志中 将连接用户名设置为恶意代码用命令连接SSH服务 恶意代码被写入到日志文件中

http://xxx/index.php?filename=../../../../../../../.../var/log/auth.log

然后正常操作其中Php代码可以成功解析执行

远程文件包含

条件

allow_url_fopen= on 
allow_url_include=on

无限制远程文件包含

正常情况下访问远程服务器url
通过远程文件包含漏洞 包含在文件中的函数就会被当作php代码执行

有限制远程文件包含

问号绕过

问号后的扩展名会被当做查询,从而绕过扩展名过滤

#号绕过

#会截断后边的扩展名 #的url编码为%23

空格绕过

用bp对空格进行url编码 可以绕过扩展名过滤

文件包含漏洞修复

1.代码层修复

在代码层进行文件过滤 将包含的参数设置为白名单

2.服务器安全配置

修改php配置文件 如 修改特定目录 关闭 allow_url_include

php伪协议

php.ini的allow_url_fopenallow_url_include设置为On,不然会影响伪协议的使用。

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

11

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:29:01  更:2021-07-23 10:30:45 
 
开发: 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年11日历 -2024/11/15 1:08:39-

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