首页
社区
课程
招聘
[原创]新手小白的ctf记录:攻防世界-Reversing-x64Elf-100
2023-11-13 11:38 2905

[原创]新手小白的ctf记录:攻防世界-Reversing-x64Elf-100

2023-11-13 11:38
2905

新手小白的ctf记录

靶场:攻防世界
题目名称:Reversing-x64Elf-100
难度:1
1、下载题目后,发现是后缀为.re的文件
图片描述
2、为了识别文件类型,放入kali使用file进行识别,确认为64位的ELF文件
图片描述
3、执行测试
图片描述
流程大致是执行文件后,会让你输入password,这个password可能是flag,或者找到password后会给你返回flag。
4、查看是否加壳,确认无壳
图片描述
5、放入ida查看
图片描述
图片描述
6、文件导入后,可以在右侧函数名称栏,明显看到main函数,一般main函数都是程序入口
图片描述
7、按F5快捷键进行编译
图片描述
函数如下,我门对该函数进行解析:
__int64 __fastcall main(int a1, char **a2, char **a3)
{
char s[264]; // [rsp+0h] [rbp-110h] BYREF
unsigned __int64 v5; // [rsp+108h] [rbp-8h]

v5 = __readfsqword(0x28u);
printf("Enter the password: ");
if ( !fgets(s, 255, stdin) )
return 0LL;
if ( (unsigned int)sub_4006FD(s) )
{
puts("Incorrect password!");
return 1LL;
}
else
{
puts("Nice!");
return 0LL;
}
}
定义了一个264位的字符串s,这个应该是执行程序后输入的字符串,然后会通过如下语句进行输入提示字符串printf("Enter the password: "); ,然后读取字符串然后发送到sub_4006FD函数进行校验,如果校验失败提示Incorrect password!,校验成功返回nice。

8、我们跳转到校验密码函数sub_4006FD看一下。
图片描述
可以看到代码如图所示,v3是一个二维数组,v3[][],,然后通过for循环,0<i<12,如果校验算出的值比我们输入的值大于1,则通过校验,返回0LL,否则校验失败,返回1LL。
校验算法为v3数据第一个参数为i%3,第二个参数为[2*(i/3)],这里的i/3是c语言中的,取得整,然后通过ascll码减一再转为字符串得到我们的flag。

9、Exp代码如下(python3):
图片描述
运行结果如下:
Code_Talkers


阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 19918
活跃值: (29483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-11-14 09:39
2
1
感谢分享
游客
登录 | 注册 方可回帖
返回