首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向返回的编程:为什么在ROP链中使用文字数?

面向返回的编程:为什么在ROP链中使用文字数?
EN

Stack Overflow用户
提问于 2013-11-03 04:25:19
回答 1查看 502关注 0票数 2

an article上介绍ROP之后,我发现作者在ROP链中放了一些文字数字。

生成外壳代码的代码片段如下:

代码语言:javascript
复制
rop += struct.pack('<L',0x10013b1c) # POP EBX # RETN
rop += struct.pack('<L',0xffffffff) # will be 0x1
rop += struct.pack('<L',0x100319d3) # INC EBX # FPATAN # RETN
rop += struct.pack('<L',0x100319d3) # INC EBX # FPATAN # RETN
                                    #------------------------------------[dwSize (0x1) -> EBX]-#
rop += struct.pack('<L',0x10030361) # POP EAX # RETN
rop += struct.pack('<L',0x90909090) # NOP
                                    #---------------------------------------------[NOP -> EAX]-#

根据我的理解,ROP链应该由指向小工具的内存地址组成,所以CPU将按顺序在相应的内存地址执行指令。然而,作者将0xffffffff0x90909090放在了小工具链中。

有人能解释一下这些文字数字在ROP链中的用法吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 16:55:20

  • 在这个ROP链中,作者需要ebx成为0x1。但是,此二进制文件中的堆栈条目是4个字节,因为这是一个32位二进制文件。要完成此条目,数字应为0x00000001,但写入空字节在漏洞利用中是不好的,因为strcpy等函数将在输入达到空字节时停止处理它。因此,作者将ebx的0xffffffff值弹出(使用前两行),然后通过1增加ebx上的值。它围绕着32位系统上的最大值,值变成了第二个文字数字0x90909090,这是一个NOP-sled0x90NO-oPeration,它什么也不做。这可能是一个nop-sled,以满足作者试图overflow.
  • You的缓冲区,也可以看到旁路ASLR的其他文字数字,包括覆盖动态链接的二进制文件的全局偏移表。在这种利用技术中,libc中的特定函数将位于距libc基址的特定偏移量处。您需要找到这个libc基址,并根据从libc获得的偏移量来计算这些函数的地址,并在您的漏洞利用中使用它们。阅读更多here.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19746497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档