前女友(SKCTF)

简介: 打开源代码,出现code.txt

打开源代码,出现code.txt

if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>
  • isset()函数用于检测变量是否已设置并且非NULL.
  • strcmp() 函数比较两个字符串.
    如果两个字符串相等,返回0
    如果 string1 小于 string2,返回<0
    如果 string1 大于 string2,返回>0

根据v1 !=v2 && md5(v1) == md5(v2):

  • 姿势1:v1,v2 找到两个开头为0的md5值,例如:v1=s878926199a&&v2=s155964671a
  • 姿势2:根据md5函数特性,用两个值不同但不可md5的数据类型,例如:
    v1[]=1&&v2[]=2

根据 if(!strcmp(v3,flag))
需要v3和flag值相同才返回flag的值。此处依旧利用函数特性,strcmp函数如果出错,其返回也是0,不可比较时出错,传入数组,例如:
v3[]=8.

综上,构造:
?v1=s878926199a&&v2=s155964671a&&v3[]=8
可得到flag

相关文章
|
5月前
|
消息中间件 Kafka 数据库
实时计算 Flink版操作报错之遇到UnsupportedOperationException异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
存储 算法 安全
深入理解操作系统内存管理:原理与实践
【4月更文挑战第2天】 在现代计算机系统中,操作系统的内存管理是核心功能之一,它负责协调和分配系统内存资源。本文将探讨操作系统内存管理的基本原理,包括内存的分配与回收、分页机制、虚拟内存的使用以及内存保护。通过对这些概念的细致剖析,我们不仅能够理解操作系统如何高效利用有限的物理内存,还能够认识到内存管理对系统稳定性和性能的重要性。文章还将简要讨论现代操作系统中内存管理的创新趋势及其对未来计算技术的潜在影响。
123 2
|
5月前
|
流计算
在Flink CDC运行过程中出现重复数据的情况
在Flink CDC运行过程中出现重复数据的情况
147 2
|
编解码 芯片 内存技术
数字基带传输系统 1
数字基带传输系统
228 0
|
前端开发 开发工具 git
react+dumi+typescript搭建个人组件库Concis
react+dumi+typescript搭建个人组件库全过程记录
185 1
|
存储 SQL 缓存
【ElasticSearch】浅谈ElasticSearch常考特性
面试官: 有了解过ElasticSearch吗?没有啊,行,那今天面试就到这里了
438 0
|
网络协议 算法 网络架构
动态路由协议一
一动态路由 1.什么是动态路由 动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整 2.动态路由的概述 动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发的报文。
222 0
动态路由协议一
|
JavaScript 前端开发 数据安全/隐私保护
省 市 县/区地址库三级联动纯js版
省 市 县/区地址库三级联动纯js版
267 0
省 市 县/区地址库三级联动纯js版
|
机器学习/深度学习 前端开发 JavaScript
计算机各种进制之间的转换,外行人也能看的懂
计算机各种进制之间的转换,外行人也能看的懂
计算机各种进制之间的转换,外行人也能看的懂