何为延迟绑定

延迟绑定指的是在程序运行过程中将动态链接库中的符号与程序中的代码进行绑定的过程,这样做的目的可以减少程序启动时间以及避免因静态链接带来的内存和磁盘空间浪费问题

延迟绑定涉及到plt表和got表这两个概念,下文对此加以说明

阅读全文 »

何为沙箱

沙箱即限制程序只能调用指定函数来保证程序的安全性

何为orw

orw即open,read,write函数的缩写,一般情况下程序会限制只能调用这三个函数的其中几种

那么由于程序只允许我们调用这三个函数,那么我们无法通过系统调用execve来getshell,只能通过orw这三个函数来获取关键信息(即flag)

阅读全文 »

何为ret2csu?

ret2csu即通过栈溢出等方法构造ROP链劫持利用__libc_csu_init函数

这个函数长什么样

0

这是该函数全貌,不过我们主要利用0x400500x4005a4这两段,下文简称下面那部分为csu0,上面那部分为csu1

代码分析

csu0段代码主要进行的是将栈上的数据弹入到指定寄存器中(进行劫持利用时一般是直接从csu0段的第二行开始利用,即跳过``add rsp,8`)

csu1段则对弹入寄存器中的数据进行进一步处理

1
2
3
4
5
6
rbx --> 与r12一起控制跳转地址
rbp --> 与rbx一起作为是否循环条件
r12 --> 与rbx一起控制跳转地址
r13 --> rdx
r14 --> rsi
r15 --> edi(零扩展地赋值给rdi)

这里rbx一般赋值为0,rbp赋值1,避免进入循环.(如果需要借助csu来控制rbx的值,得注意r12与rbp的值)

适用情形

控制edi,rsi,rdx的参数

这三个寄存器在64位程序中储存的是函数调用时前三个参数

向bss段写入数据

前提得先泄露出libc的版本及基址

通过csu(0,1,read_addr,0,bss_addr,0,ret_addr)来向bss段写入数据

阅读全文 »

强制转换

0

这里由int转换为unsigned int时-1会转换为最大的无符号数,可以利用这个来规避掉一些字符数限制,也称作整数溢出

fflush的sh是system(sh)的sh😋

如果找不到/bin/sh字符串,何尝不试试fflush的“sh”?