buu-[WUSTCTF2020]level3

该博客详细介绍了WUSTCTF2020比赛中的level3安全挑战,重点讨论了64位GCC环境下字符串处理和base64编码的问题。文章指出,通过分析main函数,发现原始base64解码方法无法直接解决问题,因为密码表已被修改。博主还提示在main函数头部可以找到更改的密码表线索。

64位GCC
在这里插入图片描述
查看字符串,base甩脸上
在这里插入图片描述
看一眼main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v3; // ST0F_1
  const char *v4; // rax
  char v6; // [rsp+10h] [rbp-40h]
  unsigned __int64 v7; // [rsp+48h] [rbp-8h]

  v7 = __readfsqword(0x28u);
  printf("Try my base64 program?.....\n>", argv, envp);
  __isoc99_scanf("%20s", &v6);
  v3 = time(0LL);
  srand(v3);
  if ( rand() & 1 )
  {
    v4 = (const char *)base64_encode(&v6);
    puts(v4);
    puts("Is there something wrong?");
  }
  else
  {
    puts("Sorry I think it's not prepared yet....");
    puts("And I get a strange string from my program which is different from the standard base64:");
    puts("d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD==");
    puts("What's wrong??");
  }
  return 0;
}

输入一个值,在base64_encode()后的值为d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD==
直接解是解不出来的,应该是更改了密码表

main函数头上
在这里插入图片描述

果然更改了密码表

__int64 O_OLookAtYou()
{
  char v0; // ST03_1
  __int64 result; // rax
  signed int i; // [rsp+2h] [rbp-4h]

  for ( i = 0; i <= 9; ++i )
  {
    v0 = base64_table[i];
    base64_table[i] = base64_table[19 - i];
    result = 19 - i;
    base64_table[result] = v0;
  }
  return result;
}
import base64
import string
 
flag = 'd2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=='
base64_table =list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
v0=''

i=0
for i in range(10):
     v0 = base64_table[i]
     base64_table[i] = base64_table[19 - i]
     result = 19 - i
     base64_table[result] = v0
     
base64_table=''.join(base64_table)

string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print(base64.b64decode(flag.translate(str.maketrans(base64_table,string2))))


在这里插入图片描述

flag{Base64_is_the_start_of_reverse}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值