本文章主要是谈谈我做这几个小实验的一些做法和看法,重在操作。在小编做这个实验的时候发现很多人都用了hunt工具,但我一直没安装成功,安装成功后也监控不了(如果有人可以编译它的源码就可能可以用这个工具了),所以我直接通过抓包,然后构造包来完成命令注入。
(1)使用Netwox命令行工具构造任意TCP, UDP, IP数据包。
(2)用SYN flood攻击靶机的ftp服务。
(3)伪造一个A到B的RST数据包来终端他们之间的连接。
(4)利用TCP会话劫持攻击在Telnet会话中注入恶意的命令,以此在Victim主机执行恶意的指定。
(1)使用Netwox命令行工具构造任意TCP, UDP, IP数据包。
netwox在kali中是默认就有的一个工具,它还有很多的渗透工具可以使用,推荐可以下载使用一下。
下载完执行命令:
netwox
它进入一个菜单界面,选择命令
e
类似这样就可以知道如何构造报文。慢慢摸索一下就可以知道
可以知道TCP,IP,ICMP,UDP的模块端口号分别为:40,38,41,39。根据这个端口执行相应的命令可以构造对于的报文。如输入命令:
netwox 40
总结一下:
如果大家都构造了这四个报文就可以发现,TCP的报文是最长的(主要是TCP提供可靠的传输协议),TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答等机制实现可靠传输。UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
仔细看UDP 和TCP的头部,可以发现它们其实就是IP。因为IP本来在TCP/IP协议中位于UPD,TCP的下层,如下图所示:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
(2)用SYN flood攻击靶机的ftp服务。
首先我们在win10中调出一个cmd来玩一下,
分别输入:
ftp
open 192.168.182.135
然后输入用户名,密码。
原理:
YN-Flooding是DoS攻击的一种,攻击者向受害者的TCP端口发送很多SYN请求,但攻击者没有完成三次握手过程。
攻击者要么使用欺骗性的假的IP地址,要么不要继续完成整个三次握手过程。
通过这种攻击,攻击者可以淹没用于半连接的受害者队列,即已完成SYN,SYN-ACK但尚未得到最终ACK的连接。
当这个队列已满时,受害者不能再进行任何连接。
SYN Cookie防御机制
如果你的攻击看起来不成功,你可以检查是否启用了SYN cookie机制。SYN cookie是抵抗SYN-Flooding的防御机制。
简单介绍:
在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,
不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。
在收到TCP ACK包时,TCP服务器在根据那个cookie值
检查这个TCP ACK包的合法性。
如果合法,再分配专门的数据区进行处理未来的TCP连接。
使用sysctl命令打开/关闭SYN cookie机制:
#sysctl -a | grep cookie(显示SYN cookie标志)
#sysctl -w net.ipv4.tcp_syncookies = 0(关闭SYN cookie)
#sysctl -w net.ipv4.tcp_syncookies = 1(打开SYN cookie)
FTP客户端地址:192.168.182.1
攻击者:kali
注意:FTP(文件传输)协议代理服务器常用端口号是21。
输入命令:
netwox 76 -i 192.168.182.135 -p 21
再去连接时:
原因:
阻塞前连接状态:
阻塞后连接状态:
有大量处于半连接的状态。
总结:
根据实验结果可以知道,攻击者是通过阻塞了靶机的队列使得服务器不能对其他的请求响应,所以我们可以不要关闭SYN Cookie防御机制即可防御这种攻击。
(3)伪造一个A到B的RST数据包来终端他们之间的连接。
老规矩在win10中打开个cmd连接一下telnet:
telnet 192.168.182.135
Telnet服务器地址:192.168.182.135
Telnet客户端地址:192.168.182.1
攻击者:kali
输入命令:
netwox 78 -i 192.168.182.135
原理:
客户端和服务器之间建立了TCP连接,此时kali伪造了一个TCP包发给服务器,使服务器异常的断开了与客户端之间的TCP连接,就是RST攻击了。
wireshark查看验证:
tcp.port == 23
方式:
假如kali伪装成客户端发过去的包
1、这个包如果是RST包的话,毫无疑问,服务器将会丢弃与客户端的缓冲区上所有数据,强制关掉连接。
2、如果发过去的包是SYN包,那么,会表示客户端已经发疯了(与OS的实现有关),正常连接时又来建新连接,这时服务器主动向客户端发个RST包,并强制关掉连接。
如何构造这个TCP呢?
TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。
序列号问题是与滑动窗口对应的,伪造的TCP包里需要填序列号,如果序列号的值不在客户端之前向服务器发送时服务器的滑动窗口内,服务器是会主动丢弃的。所以我们要找到能落到当时的客户端和服务器间滑动窗口的序列号。这个可以暴力解决,因为一个sequence长度是32位,取值范围0-4294967296,如果窗口大小像上图中我抓到的windows下的65535的话,只需要相除,就知道最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。
其实队列号不是问题关键主要还是源端口。
总结:
通过实践可知,要防范这样的攻击。可以考虑用SSH加密协议,还有想办法不要让自己的源端口暴露。
(4)利用TCP会话劫持攻击在Telnet会话中注入恶意的命令,以此在Victim主机执行恶意的指定。
1、简介
TCP会话劫持攻击的目标是通过向该会话中注入恶意内容来劫持两名受害者之间的现有TCP连接(会话)。
2、原理:
广义上说,会话劫持就是在一次正常的通信过程中,攻击者作为第三方参与到其中,或者是在数据里加入其他信息,甚至将双方的通信模式暗中改变,即从直接联系变成有攻击者参与的联系。简单地说,就是攻击者把自己插入到受害者和目标机器之间,并设法让受害者和目标机器之间的数据通道变为受害者和目标机器之间存在一个看起来像“中转站”的代理机器(攻击者的机器)的数据通道,从而干涉两台机器之间的数据传输。
这种攻击主要是利用TCP连接发送数据时,故意伪造服务器(客户端)发送下一个TCP报文给客户端(服务器),所以要用wireshark工具监控它们的数据报文发送情况,根据这些报文构造出一个新的TCP报文由kali冒充其中一方发给另一方,另一方收到伪造的TCP报文后做出相应的动作。
由于 TCP 协议并没有对 TCP 的传输包进行身份验证,所以在我们知道一个 TCP 连接中的“四元组”和 seq , ack 的信息后就可以很容易的伪造传输包。
3、过程
Telnet服务器地址:192.168.182.135
Telnet客户端地址:192.168.182.1
攻击者地址:kali
首先建立telnet连接
telnet 192.168.182.135
ll
在wireshark中抓到的包,过滤:
ip.src eq 192.168.182.135 or ip.dst eq 192.168.182.135 and telnet
此时,我到服务器中创建一个文本名叫test
找到最后一个报文,查看它的“四元组”和seq , ack根据它的信息
构造出下一个报文
netwox 40 --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.182.1 --ip4-dst 192.168.182.135 --tcp-src 61464 --tcp-dst 23 --tcp-seqnum 2670357945 --tcp-acknum 702153641 --tcp-ack --tcp-psh --tcp-window 4102 --tcp-data "726d202d726620746573740d00"
在kali输入上述命令脚本。
说明成功的注入命令了。
写到这里送你一个字符串转为16进制代码
import java.util.Scanner;
public class StringToHex {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(strTo16(str));
}
public static String strTo16(String s) {
StringBuilder st = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
String s4 = Integer.toHexString(ch);
st.append(s4);
}
return st.append("0d00").toString(); //0d00是执行\r
}
}
总结:
TCP会话劫持攻击方式的好处在于使攻击者避开了被攻击主机对访问者的身份验证和安全认证,从而使攻击者直接进入对被攻击主机的的访问状态,因此对系统安全构成的威胁比较严重。
处理会话劫持问题有两种机制:预防和检测。预防措施包括限制入网的连接和设置你的网络拒绝假冒本地地址从互联网上发来的数据包。
SSH加密,或者通过使用IDS或者IPS系统能够改善检测等。