首页 > 其他分享 >2021Business CTF syncopation逆向

2021Business CTF syncopation逆向

时间:2023-05-01 21:33:46浏览次数:28  
标签:uVar1 0x2A 0x62 lVar2 syncopation CTF 3c 2021Business local



开始

将题目拖入工具后,定位到main函数,这里因为ida看伪代码有点头大,这里我就用ghidra来逆向题目

2021Business CTF syncopation逆向_web安全


伪代码:

2021Business CTF syncopation逆向_web安全_02


非常简单就能看出这个程序做了什么

void main(void)

{
  int iVar1;
  undefined8 extraout_RDX;
  long lVar2;
  size_t *__n;
  EVP_PKEY_CTX *ctx;
  long in_FS_OFFSET;
  char *local_20;
  size_t local_18;
  undefined8 local_10;
  
  local_10 = *(undefined8 *)(in_FS_OFFSET + 0x28);
  printf("Enter killswitch: ");          //输出字符串Enter killswitch
  local_18 = 0;
  __n = &local_18;
  local_18 = getline(&local_20,__n,stdin);    //读取我们输入的值,然后存放到local_18变量里
  local_20[local_18 - 1] = '\0';     //对我们输入的值做了一些操作
  puts("Verifying authentication...");    //输出字符串Verifying authentication...
  iVar1 = checker(local_20);       //检查我们输入的字符,然后将布尔值放到iVar1函数里
  if (iVar1 == 1) {            //如果iVar1 == true 则:
    puts("Correct authentication received, shutting down");       //输出字符串Correct authentication received, shutting down
    func_0x00400580(0);    //我跟进函数看了一下,是退出程序的操作,类似与exit()
  }
  puts("ERROR - Invalid authentication!");     //如果我们输入的值不正确,则输出ERROR - Invalid authentication,很明显,我们这是我们输入错误得到的字符串
  ctx = (EVP_PKEY_CTX *)0xffffffff;
  func_0x00400580();     //我跟进函数看了一下,是退出程序的操作,类似与exit()
  _init(ctx);
  lVar2 = 0;
  do {
    (*(code *)(&__frame_dummy_init_array_entry)[lVar2])((ulong)ctx & 0xffffffff,__n,extraout_RDX);
    lVar2 = lVar2 + 1;
  } while (lVar2 != 1);
  return;
}

通过分析程序可以发现,我们无论输入正确或者错误都不会显示flag,而flag应该在程序里,需要通过一些操作才能还原flag

2021Business CTF syncopation逆向_经验分享_03

checker函数是关键所在,他存放着flag的值,与我们输入的字符串做对比,输入正确则显示成功的字符串,输入错误则显示错误的字符串

回到ghidra,双击进入checker函数

2021Business CTF syncopation逆向_web安全_04

可以看出,这个函数做了while循环

local_3c = 0;
  do {        //进入while循环
    if (29 < local_3c) {      //if判断,如果29 < 0
      uVar1 = 1;    //uVar1的值为1
code_r0x0040081c:  	//循环
      if (*(long *)(in_FS_OFFSET + 0x28) == *(long *)(in_FS_OFFSET + 0x28)) {   //对比偏移量里的值,相同则:
        return uVar1;   //返回uVar1的值,也就是true
      }   //但这个条件不会发生,因为29 < 0是不正确的
                    /* WARNING: Subroutine does not return */
      __stack_chk_fail();
    }
    if (*(char *)(param_1 + (int)local_3c) != check[(int)(local_3c * 5)]) {  //param_1里的值+local_3c里的值不等于check里的值*5则:
      uVar1 = 0xffffffff;  //uVar1的值为0xffffffff
      goto code_r0x0040081c;   //然后跳转此处,也就是第5行,一直循环
    }   //这个才是我们循环正常进行的地方
    local_3c = local_3c + 1; //叠加
  } while( true );
}

我们需要uVar1 = 1,这样我们才能满足main函数的条件,执行正确的输出,我们双击这个关键的check

2021Business CTF syncopation逆向_经验分享_05


2021Business CTF syncopation逆向_字符串_06


里面存储了一大堆的十六进制数,我们还原这个check里的数就能得到flag了

我们将里面的十六进制值复制出来,然后写一个脚本还原flag

data = [
    0x48,
    0x42,
    0xEC,
    0x99,
    0xEA,
    0x54,
    0xEC,
    0x99,
    0xEA,
    0xC2,
    0x42,
    0x99,
    0xEA,
    0xC2,
    0x52,
    0x7B,
    0xEA,
    0xC2,
    0x52,
    0x2A,
    0x34,
    0xC2,
    0x52,
    0x2A,
    0x09,
    0x5F,
    0x52,
    0x2A,
    0x09,
    0x7D,
    0x72,
    0x2A,
    0x09,
    0x7D,
    0x81,
    0x34,
    0x09,
    0x7D,
    0x81,
    0xC6,
    0x74,
    0x7D,
    0x81,
    0xC6,
    0x2A,
    0x68,
    0x81,
    0xC6,
    0x2A,
    0xE9,
    0x33,
    0xC6,
    0x2A,
    0xE9,
    0xF6,
    0x72,
    0x2A,
    0xE9,
    0xF6,
    0x21,
    0x5F,
    0xE9,
    0xF6,
    0x21,
    0xAD,
    0x30,
    0xF6,
    0x21,
    0xAD,
    0x62,
    0x66,
    0x21,
    0xAD,
    0x62,
    0x00,
    0x66,
    0xAD,
    0x62,
    0x00,
    0xBD,
    0x62,
    0x62,
    0x00,
    0xBD,
    0xCF,
    0x33,
    0x00,
    0xBD,
    0xCF,
    0x59,
    0x34,
    0xBD,
    0xCF,
    0x59,
    0x1C,
    0x74,
    0xCF,
    0x59,
    0x1C,
    0x7C,
    0x5F,
    0x59,
    0x1C,
    0x7C,
    0x90,
    0x62,
    0x1C,
    0x7C,
    0x90,
    0x50,
    0x31,
    0x7C,
    0x90,
    0x50,
    0x5D,
    0x6E,
    0x90,
    0x50,
    0x5D,
    0x82,
    0x34,
    0x50,
    0x5D,
    0x82,
    0x70,
    0x72,
    0x5D,
    0x82,
    0x70,
    0x0E,
    0x79,
    0x82,
    0x70,
    0x0E,
    0x84,
    0x21,
    0x70,
    0x0E,
    0x84,
    0xF3,
    0x7D,
    0x0E,
    0x84,
    0xF3,
    0x72,
    0x00,
    0x84,
    0xF3,
    0x72,
    0xE7,
]   //check里的十六进制值


for d in range(0, len(data), 5):   //for循环,每5个字符遍历一次,len:长度
    print(chr(data[d]), end="")   //将十六进制转换为ascii码然后输出,end:将这些字符整理为一行

执行我们写的脚本

2021Business CTF syncopation逆向_字符串_07


flag:

HTB{4_r4th3r_0ffb34t_b1n4ry!}


标签:uVar1,0x2A,0x62,lVar2,syncopation,CTF,3c,2021Business,local
From: https://blog.51cto.com/u_16068048/6239406

相关文章

  • 《CTFshow-Web入门》07. Web 61~70
    目录web61~65题解web66知识点题解web67知识点题解web68知识点题解web69知识点题解web70知识点题解ctf-web入门web61~65题解这几个题都和web58一样。可能内部禁用的函数不一样吧。但payload都差不多。不多解释了。以下解法随便挑一个即可。可能不同题会有部分函数被......
  • HZNUCTF2023
    前言还是要向大师傅们orz,本人太菜了。希望大师傅们可以来指点本菜鸡,让本坤能快点理解wp,QAQ。easy_rw查保护,和禁用系统调用静态分析程序漏洞。程序功能很简单,就是一个栈溢出。但是仅溢出0x28字节,本人思路是先泄露libc,再打一个栈迁移。expfrompwncyimport*context(arch......
  • DASCTF Apr.2023 X SU战队2023开局之战 pwn
    DASCTFApr.2023XSU战队2023开局之战pwnfour漏洞是2.23的sspleak和未初始化漏洞主要的难点就是分析程序而且题中有一些干扰选项保护程序分析主函数有4个选项1:是干扰的选项(因为会关闭标准错位流,那就没法打sspleak)2:这个函数中有一个未初始化漏洞3:就是在这个函数......
  • CTF-MISC-编码(持续更新)
    1.DES编码题目来源:广东省大学生攻防大赛2021闲话:DES看起来跟base64有点相似,不知道是不是我做的题少的原因,解码需要key附件是一张虚假的gif图   修改后缀为zip,打开得到一张图片 检查为exif隐写 密钥藏在文件尾--iamakeys 利用在线网站解密--选择ECB模式,Zero填......
  • ZGCTF_break
    这是一道相对来说复杂的题目,但是出题人说题不难,当我做出来后,确实不难。主要考点有沙箱逃逸、magic_gadget。查看保护该题开了沙箱,禁掉了execve和open的系统调用,能猜到这题是要打orw的,虽然禁掉了open,但我们可以调用openat函数,效果是一样的。IDA静态调试伪c代码很简单,可以向bu......
  • BUUCTF MISC 81 - 100
    81、吹着贝斯扫二维码https://blog.csdn.net/m0_46631007/article/details/119965593下载题目后得到很多未知格式的文件以及一个加密的压缩包先用winhex随便查看一个文件,发现是JPG文件使用cmd的ren命令批量重命名ren**.jpg,发现是二维码碎片,但是不知道拼接的顺序再用十六进制器......
  • ZGCTF_note
    这是一道很简单的的题,甚至都说不出来它有什么考点,如果非要说的话,可能需要对ida、gdb、栈不那么陌生吧。查看保护IDA静态分析主函数是一个菜单,通过4008e3函数读入选项。这个函数允许修改602120指定一字节的内容,并且只能执行两次。这是说正常情况下,仔细观察可以发现,v3为有符号......
  • web: pdf_converter | DASCTF Apr.2023 X SU战队2023开局之战
    题目内容这道题是给源码的,是个thinkphp项目,可以直接看看控制器就一个pdf方法,用了dompdf库,然后把用户传入的content写到pdf中。既然这么明显,那就搜索dompdf漏洞知识点首先看到:https://ghostasky.github.io/2022/03/19/dompdf/首先看到这里说,如果传入自定义的c......
  • BUAACTF2023 Writeup题解 by Joooook
    BUAACTF2023WriteupbyJoooook目录MiscWhichElementchatgptzhuzhuzhuzhu'srevengeScreenshotcarzymazeMCCryptoBlockCipherMathKeyExchangeWebmotaReverseoneQuiz'srevenge*SnakeMinesweepobfu可以从队名猜一下博主是哪里人(nooffline......
  • [NISACTF 2022]is secret
    本题考点1,RC4对称加密。2,flask模板注入。解题过程打开题目什么也没发现啥有用的,查看源码也没什么发现。上网查了一下发现这道题时[CISCN2019华东南]DoubleSecret原题。看了别人的wp,用御剑扫一下发现了/secret这个路径。页面内容为Tellmeyoursecret.Iwillencryptitso......