【问题标题】:how to deal with 3-byte addresses in shellcode如何处理 shellcode 中的 3 字节地址
【发布时间】:2013-10-09 16:47:57
【问题描述】:

我正在按照本教程中的说明进行操作:

http://technicalanarchy.blogspot.com/2013/06/stack-based-buffer-overflow-tutorial_20.html

当我进入“p系统”时

部分,我可以得到一个地址,但它是一个 3 字节的地址 0xffffff。本教程显示 4 字节地址,生成的 shellcode 需要 4 字节。

现在我已将 \x90 nop 代码添加到我的 shellcode 中那个 3 字节地址的末尾和开头,但都没有帮助。

操作系统是 32 位 Centos 6ish

【问题讨论】:

  • 3 字节地址将是您在 24 位系统上看到的。你真的有24位系统吗?您声称拥有 32 位系统。
  • @DavidHeffernan,3 字节地址不是有效的 4 字节地址吗?
  • @CarlNorum 0x00 是什么?那是零字节地址吗?或者一个字节的地址。我可能试图让提问者意识到他的系统没有 3 字节地址,并且所有地址都是 4 字节地址。

标签: c assembly


【解决方案1】:

你可以使用你得到的地址。如果您找到了0x123456,请使用\x00\x12\x34\x56

【讨论】:

  • 和大家,感谢您的回复。我只是不明白为什么系统会用 3 个字节来表示一个 4 字节的地址。但无论如何,大卫和丹的建议。我在开头(如上所示)和结尾都添加了 \x00(只是为了它)。没有上班族。这是实际地址:0x16c1d0,即“系统”。 “0xbffff918”用于“/bin/bash”。 Shellcode 为 \x00\xd0\xc1\x16\TEST\x18\xf9\xff\xbf。我在 0x5416c1d0 处收到段错误。没有作者建议的 bash 提示。想法?
  • 我忘记了字节序,对此感到抱歉。根据段错误地址,它有一个额外的0x54(ASCII T),我认为你的shellcode应该是\xd0\xc1\x16\x00TEST\x18\xf9\xff\xbf。如果这不起作用,您可能需要将 strcpystrcat 替换为 memcpy - 尽管请注意,显然,如果您依赖于由于 strcpy 而导致的缓冲区溢出,并且你的有效载荷中有一个 ASCII NUL(而不是最后),无论你怎么做都会遇到问题。
  • 这就是我所担心的。我确实尝试过这种技术,但不行,但我会尝试用 memcpy 重新编译。这是个好主意,谢谢!
  • @user1197457 你真的认为你有一台 24 位机器吗?
  • @DavidHeffernan 不,我不这么认为。我认为这是一台32位机器。这就是为什么我不明白为什么我要查看 24 位地址。如果您愿意指出正确的答案,我将不胜感激。否则知道不,我认为我没有 24 位机器。
猜你喜欢
  • 1970-01-01
  • 2021-04-21
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多