ctfshow-web11(session绕过)

news/2024/5/18 16:10:08 标签: session, cookie, php, 代码审计, 正则表达式, web安全

php代码审计

function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }

首先定义了一个函数,主要是使用preg_replace函数对我们提交的内容进行正则匹配

该函数的用法:

preg_replace (正则表达式, 替换成什么内容, 目标字符串)

这里如果匹配到regex里面的内容就会将其替换为空,以此来替换掉一些SQL关键字和特殊字符,防止SQL注入。

if(strlen($password)!=strlen(replaceSpecialChar($password))){
            die("sql inject error");

strlen() 函数用来返回字符串的长度,如果提交的password和经过正则匹配替换后的字符串长度不相等,就会输出 sql inject error,die函数来终止脚本并显示错误消息。

我们可以验证一下:输入 password 为 select

果然报我们预期的错误 

 

继续看后面的代码:

if($password==$_SESSION['password']){
            echo $flag;

 该代码通过比较输入的密码和 $_SESSION['password'] 的值来进行身份验证,这意味着只有当两者完全相等时,才会显示 $flag 的值。

$_SESSION["Session名称"] 用来读取Session变量信息

当在代码中设置了session时,在http请求的消息头中会携带一个名为PHPSESSID的cookie,其值是一个32位16进制的字符串。每个客户端向服务器请求时都会产生一个不同的值,如果清除掉浏览器的cookie,再次刷新页面将会重新设置一个PHPSESSID的值。服务端接收到这个cookie,根据其值在服务器中找到对应的session文件,从而实现保持与客户端链接状态的信息,其中session中存储着序列化的session键值等信息。

可以看到,我使用不同浏览器请求,它的session值都是不一样的 

试了一下,如果直接将password改为抓到包里的session值是不行的

由于这里的限制并不严格,我们通过输入空密码,抓包后将session值删除,即可实现绕过

发包成功后直接回显flag

ctfshow{3da8ca9d-3db3-4821-aa65-570242968a50}


http://www.niftyadmin.cn/n/5076448.html

相关文章

泛型的小结

文章目录 什么是泛型泛型的相关概念泛型的作用 泛型的使用泛型类语法泛型接口语法泛型方法语法泛型类的简单示例泛型接口的简单示例基于泛型的简单工厂方法泛型的上界与下界 泛型的一些使用建议 什么是泛型 从JDK1.5开始引入泛型(generic)语法。对类型实…

强化学习和近似动态规划的区别与联系是什么,他们俩是一回事吗

强化学习(Reinforcement Learning,RL)和近似动态规划(Approximate Dynamic Programming,ADP) 是两种不同但相关的概念,它们 都关注于通过学习或近似方法来解决决策问题,但它们并不是…

基于WTMM算法的图像多重分形谱计算matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、WTMM算法概述 4.2、WTMM算法原理 4.2.1 二维小波变换 4.2.2 模极大值检测 4.2.3 多重分形谱计算 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部…

编译器优化等级对程序性能的影响

文章目录 前言代码示例性能差异探究原因附录 前言 GCC 有 -O0、-O1、-O2、-O3 四级优化等级&#xff0c;你知道它们对程序性能有多少影响吗&#xff1f;知道性能差异产生的根本原因是什么吗&#xff1f;今天就和大家一起研究下。 代码示例 combine4.c #include <stdio.h…

操作系统 OS

本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记&#xff0c;其中一些图片来源于学习资料。 目录 概念&#xff08;定义&#xff09; 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…

C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化或反序列化报错解决方法

一、问题描述 在使用C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化报错【System.Exception:“不支持类型 System.Collections.Generic.Dictionary2[[System.String, mscorlib, Version2.0.0.0, Cultureneutral, PublicKeyTokenb77a5c561934e089],[System.Strin…

小黑子—MyBatis:第三章

MyBatis入门3.0 七 小黑子使用javassist生成类7.1 Javassist的使用7.2 javassist生成动态类并实现接口7.3 工具类GenerateDaoProxy的编写7.3.1 每一个方法体的动态拼接7.3.2 MyBatis的getMapper方法 八 MyBatis中接口代理机制及使用8.1 面向接口的方式进行CRUD8.1.1 步骤18.1.2…

Python:Jupyter:OSError: Initializing from file failed

在学习Python的时候&#xff0c;我在进行导入外部文件的时候总是出现问题&#xff0c;总是乱导文件&#xff0c;可能碰巧文件导进去了&#xff0c;这次记录一下导入.csv文件失败的原因 read_csv时发生报错&#xff1a;OSError: Initializing from file failed filepathr"…