加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

渗透学习之PHP--安全配置与PHP流

发布时间:2022-10-16 22:01:20 所属栏目:PHP教程 来源:转载
导读: 1.1函数与类限制
可通过disable_functions/disable_classes限制PHP可调用的函数和类。
1.2 目录访问限制
可通过open_basedir限制PHP可访问的目录。
1.3远程引用限制
可通过all_url_include

1.1函数与类限制

可通过disable_functions/disable_classes限制PHP可调用的函数和类。

1.2 目录访问限制

可通过open_basedir限制PHP可访问的目录。

1.3远程引用限制

可通过all_url_include限制远程文件包含,默认关闭。 可通过allow_url_fopen限制打开远程文件,默认开启。

1.4Session.Save

PHP的Session默认handler为文件,存储在 php.ini 的session.save_path中,若有任意读写文件的权限,则可修改或读取session。从phpinfo中可获得session位置。

1.5Session.Upload

PHP默认开启了session.upload_progress.enabled, 该选项会导致生成上传进度文件,其存储路径可以在phpinfo中获取。

那么可以构造特别的报文向服务器发送,在有LFI的情况下即可利用。

2.1 PHP流简介

流(Streams)的概念是在php 4.3引入的,是对流式数据的抽象,用于统一数据操作,比如文件数据、网络数据、压缩数据等。

流可以通过file、open、fwrite、fclose、file_get_contents、 file_put_contents等函数操作。

2.2封装协议

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。支持的协议可用stream_get_wrappers()查看。

2.3 PHP支持流

PHP 提供了一些输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符,内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

需要注意的是,流不受allow_url_fopen限制,但是php://input、php://stdin、php://memory和php://temp受限于allow_url_include。

2.4输入输出流

php://stdin、php://stdout和php://stderr允许直接访问 PHP 进程相应的输入或者输出流。数据流引用了复制的文件描述符,所以如果在打开php://stdin并在之后关了它,仅是关闭了复制品,真正被引用的 STDIN 并不受影响。

其中php://stdin是只读的,php://stdout和php://stderr是只写的。

2.5fd

php://fd 允许直接访问指定的文件描述符。例如php://fd/3引用了文件描述符 3。

2.6memory与temp

php://memory和php://temp是一个类似文件包装器的数据流,允许读写临时数据。两者的唯一区别是php://memory总是把数据储存在内存中,而php://temp会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。临时文件位置的决定和sys_get_temp_dir()的方式一致。

php://temp的内存限制可通过添加/maxmemory:NN来控制,NN 是以字节为单位、保留在内存的最大数据量,超过则使用临时文件。

2.7input

php://input是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用php://input来代替$HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。而且,这样的情况下$HTTP_RAW_POST_DATA默认没有填充,比激活always_populate_raw_post_data潜在需要更少的内存。enctype="multipart/form-data"的时候php://input是无效的。

2.8filter

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。PHP默认提供了一些流过滤器,除此之外,还可以使用各种自定义过滤器。

filter有resource, read, write三个参数,resource参数是必须的。它指定了你要筛选过滤的数据流。 read和write是可选参数,可以设定一个或多个过滤器名称,以管道符(|)分隔。

2.9过滤器列表

可以通过stream_get_filters()获取已经注册的过滤器列表。其中PHP内置的过滤器如下:

转换过滤器

压缩过滤器

加密过滤器

2.10过滤器利用tricks XXE读取文件时会因而解析报错PHP过滤器,可用base64编码base64编码会弃掉未在码表内的字符,可用于绕过一些文件格式部分 convert 会有大量的资源消耗,可用作DoSrot13 / convert 转换 过WAF

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!