0%

学习与收获

  1. ida中,交叉引用X,对函数进行重命名N

  2. 程序最开始执行的是start函数,start调用__libc_start_main函数,然后程序执行__libc_csu_init函数,接着才执行main函数,最后执行__libc_csu_fini函数。__libc_start_main的函数原型是__libc_start_main(main,argc,ubp_av,init,fini,rtld_fini)

    阅读全文 »

学习与收获

  1. 当栈溢出的字节数不能满足我们构造完整的rop链时,除了栈迁移我们还可以先构造一个readrop链,让程序再read一次,然后再写入rop链覆盖我们调用read时自己写的返回地址,以控制执行流执行rop链。

    阅读全文 »

前言

为什么要栈迁移?

​ 我的理解是由于输入字节的限制,我们没有办法在覆盖返回地址后继续写入我们构造的后门代码让程序执行。那现在怎么办呢,幸好我们有leave ; ret这两个指令(leave指令相当于mov esp,ebp ; pop ebp这两条指令,而执行ret指令就是pop eipeip是一个指令指针,装的是下一条指令的地址),执行两次leave ; ret指令可以控制程序的执行流到ebp指向内存单元,即我们构造的用于拿到shell的代码地址。

阅读全文 »