[SUCTF2018]babyre [ACTF新生赛2020]fungame

本文对[SUCTF2018]babyre和[ACTF新生赛2020]fungame两道CTF题目进行分析。前者需用binwalk提取文件,利用数据区字符运算找输出flag的key;后者出现栈溢出问题,是强行结合的pwn题,对re玩家难做,对pwn玩家简单,被评价为凑数题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[SUCTF2018]babyre

惯用思维

首先呢,是个bin文件,需要用binwalk把文件提取出来。

binwalk -e [SUCTF2018\]babyre.bin 

在这里插入图片描述
在这里插入图片描述
是一个xml文件,我打开后除了正常结构就是乱码。。。

然后就没法分析了。。。xml不能放在ida里面分析。。

常人思维

在这里插入图片描述

查看一下文件类型,居然是64位的exe程序,任何东西都保持怀疑的态度。。笑死人。。。。
在这里插入图片描述
如下就是数据库,可以利用这些字符进行运算得到一些其它的字符进行输出

 v7[0] = 2;
  v7[1] = 3;
  v7[2] = 2;
  v7[3] = 1;
  v7[4] = 4;
  v7[5] = 7;
  v7[6] = 4;
  v7[7] = 5;
  v7[8] = 10;
  v7[9] = 11;
  v7[10] = 10;
  v7[11] = 9;
  v7[12] = 14;
  v7[13] = 15;
  v7[14] = 12;
  v7[15] = 13;
  v7[16] = 16;
  v7[17] = 19;
  v7[18] = 16;
  v7[19] = 17;
  v7[20] = 20;
  v7[21] = 23;
  v7[22] = 22;
  v7[23] = 19;
  v7[24] = 28;
  v7[25] = 25;
  v7[26] = 30;
  v7[27] = 31;
  v7[28] = 28;
  v7[29] = 25;
  v7[30] = 26;
  v7[31] = 31;
  qmemcpy(v8, "$!\"'$!\"#().+$-&/81:;4=>7092;<567HIBBDDFGHIJJMMONPPRSUTVWYYZ[\\]^^``ccdeggiikklmnnpprstuwwxy{{}}", 94);
  v8[94] = 127;
  v8[95] = 127;
  v8[96] = -127;
  v8[97] = -127;
  v8[98] = -125;
  v8[99] = -125;
  v8[100] = -116;
  v8[101] = -115;
  v8[102] = -114;
  v8[103] = -113;
  v8[104] = -120;
  v8[105] = -119;
  v8[106] = -118;
  v8[107] = -117;
  v8[108] = -116;
  v8[109] = -115;
  v8[110] = -114;
  v8[111] = -121;
  v8[112] = -104;
  v8[113] = -111;
  v8[114] = -110;
  v8[115] = -109;
  v8[116] = -108;
  v8[117] = -107;
  v8[118] = -106;
  v8[119] = -105;
  v8[120] = -104;
  v8[121] = -103;
  v8[122] = -102;
  v8[123] = -102;
  v8[124] = -100;
  v8[125] = -100;
  v8[126] = -98;
  v8[127] = -98;
  v8[128] = -96;
  v8[129] = -96;
  v8[130] = -94;
  v8[131] = -94;
  v8[132] = -92;
  v8[133] = -92;
  v8[134] = -90;
  v8[135] = -90;
  v8[136] = -88;
  v8[137] = -88;
  v8[138] = -86;
  v8[139] = -86;
  v8[140] = -84;
  v8[141] = -84;
  v8[142] = -82;
  v8[143] = -82;
  v8[144] = -80;
  v8[145] = -79;
  v8[146] = -78;
  v8[147] = -77;

这里的话就是利用数据区的字符进行一系列运算,然后进行flag的赋值,然后接着一个函数进行字符输出。

while ( v9[30] )
  {
    --v9[30];
    for ( j = 22; j; v9[j] |= v13 << v9[30] )
    {
      v12 = v7[22 * v9[30] + --j];
      v13 = (v12 >> ((v10[0] >> (2 * v9[30])) & 3)) & 1;
    }
  }

输入不同的key然后就会有不同的字符输出,我们需要找到输出flag的key,而flag字符的特征就是SUCTF,如果就这种特征,那么就进行输出

		if (flag[0] == 'S' && flag[1] == 'U' && flag[2] == 'C' && flag[3] == 'T' && flag[4] == 'F')
		{
			for (int i = 0; i < 22; i++)
				printf("%c", flag[i]);
			system("pause");
		}

GAMEOVER

在这里插入图片描述

SUCTF{Flag_8i7244980f}

[ACTF新生赛2020]fungame

int __cdecl sub_401340(int a1)

在这里插入图片描述

flag=[None]*16
b=""
y1=[
  0x23, 0x61, 0x3E, 0x69, 0x54, 0x41, 0x18, 0x4D, 0x6E, 0x3B, 
  0x65, 0x53, 0x30, 0x79, 0x45, 0x5B
]
y2=[
  0x71, 0x04, 0x61, 0x58, 0x27, 0x1E, 0x4B, 0x22, 0x5E, 0x64, 
  0x03, 0x26, 0x5E, 0x17, 0x3C, 0x7A
]
for i in  range(len(y1)):
    a=hex(y2[i]^y1[i])
    b+=chr(y2[i]^y1[i])
    flag[i]=a
print(b)

Re_1s_So0_funny!

然而却是错误,看第二个函数

int __cdecl sub_4013BA(char *Source)

int __cdecl sub_4013BA(char *Source)
{
  char Destination[12]; // [esp+1Ch] [ebp-Ch] BYREF

  strcpy(Destination, Source);
  strcpy(x, Source);
  return 0;
}
  strcpy(Destination, Source);

这行代码导致栈溢出,然后导致返回地址被覆盖,紧接着返回的时候就没法正确返回,以至于程序过了第一个函数,第二个函数结束时,就自动gg。

我一直好奇和其它博主输入一样,然后栈溢出导致返回地址覆盖时,改变后却不一样,嗯哼????出题人强行整活。。

 strcpy(x, Source);

这里有个全局变量x,要找这个线索,固定了前16字节字符,后面覆盖值需要自己算,然后跳入_sub_40233D这个函数。说白了就是一个pwn题,跟re无关。
在这里插入图片描述
_sub_40233D这个函数是出题人自己搞的,它也不会自动覆盖跳,需要玩家手动算。欧了,base64,这题目对于re玩家毫无价值,对于pwn玩家有太简单。搞不懂re库为啥会有这种???
在这里插入图片描述
输入:Re_1s_So0_funny!,返回地址如下:在这里插入图片描述
输入:Re_1s_So0_funny!0,返回地址如下:
在这里插入图片描述
这个题完全没有必要继续研究,就是出题人强行整活,作为re题的话,直接没法做;作为pwn题的话,又太无聊,总结——————凑数题(跳转不固定,flag固定,这咋做?脑洞?)

### BUUCTF ACTF 新生 2020 Upload 题目解题报告 #### 文件上传漏洞概述 文件上传漏洞是指攻击者能够通过应用程序中的文件上传功能,向服务器上传恶意文件并执行特定操作的一种安全缺陷。这类漏洞通常涉及绕过文件类型验证、大小限制以及路径遍历等问题。 #### 题目描述 本题目来自BUUCTF平台上的ACTF新生2020事,名为`Upload-1`。参选手需要利用页面中存在的文件上传机制实现对目标系统的控制或数据获取[^1]。 #### 页面交互分析 访问给定链接后会看到一个带有灯泡图标的网页,在悬停于该图标之上时会出现用于触发文件选择对话框的区域。此设计隐藏了实际的功能入口点,增加了挑战难度[^2]。 #### 利用方法 为了成功完成任务,可以采取以下策略: - **准备测试环境**:搭建本地模拟服务端口监听工具(如Burp Suite),以便监控HTTP请求过程。 - **构造特殊文件**:创建一个小巧精悍的一句话PHP木马脚本作为待上传对象;确保其内容合法且不会被简单过滤规则阻挡。 ```php <?php @eval($_POST['cmd']);?> ``` - **规避检测措施**:修改文件扩展名或将有效载荷嵌入图片元数据内等方式尝试绕过潜在的安全防护手段。 - **提交表单并确认响应结果**:按照提示指引完成整个流程直至获得预期反馈信息为止。 #### 获取Flag 一旦上述步骤顺利完成,则可通过蚁剑等客户端软件建立远程连接至已植入webshell的目标主机,并在其根目录下定位到名为`flag`的关键文档。双击打开即可见最终答案字符串:`flag{d752d02c-324d-47e7-9b05-87d652492eb4}`[^3]。 #### 技术要点总结 此类竞项目主要考察参与者对于常见Web应用风险的认知程度及其动手实践能力,具体包括但不限于以下几个方面: - 对各种编程语言特性的深刻理解; - 掌握多种调试技巧以辅助逆向工程工作; - 能够灵活运用第三方插件提高效率降低复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值