[SWPUCTF 2021 新生赛]nc签到nc直接连接cat flag就行,没什么好说的,签到题目
[SWPUCTF 2021 新生赛]gift_pwn1234567checksec --file=1[*] '/mnt/hgfs/windowshare/1' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)
checksec检查文件保护,ida分析
12345int __fastcall main(int argc, const char **argv, const char **envp){ vuln(argc, argv, envp); return 0;}
发现vuln函数,跟进
123456ssize_t vuln(){ char buf[16]; // [rsp+0h] [rbp-10h] ...
Real login拿到附件直接丢ida
可以观察到题目给了system后门函数
点击main函数F5反编译成伪函数
再次点击进入func函数
观察到有if函数,进入之后发现有/bin/sh函数,可以拿到shell
返回按tab键,切换成汇编语言
找到密码,直接运行题目所给的ELF文件,输入给的密码NewStar!!!
get shell
ls
cat flag
game1234567891011121314151617181920212223void __noreturn game(){ int v0; // [rsp+0h] [rbp-10h] BYREF int v1; // [rsp+4h] [rbp-Ch] unsigned __int64 v2; // [rsp+8h] [rbp-8h] v2 = __readfsqword(0x28u); v1 = 0; v0 = 0; puts("Let's play a game!"); alarm(5u); while ( 1 ) { ...
首先,什么是栈? 堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素
我相信很多人第一次看到这段话都会觉得玄之又玄,栈是一种后入先出的数据结构,它与队列相反,队列是先入先出的数据结构,你可以把栈想象成一个杯子,先进入栈中的数据最后一个出栈,栈因此有了一个特性,只能在一端操作,也就是只能对栈顶操作
每次入栈的元素称为栈顶元素,而每次出栈的总是栈顶元素,所以栈是一种后入先出的线性表,在小端模式下,栈是由高地址向低地址生长,在大端模式下,栈的生长方向与其相反。一般来说,我们日常使用的计算机采取小端储存,我们默认栈底是高地址,栈顶是低地址
其次,栈有什么用? 栈用于储存函数调用的信息,包括参数,局部变量和返回地址。当一个函数被调用时,其相关信息会被压入栈中,函数执行完毕后 ...