其他分享
首页 > 其他分享> > 暑假集训6.28

暑假集训6.28

作者:互联网

[GWCTF2019]math

pwntools交互题,连接环境

 

 要成功计算150次式子,中间停顿几秒就会终止

在把环境的源代码放进IDE,F5查看代码,在计算正确150次后会进入进入目标系统的/bin/sh文件夹

int __cdecl main(int argc, const char **argv, const char **envp)
{
  unsigned int seed; // ST14_4
  unsigned int v4; // ST18_4
  unsigned int v5; // ST1C_4
  unsigned int v6; // ST20_4
  unsigned int v7; // ST24_4
  signed int v9; // [rsp+10h] [rbp-130h]
  char buf; // [rsp+30h] [rbp-110h]
  unsigned __int64 v11; // [rsp+138h] [rbp-8h]

  v11 = __readfsqword(0x28u);
  setvbuf(stdin, 0LL, 2, 0LL);
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stderr, 0LL, 2, 0LL);
  v9 = 0;
  seed = time(0LL);
  srand(seed);
  do
  {
    alarm(5u);
    v4 = rand() % 200;
    v5 = rand() % 200;
    v6 = rand() % 200;
    v7 = rand() % 200;
    puts("Pass 150 levels and i will give you the flag~");
    puts("====================================================");
    printf("Now level %d\n", (unsigned int)v9);
    printf("Math problem: %d * %d - %d + %d = ??? ", v4, v5, v6, v7);
    puts("Give me your answer:");
    read(0, &buf, 0x80uLL);
    if ( (unsigned int)strtol(&buf, 0LL, 10) != v5 * v4 - v6 + v7 )
    {
      puts("Try again?");
      exit(0);
    }
    puts("Right! Continue~");
    ++v9;
    sleep((unsigned __int64)"Right! Continue~");
  }
  while ( v9 <= 149 );
  if ( v9 != 150 )
  {
    puts("Wrong!");
    exit(0);
  }
  puts("Congratulation!");
  system("/bin/sh");
  return 0;
}

写脚本进行交互

from pwn import *
context.log_level = 'debug'#用来输出交互信息
p=remote('node4.buuoj.cn','28602')#连接环境
for i in range(0,150):
        ou=p.recvuntil('problem: ')#定位到问题
        print (ou)#输出问题信息
        a=int(p.recvuntil('*')[:-1])#获取第一个值
        b=int(p.recvuntil('-')[:-1])#获取第二个值
        c=int(p.recvuntil('+')[:-1])#获取第三个值
        d=int(p.recvuntil('=')[:-1])#获取第四个值
        p.sendline(str(a*b-c+d))#发送计算结果
p.interactive()#与远端交互,这样才能远程命令去找flag。#interactive模式下,输入一句就执行一句,变量也会被保存。

进入了目标系统的/bin/sh,用ls指令显示所以文件

 

发现了flag.txt文件,用cat指令捕获,得到flag

 

 

 一道取证题

查看文件系统信息

 

 

 

 对相应系统进行操作,搜索“flag”关键词

 

提取flag.txt

 

 

 

 

 在010打开发现是乱码

 

 在回去看了看剪贴板数据

 

 

 进行base64解码,得到flag

 获取用户的hash值

 

 

 

 

 进行MD5解码可以得到密码

 

 

 [watevrCTF 2019]Polly

一个很长的算术式子,x=0时得到119,对应的ascii码字符是w,所以flag应该就是把x从0开始,把计算结果转换成字符

 

 

 写脚本

import sympy

flag = ""
x = sympy.symbols('x')#声明变量,以供使用数学表达式
y = eval(open("1.txt","r").read())#把字符串当成算术表达式,返回结果
for i in range(57):
    flag += chr(y.subs(x,i))#给x赋值i

print(flag)

得到flag

 

 

[网鼎杯 2020 青龙组]虚幻2

拿到一个文件,用010查看发现是png,看着像重叠的二维码,放进Stegsolve,提取出每个颜色通道的图片

 图片太小太糊了,把它们在表格里画出来

 

 每一行取一列拼凑,是汉信码,改一下角落的标识符

 

 

 

 最后因为自己的有点小瑕疵,照着别人的改了一下,在随便补两划,扫出flag

 

 

 [羊城杯 2020]image_rar

得到一个视频,分离出一个压缩包和很多图片

 

 压缩包提示了掩码

 

 图片的第65张损坏了,用010打开,发现是rar,修改一下文件头

 

 

 

 rar有密码,不能用工具直接进行掩码爆破,用hash爆破

 

 

 破解时间太久了,后面没去管它,去看了别人爆破出来的是GW5!3#,取出一个无后缀文件,用010查看是png,加上后缀得到flag

 

[GKCTF 2021]银杏岛の奇妙冒险

一个mc的游戏签到题,做完任务就有flag,但我懒得做,找到了一个新工具FileLocator,可以直接搜索文件夹中的文本,跟网页ctrl+f一样

 

 

 

 四个部分拼接起来,得到flag{w3lc0me_t0_9kctf_2021_Check_1n}

标签:puts,int,unsigned,flag,暑假,recvuntil,0LL,集训,6.28
来源: https://www.cnblogs.com/carefree669/p/16418832.html