我正在读一本关于黑客攻击内核的书,作者一直回到的一个领域是shell代码,许多内核黑客尝试试图找到一种执行shell代码的方法。 有人可以详细说明这个主题,特别是你能澄清“shell代码”。
shell代码如何绕过* NIX系统中的sudo或者不是windows机器中的Admin? 是否存在非操作系统特定的shell代码攻击示例?我认为必须针对特定的操作系统。
答案 0 :(得分:1)
基本上它正在寻找缓冲区溢出或类似技术,允许您将恶意代码插入以root身份运行的进程中。
例如,如果您使用固定大小的缓冲区并且超出该缓冲区,则基本上可以覆盖内存内容并使用它来执行恶意负载。
答案 1 :(得分:1)
一个可以回来咬你的简单shell代码片段是:
/bin/sh
或在C程序中:
system("/bin/sh");
如果您可以指示您的漏洞利用执行这样的代码行(例如,通过缓冲程序溢出来劫持程序的预期控制路径),您将获得具有受害者权限的shell提示,并且您已进入。
答案 2 :(得分:1)
Shell code是利用漏洞时使用的有效负载,该漏洞用于创建命令shell,攻击者可以从中控制该计算机。
运行时的典型shell代码可能会打开网络连接并在Windows计算机上生成cmd.exe
(或Linux / unix上的/bin/sh
)stdin
和stdout
网络连接。攻击者可以从他的机器上完成连接并输入命令并获得反馈,就像他坐在受感染的机器上一样。
缓冲区溢出不是shell代码。正是利用漏洞来执行shell代码。
利用缓冲区溢出将shell代码复制到用户的计算机并覆盖程序堆栈上的返回地址。当前正在执行的函数返回时,处理器跳转到上传的shell代码,该代码为攻击者创建shell。
有关利用缓冲区溢出的更多信息,请查看Smashing the Stack for Fun and Profit。
您可以尝试使用-fno-stack-protector
的{{1}}标志,但我对OSX或它可能使用的任何堆栈保护不是很熟悉。
如果你想玩缓冲区溢出,现代编译器和现代操作系统都有保护措施,这使得这很困难。你最好的选择是抓住自己的Linux发行版并关闭它们。 See this question了解有关禁用这些保护措施的更多信息。
请注意,执行shell代码不需要缓冲区溢出。我已经演示了使用命令注入漏洞打开远程shell来上传和执行批处理文件。
答案 3 :(得分:1)
基本上,当程序运行时,与其相关的所有内容(变量,指令等)都作为缓冲区存储在内存中。
内存本质上是RAM中的很多内容。
因此,出于我们示例的目的,我们假设存在一个变量Name
,它存储在位#1-10中。假设位11-30用于存储指令。很明显程序员希望Name
长10位。如果我给出一个20位长的名字,它的缓冲区会溢出到保存指令的区域。所以我要设计我的Name
的后10位,以便指令被顽皮的指令覆盖。
'innocentmeNAUGHTYCOD
'
那是一次攻击。
虽然并非所有实例都是如此明显,但几乎每一段代码都存在一些漏洞。这就是你如何利用它。