攻防世界高手进阶区——stack2
攻防世界高手进阶区——stack2
看题目啥都没有
一,分析文件
checksec
发现居然存在栈溢出保护,这是以前做题没看到过的,可能会有新的知识点。
运行文件
貌似是一个输入数字计算平均值的程序。
ida打开
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 unsigned int m; // [esp+34h] [ebp-74h] char v13[100]; // [esp+38h] [ebp-70h] unsigned int v14; // [esp+9Ch] [ebp-Ch] v14 = __readgsdword(0x14u); setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); v9 = 0; puts("********************************************** ...
攻防世界高手进阶区——Recho
攻防世界高手进阶区——Recho
题目什么也没给。(在这个题困了好久,一直在学基础,但是发现了一个更好用的学习网站,基本 ROP - CTF Wiki (ctf-wiki.org))希望对你们有用,估计以后就转战ctfwiki了。先做完这个题吧。
做题经历1234567891011121314151617181920int __cdecl main(int argc, const char **argv, const char **envp){ char nptr[16]; // [rsp+0h] [rbp-40h] BYREF char buf[40]; // [rsp+10h] [rbp-30h] BYREF int v6; // [rsp+38h] [rbp-8h] int v7; // [rsp+3Ch] [rbp-4h] Init(); write(1, "Welcome to Recho server!\n", 0x19uLL); while ( read(0, nptr, 16uLL) > 0 ) / ...
攻防世界高手进阶区——dice_game
攻防世界高手进阶区——dice_game
题目里面啥都没有。
一.分析文件
checksec
只有栈溢出保护关闭了,其他都是开着的。
运行
可以看出是要猜数字,猜对50次。
ida逆向
1234567891011121314151617181920212223242526272829303132333435363738394041__int64 __fastcall main(int a1, char **a2, char **a3){ char buf[55]; // [rsp+0h] [rbp-50h] BYREF char v5; // [rsp+37h] [rbp-19h] ssize_t v6; // [rsp+38h] [rbp-18h] unsigned int seed[2]; // [rsp+40h] [rbp-10h] unsigned int v8; // [rsp+4Ch] [rbp-4h] memset(buf, 0, 0x30uLL); // 给buf赋值为0 *(_QWORD ...
攻防世界高手进阶区 ——实时数据检测
攻防世界高手进阶区 ——实时数据检测
1.分析文件
先checksec一下发现啥都没有开,完全就是裸奔。
运行一下运行发现就是想要把key的值改为0x2223322。
直接上ida
1234567891011int locker(){ char s[520]; // [esp+0h] [ebp-208h] BYREF fgets(s, 512, stdin); imagemagic(s); // 存在格式化字符串漏洞 if ( key == 0x2223322 ) return system("/bin/sh"); else return printf(format, &key, key);}
当key=0x2223322时,获得shell。
1234int __cdecl imagemagic(char *format){ return printf(format);}
跟进函数imagemagic发现存在格式化字 ...
攻防世界高手进阶区 ——反应釜开关控制
攻防世界高手进阶区 ——反应釜开关控制
题目没什么信息。
1.分析文件
运行一下,可能为栈溢出的题。
checkse
无栈溢出保护,无地址随机化,只有堆栈不可执行。
栈溢出可能性大。
ida64
12345678910111213int __cdecl main(int argc, const char **argv, const char **envp){ char s[64]; // [rsp+0h] [rbp-240h] BYREF char v5[512]; // [rsp+40h] [rbp-200h] BYREF write(1, "Please closing the reaction kettle\n", 0x23uLL); write(1, "The switch is:", 0xEuLL); sprintf(s, "%p\n", easy); write(1, s, 9uLL); write(1, ">", 2uLL); gets(v5); ...
攻防世界高手进阶区 ——Welpwn
攻防世界高手进阶区 ——Welpwn分析文件checksec分析1234567coke@ubuntu:~/桌面/CTFworkstation/OADW/welpwn$ checksec welpwn[*] '/home/coke/桌面/CTFworkstation/OADW/welpwn/welpwn' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)
文件开启了堆栈不可执行,常规了。
ida分析12345678910111213141516171819202122232425int __cdecl main(int argc, const char **argv, const char **envp){ char buf[1024]; // [rsp+0h] [rbp-400h] BYREF write(1, " ...
攻防世界高手进阶区 ——warmup
攻防世界高手进阶区 ——warmup题目并没有给附件,看样子像是一个盲打题。就是BROP
BROP原理BROP(Blind ROP) 于 2014 年由 Standford 的 Andrea Bittau 提出,其相关研究成果发表在 Oakland 2014,其论文题目是 Hacking Blind。
BROP 是没有对应应用程序的源代码或者二进制文件下,对程序进行攻击,劫持程序的执行流。
攻击条件
源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。
服务器端的进程在崩溃之后会重新启动,并且重新启动的进程的地址与先前的地址一样(这也就是说即使程序有 ASLR 保护,但是其只是在程序最初启动的时候有效果)。目前 nginx, MySQL, Apache, OpenSSH 等服务器应用都是符合这种特性的。
攻击原理目前,大部分应用都会开启 ASLR、NX、Canary 保护。这里我们分别讲解在 BROP 中如何绕过这些保护,以及如何进行攻击。
基本思路在 BROP 中,基本的遵循的思路如下
判断栈溢出长度
暴力枚举
Stack Reading
获取栈上的数据来泄露 canar ...
攻防世界高手进阶区 ——Mary_Morton
攻防世界高手进阶区 ——Mary_Morton
不容易呀,这都已经是第七题了,继续加油!
一,老规矩,先分析一下文件
checksec一下
发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的。
运行一下
告诉了存在栈溢出漏洞和格式化字符串漏洞。
file文件
1234┌──(root💀kali)-[/home/…/面/ctf_workstation/Offensive_and_defensive_world/Mary_Morton]└─# file Mary_Morton 127 ⨯Mary_Morton: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b7971b84c2 ...
攻防世界高手进阶区 ——forgot
攻防世界高手进阶区 ——forgot
看了半天,啥也没看懂,做出来了才发现啥也不是。
一,分析文件
checksec
还好,只开启了堆栈不可执行。
运行一下
翻译了一下,应该是判断邮箱是否合乎规矩。
直接ida
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081int __cdecl main(){ size_t v0; // ebx char v2[32]; // [esp+10h] [ebp-74h] BYREF _DWORD v3[10]; // [esp+30h] [ebp-54h] char s[32]; // [esp+58h] [ebp-2Ch] BYREF int v5; // [esp+78h] [ebp-Ch] size_t i; // [esp+7Ch] [ebp-8h] v5 = ...
攻防世界进阶区——greeting-150
攻防世界进阶区——greeting-150进阶区的格式化字符串漏洞,能做到这里的人肯定不差,我就不在重复写那些基础的东西了。
这里我尝试用了一下格式化字符串漏洞神器 FmtStr。
文件分析先用checksec来查一下12345678coke@ubuntu:~/桌面/CTFworkstation/PWN/OADW/gretting_150$ checksec greeting_150[*] '/home/coke/桌面/CTFworkstation/PWN/OADW/gretting_150/greeting_150' Arch: i386-32-little RELRO: No RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)
直接查出文件为32位文件,并且开启了栈溢出保护,和堆栈不可执行。
于是用32位ida打开12345678910111213int __cdecl main(int argc, const ...