【问题标题】:Stack Overflow (Shellcoder's Handbook)堆栈溢出(Shellcoder 手册)
【发布时间】:2015-09-26 05:15:15
【问题描述】:

我目前正在关注Shellcoder's Handbook (2nd edition) 的勘误表。 这本书有点过时了,但还不错。我现在的问题是我无法猜测我的有效负载需要多长时间我试图遵循每一步(并使用相同的参数运行 gdb)并且我试图猜测缓冲区从哪里开始,但我不知道确切.我对此也很陌生,所以这很有意义。

我有一个带有strcpy()buffer[512] 的易受攻击的程序。我想让堆栈溢出,所以我用程序运行了一些 A(作为 Shellcoders 手册的勘误表)。我想知道有效载荷需要多长时间(没有 ASLR)所以理论上我只需要找到缓冲区的位置。

由于我是新手,我无法发布图片,但本书的首选输出有完整的 4 行“A”(0x41414141),而我的输出是这样的:

(gdb) x/20xw $esp - 532         
0xbffff968 : 0x0000000  0xbfffffa0e 0x41414141 0x41414141
0xbffff968   0x41414141 0x41414141  0x00004141 0x0804834

那是什么地址?我怎么知道这个缓冲区从哪里开始?我想这样做,以便我可以继续使用这本书。我意识到缓冲区在那里的某个地方是因为我运行的 A。但是如果我想知道有效载荷需要多长时间,我需要它开始的点。

【问题讨论】:

  • 您可以将图片上传到 imgur 并在这里分享。

标签: security gdb stack overflow shellcode


【解决方案1】:

我不确定您是否正确复制了 gdb 的输出。您使用了命令x/20xw,这表示您要检查内存中的 20 个 32 位字,显示为十六进制。因此,显示的每项数据应由0x 后跟8 个字符组成。有的只有 7 个,有的只有 9 个。我假设您是手工抄写的文本并犯了一些错误。

地址是行上显示的第一项,因此,第一行的地址是0xbffff968,这是行上第一个字节的地址。从那里你可以通过计数来计算行上每个其他字节的地址。

你的第二行看起来有点乱,你有相同的地址,而且你错过了: 字符,我再次假设这只是复制的结果。我希望第二行的地址是0xbffff978

如果缓冲区以0x41414141 的第一个字开头,那么它的地址是0xbffff970,虽然找出变量地址的更简单方法是向gdb 询问变量的地址,所以,在您的情况下,一旦 gdb 在buffer 范围内的地方停止:

(gdb) p &buffer
$1 = (char (*)[512]) 0xbffff970

【讨论】:

    【解决方案2】:

    Metasploit 有一个很好的工具来帮助计算偏移量。它将生成一个包含唯一模式的字符串。使用此模式(以及 EIP 的值或使用该模式后的任何其他位置),您可以看到缓冲区应该有多大才能准确写入 EIP 或任何其他位置。

    打开 metasploit framework3 文件夹中的 tools 文件夹(我使用的是 metasploit 3 的 linux 版本)。您应该找到一个名为 pattern_create.rb 的工具。创建一个 5000 个字符的模式并将其写入文件:

    root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb
    Usage: pattern_create.rb length [set a] [set b] [set c]
    root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb 5000 
    

    然后只需将 A 替换为工具的输出即可。 运行应用程序并等到应用程序再次死亡,并记下 EIP 或任何其他位置的内容。 然后使用第二个 metasploit 工具在写入 EIP 或任何其他位置之前计算缓冲区的确切长度,将 EIP 的值或任何其他位置(基于模式文件)和缓冲区的长度提供给它:

    root@bt:/pentest/exploits/framework3/tools# ./pattern_offset.rb 0x356b4234 5000
    1094
    root@bt:/pentest/exploits/framework3/tools#
    
    1. 这是覆盖 EIP 或任何其他位置所需的缓冲区长度。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 2019-05-18
      • 2018-10-03
      • 2020-11-01
      • 1970-01-01
      • 2012-04-15
      • 2012-12-20
      • 2011-03-02
      相关资源
      最近更新 更多