只需在Linux中输入命令并在执行'/ bin/sh'后输入相同的命令之间有什么区别?

问题描述:

据我所知,/bin/sh是一个执行我键入的命令的shell。 但事情是,虽然我没有输入/bin/sh,但我可以输入任何我想要的命令。只需在Linux中输入命令并在执行'/ bin/sh'后输入相同的命令之间有什么区别?

我听说当一个黑客想要攻击某人时,他或她通常想要得到/bin/sh。具体来说,我已经听说/bin/sh与缓冲区溢出和远程shell一起提到,并且破解者可以利用由/ bin/sh执行的恶意代码(例如exec ("bin/sh", ~something, something);)来利用程序。

我很好奇他为什么试图“获得”/bin/sh或执行它。

我也不能肯定只是键入命令并执行/bin/sh后键入相同的命令,就像看到在这个终端之间的交互之间的区别:

[email protected] $ pwd 
/home/johndoe 
[email protected] $ /bin/sh 
sh-3.2 $ pwd 
/home/johndoe 
sh-3.2 $ whoami 
johndoe 
sh-3.2 $ 

虽然我不执行/bin/sh,我还是可以的键入我想输入的任何命令。那么为什么和什么时候饼干想要使用/bin/sh

+2

请注意'/ bin/sh pwd'又是完全不同的东西。 –

当您键入/ bin/sh时,您所做的只是将shell更改为/ bin/sh。如果你正在执行代码,它将没有任何区别。

+1

不同之处在于shell当前正在运行。他们支持稍微不同的事情,所以你可以用它们做些稍微不同的事情。例如'/ bin/sh'不支持进程替换,所以'cat

+0

当然,但在他的例子中,运行'whoami'和'pwd'这样的东西不会在执行上产生任何影响。它也不会在编译代码中产生任何影响。 **不使用'/ bin/sh'肯定有好处。即使你使用'/ bin/sh',如果你的shell脚本指定了一个使用'#!/ bin/bash'的语言,它仍然会使用bash。 –

+0

取决于你如何运行它,但是。是的,我的观点并不是你错了,而是增加了对答案的细微差别,因为它在某些方面确实有所不同。 –

当你登录时,你会得到一个shell。它可能是/bin/bash/bin/sh或(可悲地)/bin/csh,因此您可以在该shell中键入命令。如果你调用/bin/sh,你并没有太多收获:你只是得到一个新的shell。破解者想要执行的原因是它们最初可能不在shell中。他们可能正在运行一些应该限制其调用命令的能力的程序,因此获得巨大收益。坦率地说,破解者不在乎他们是否获得了/bin/sh/bin/bash甚至/bin/csh:关键是要获得一个根级别的shell,以便他们可以执行任意命令。如果他们能够让一个setuid程序产生一个shell,他们就会在这个盒子上获得根。 (也就是说,如果他们运行一个命令,如eject以root身份运行时,它们欺骗它们生成一个shell,它们获得的shell具有root权限。)

首先,关于在shell上执行命令,并在调用/bin/sh后执行它(基本上没有显着差异,但我会详细说明):

当您在本地计算机上打开终端时,会看到一个窗口和提示符。该窗口是一个终端程序,里面有已经壳运行。从你在问题中粘贴的shell交互中,它看起来像你的默认shell是/bin/bash

简单来说,只要你在shell中输入一个命令,它就会使用forkexec的组合来执行它。所以,当你键入/bin/sh时,你的shell只是以相同的方式执行它。即一个外壳执行另一个外壳。在该shell中,您执行更多命令。没有特别的不同。这是shell的另一个实例,它与前一个实例做的是一样的事情。

当你已经登录到计算机并坐在它打字时,外壳对你来说并不特别特别。毕竟它只是另一个程序。但这是一个程序,可以方便地执行其他程序。这就是你使用它的原因。但是这个属性让crackers感兴趣,因为他们想要在其他计算机上方便地执行程序。但是我们会谈到这一点。只要记住这个:一个shell是一个程序,可以方便地执行其他程序

现在到为什么饼干有兴趣越来越弹:

壳是不是可以调用exec(开始执行另一个程序)的唯一方案。任何程序都可以做到。当然,shell是最方便的方法。不幸的是,对于一个想成为黑客的人来说,计算机不会提供一个shell,除非他们有实际的访问权限。他们对计算机的唯一接口是通过该计算机运行的公共服务。例如一个提供页面的网页服务器确实从外部计算机获得输入并为它们产生输出。在这个过程中,网络服务器读取服务器上的文件,做一堆其他的东西,然后通过电线发送一些字节。它没有任何东西(或者即使是这样,攻击者也没有办法直接控制它的什么)。即当您看到他们的网页时,您不知道Google的网络服务器在内部执行了什么操作。您只需发送一个查询,然后在浏览器中查看结果。但是如果一个破解者以某种方式欺骗一个网络服务器到一个shell程序(比如说/bin/sh,或者它的任何亲戚)并且将输入传递给它,那么攻击者可以运行他们随后想要在该服务器上的任何程序。如果这个公开曝光的服务正在运行为root:甚至更好。这是攻击者有兴趣做的事情。因为这是一种朝着系统方便控制的方式。