CTF wiki 栈基础部分学习总结

基本rop:

ret2rext:

利用程序中已有的代码段。

main函数后一般跟都有leave ret;

leave-> mov esp ebp;pop ebp;

函数返回值会保存在rax中;

32位程序传参是通过栈进行传参的,call一个函数的时候,此时esp所指向的位置是第一个参数,esp+4的位置是第二个参数,依次类推后跟下次函数的返回地址。

and 指令 :相同为1,不同为0。

ret2shellcode:

一般这种题目都会有rwx段,我们可以在该段内写入shellcode,然后返回相关内存段就可以了。

ret2syscall:

通过相关寄存器 rax,rbx,rcx,等等来进行系统调用,比如execve("/bin/sh",NULL,NULL),此时就需要控制rax = 0xb rbx = [/bin/sh] 地址

rcx = 0,rdx = 0。然后int 80 或者 syscall 就可以 ,需要注意的是 64位程序传参为寄存器传参 rdi,rsi,rdx,rcx,r8,r9,然后才是栈传参。

ret2libc:

这个就比较简单了,如果前面的掌握了,那么这里看wiki就可以解决了。uu

中级rop:

ret csu:

这种手法就是在我们做题目的时候,如果用ROPgadget工具找不到控制相关寄存器的代码,那么就可以利用程序初始化的时候相关的代码。这里感觉还是自己背下来这段比较好:

.text:0000000000400600 loc_400600:                             ; CODE XREF: __libc_csu_init+54•j
.text:0000000000400600                 mov     rdx, r13
.text:0000000000400603                 mov     rsi, r14
.text:0000000000400606                 mov     edi, r15d
.text:0000000000400609                 call    qword ptr [r12+rbx*8]
.text:000000000040060D                 add     rbx, 1
.text:0000000000400611                 cmp     rbx, rbp
.text:0000000000400614                 jnz     short loc_400600
.text:0000000000400616
.text:0000000000400616 loc_400616:                             ; CODE XREF: __libc_csu_init+34•j
.text:0000000000400616                 add     rsp, 8
.text:000000000040061A                 pop     rbx
.text:000000000040061B                 pop     rbp
.text:000000000040061C                 pop     r12
.text:000000000040061E                 pop     r13
.text:0000000000400620                 pop     r14
.text:0000000000400622                 pop     r15
.text:0000000000400624                 retn
.text:0000000000400624 __libc_csu_init endp

ret2reg:

这种攻击手法主要是利用程序中的gadget,比如call register,jmp register等指令,我们可以通过控制相关寄存器中为我们想要的地址,然后执行call register,jmp register,来执行我们想执行的代码。

brop:

这里是盲打pwn,感觉需要慢慢积累。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值