rop
123
ROP
原理
在栈缓冲区溢出的基础上,利用程序中已有的小片段(gadgets)来改变某些寄存器或者变量的值,从而控制程序的执行流程
一般gadgets的指令时查找RIP寄存器
syscall
原理:(64位)
1 | syscall |
过程:1.首先找到/bin/sh,或者找到sh
2.溢出之后,pop rax rdi rsi rdx
3.找到syscall 的地址(这个要找syscall 后面又retn的)
如果没有/bin/sh的地址
4.先利用syscall 写入/bin/sh\x00
注:不能直接写在栈上,因为栈的位置是随机的
如何写入:
在DATA段写入数据
带align (对齐)的写入完全没有影响
调用read
1 | read(0 写入的地址 写入的长度) |
32位
1 | eax 0xb |
ROP-retsyscall
1 | ROPgadget --binary rop --only 'pop|ret' | grep 'eax' |
注意:这里找到的指令地址后面同样要带有ret
32位 read 是3
1 | payload=b'a'*32+p32(read_addr)+p32(pop_edx_ecx_ebx) |
ret2csu
原理
在汇编中会有这样的一段代码
可以通过这段调用寄存器,在ret的时候
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 鱼非愚!
评论