蒸米 栈溢出的x64位 level5 wp
=================
_libc_csu_init函数是程序调用libc库用来对程序进行初始化的函数,一般先于main函数执行
而我们则是要利用_libc_csu_init其中两端特殊的gadget
gadget 位于 0x400600 和 0x40061a地址
先借用0x40061a 处的gadget 将想要压入寄存器的参数压入
顺序依次 rbx rbp r12 r13 r14 r15 特别的rbx=0 rbp=1 r12=target_function
然后再调用 0x400600处的gadget将 r13 r14 r15 的值和rdx rsi edi交换
但是,这个通用gadget中还隐藏着两个常用的gadget
我们可以通过错位来得到它
通过 0x400621和0x400623获得了pop rsi _r15 和pop_rdi两个gadget
我们通过这两个gadget就可以很轻松的调用两个参数的函数了
构造payload如下
-------------------------------------------------------------------------------------