攻防世界: easyphp

攻防世界: easyphp

上述就是服务端逻辑的源码展示。

因此这里主要的任务就是控制变量a、b、c的值,使得key1与key2都为真。

这里涉及到以下知识点:

  1. 科学计数的表示:例如6e7表示6×1076 \times 10^76×107 。

  2. substr函数的功能:substr(字符串, 开始索引, 长度)。其中开始索引为负数的时候表示从末尾开始数(-1是最后一个)。

  3. PHP语言的关联数组,他的一个简单的例子如下:

    php 复制代码
    $person = [
        "name" => "张三",
        "age" => 25,
        "city" => "北京"
    ];
    
    // 可以通过这种方式,与pyhon的字典通过键值对的形式访问相似
    echo $person["name"];  // "张三"
    echo $person["age"];   // 25
  4. PHP语言的隐式类型转换

    当PHP的让一个字符串与数字进行比较(==,>, < 等符号)的时候,会将字符串转换为数字。

  5. PHP语言的松散比较与严格比较

    • 松散比较(即==符号)

      当出现松散比较的时候,如果类型不相同,首先会进行类型的转换,然后再进行比较,比如: "1" == 0 就会转换为相当于python语言的 1==0(将字符串转换为数字)。

    • 严格比较(即===符号)

      这种比较需要类型和值都是一样的时候,结果才为True。

开始分析

  1. 如下图, 这里要求a的值大于6000000,且长度不超过3,因此我们可以使用科学计数的表示方式:6e7即可通过。

  2. 如下图,这里要求b变量的经过md5得hash算法后,最后6位得值是8b184b。

    • 第一想法是使用123456,1 等值通过在线得md5加密网站看看结果,发现并不是。
    • 第二个想法,我使用了常见得用户名(来自文件)来作为输入,来判断后面6位得结果是否是8b184b,跑完了常见的,发现不是。
    • 最后尝试从0到10000000进行枚举,查看是都有符合要求的数字

    其中测试的python代码如下:

    pyhton 复制代码
    import hashlib
    
    # path = "./file/simple-users.txt"
    # with open(path, "r") as f:
    #     for line in f.readlines():
    #         tmp = hashlib.md5(line.encode()).hexdigest()[-6:]
    #         # or tmp == '0b15af'
    #         if tmp == "8b184b":
    #             print(line)
    #             break
    
    
    for i in range(10000000):
        tmp = hashlib.md5(str(i).encode()).hexdigest()[-6:]
        if tmp == "8b184b":
            print(i)
            break
            
    # 输出的值为53724

    输出的值为53724

  3. 最后就是c变量的值了。从代码来看,c是一个json字符串转换而来。它会将{}这种类型转换为一个关联数组。

  • 在第一个if中,学要确保$c["m"]不是数字,却要大于2022,这里就涉及到前面说的隐式转换了。因此其值可以为"2023N"

  • 第二个if,需要确保$c["n"]是一个长度为2的数组,且数组的第0个元素依然是数组。那可以考虑这个值: [[],"DGJJ"]

  • 这里要求数组中含有DGGJ,同时又不含有DGGJ,这怎么办呢?如下图所示:

    这就需要用到前面的知识点了,松散比较和严格比较。array_search使用的是松散比较,因此可以考虑将数组的替换为:

    [[],0]这样在array_search的时候,会将DGGJ转换为数字,"DGGJ" == 0, 转换后的结果就是 0==0,因此能通过即包含又不包含DGGJ这个字符串。

综上,最后c的值为{"m":"2023N","n":[[],0]}。

拿到flag

  1. 提交参数
  1. 得到结果

相关推荐
不庸.3 小时前
theHarvester 入门教程:从装好到看懂输出
安全·web安全·网络安全·开源·安全性测试
FungLeo1 天前
成为全栈·基础补充·Web 安全基础:XSS、CSRF 与 SQL 注入
web安全·网络安全·xss·csrf·sql注入·成为全栈
0xBADCODE2 天前
2026 强网杯 Web 题 cwp · 全链路复盘
前端·安全·web安全·网络安全·系统安全·ctf
迪康Defender4 天前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
科技小登4 天前
出海高防CDN怎么选?CDN加速、边缘清洗与跨境回源POC指南
tcp/ip·web安全·ddos
是真的小外套4 天前
网络安全实战第21期:一次完整的注入风险验证与记录
安全·web安全
kingx35 天前
Bugku WEB 题解总集:文件包含 / SQLi / 反序列化 / SSTI / 反爬 / 组件漏洞
web安全·网络安全·ctf·bugku
CCIE-Yasuo5 天前
网络安全-Javascript基础
javascript·安全·web安全
是真的小外套5 天前
网络安全实战第17期:自动化检测误报漏报真相
安全·web安全·自动化
是真的小外套5 天前
网络安全实战第19期:三重防护失效真相之注入攻击的无限变形之路
安全·web安全