何为延迟绑定
延迟绑定指的是在程序运行过程中将动态链接库中的符号与程序中的代码进行绑定的过程,这样做的目的可以减少程序启动时间以及避免因静态链接带来的内存和磁盘空间浪费问题
延迟绑定涉及到plt表和got表这两个概念,下文对此加以说明
ret2csu即通过栈溢出等方法构造ROP链劫持利用__libc_csu_init
函数
这是该函数全貌,不过我们主要利用0x40050
到0x4005a4
这两段,下文简称下面那部分为csu0
,上面那部分为csu1
csu0
段代码主要进行的是将栈上的数据弹入到指定寄存器中(进行劫持利用时一般是直接从csu0段的第二行开始利用,即跳过``add rsp,8`)
而csu1
段则对弹入寄存器中的数据进行进一步处理
1 | rbx --> 与r12一起控制跳转地址 |
这里rbx一般赋值为0,rbp赋值1,避免进入循环.(如果需要借助csu来控制rbx的值,得注意r12与rbp的值)
这三个寄存器在64位程序中储存的是函数调用时前三个参数
前提得先泄露出libc的版本及基址
通过csu(0,1,read_addr,0,bss_addr,0,ret_addr)来向bss段写入数据