网络安全-TCP-IP攻击

网络安全-TCP-IP攻击,第1张

概述

1 SYN-Flooding攻击效果,受害者系统卡死

2 TCP-RST攻击实现已经建立的TCP连接断开

3 TCP会话劫持,劫持TCP会话,并实现反向Shell

实验环境

1 三台Linux系统主机,一台作为攻击者,一台作为受害者,一台作为观察者

2 为了简化TCP序列号和源端口号的“猜测”,实验处于同一局域网内,你可以使用嗅探器来获取受害者信息

SYN-Flooding攻击

1 SYN-Flooding攻击原理

SYN-Flooding是DoS攻击的一种,攻击者向受害者的TCP端口发送很多SYN请求,但攻击者无意完成三次握手过程

攻击者要么使用欺骗性的假的IP地址,要么不要继续完成整个三次握手过程

通过这种攻击,攻击者可以淹没用于半连接的受害者队列,即已完成SYN,SYN-ACK但尚未得到最终ACK的连接

当这个队列已满时,受害者不能再进行任何连接

正常三次握手过程:

在Linux中,我们可以使用以下命令检查

我们可以使用命令“netstat -na”来检查队列的使用情况,即与监听端口相关联的半连接的数量

这种半连接的状态是SYN-RECV。如果三次握手完成,则连接的状态将为ESTABLISHED

在这个任务中,你需要演示SYN-Flooding攻击:

您可以使用Netwox来执行攻击,然后使用嗅探器捕获攻击性数据包

在攻击发生时,在受害机器上运行“netstat -na”命令,并将结果与攻击前的结果进行比较

2 Netwox 76简介

3 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机制:

4 实验结果分析

比较 netstat -na 前后状态如下:

产生大量的TCP半连接,阻塞了队列,导致后续正常TCP连接无法建立!!

TCP-RST攻击

1 FTP协议

2 TELNET协议

3 SSH协议

4 Newox 78简介

5 实验结果分析

- FTP

FTP服务器地址: 19216859146/24

FTP客户端地址: 19216859144/24

攻击者地址: 192168591/24

攻击者终端对受害者进行TCP-RST打击:

结果显示:已经建立的TCP连接断开

Telnet服务器地址: 19216859146/24

Telnet客户端地址: 19216859144/24

攻击者地址: 192168591/24

攻击者终端对受害者进行TCP-RST打击:

结果显示:已经建立的TCP连接断开

SSH服务器地址: 19216859146/24

SSH客户端地址: 19216859144/24

攻击者地址: 192168591/24

攻击者终端对受害者进行TCP-RST打击:

结果显示:已经建立的TCP连接断开

TCP会话劫持

1 会话劫持简介

TCP会话劫持攻击的目标是通过向该会话中注入恶意内容来劫持两名受害者之间的现有TCP连接(会话)

如果这个连接是一个telnet会话,攻击者可以在这个会话中注入恶意命令(例如删除重要文件),导致受害者执行恶意命令

2 Wireshark简介

如果您使用Wireshark观察网络流量,当Wireshark显示TCP序列号时,

默认情况下会显示相对序列号,它等于实际序列号减去初始序列号

如果想查看包中的实际序列号,则需要右键单击Wireshark输出的TCP部分,

然后选择"Protocol Preference" 在d出窗口中,取消选"Relative Sequence Number"选项

3 Netwox 40简介

4 实验结果分析

Telnet服务器地址: 19216859148/24

Telnet客户端地址: 19216859146/24

攻击者地址: 192168591/24

攻击者终端对受害者进行TCP会话劫持:

我们要伪造发下一个包:

所以直接采用nextseq作为下一个包的ack,采用ack作为下一个包的seq

最后一个Telnet数据包内容如下:

我们伪造向服务器 19216859148 发送 ls 命令,

通过netwox构造我们的攻击指令如下:

在wireshark上显示抓包数据如下:

来创建我们的肉鸡~

现在我们来通过NC反d一个Shell,来控制我们受害者:

首先是构造NC命令:

实验结果如图:

首先看结果:我们成功拿到了服务器上的用户gu的所有权限!

咱们再来看看抓包数据,通过抓包数据,你可以看到最后一条Telnet的TCP数据,通过这些数据,就可以很方便通过Netwox构造攻击语句了!!

unix的哲学是一切皆文件,可以把socket看成是一种特殊的文件,而一些socket函数就是对其进行的 *** 作api(读/写IO、打开、关闭)。我们知道普通文件的打开 *** 作(open)返回一个文件描述字,与之类似,socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。

当我们调用socket创建一个socket时,返回的socket描述字它存在于协议族(address family,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,

 sockfd即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。
    在将一个地址绑定到socket的时候,需要先将主机字节序转换成为网络字节序,而不要假定主机字节序跟网络字节序一样使用的是Big-Endian。由于这个问题曾引发过不少血案,谨记对主机字节序不要做任何假定,务必将其转化为网络字节序再赋给socket。
    这里的主机字节序就是我们平常说的大端和小端模式:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。引用标准的Big-Endian和Little-Endian的定义如下:

   listen函数的第一个参数即为要监听的socket描述字,第二个参数为socket可以接受的排队的最大连接个数。listen函数表示等待客户的连接请求。

  connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用connect函数来建立与TCP服务器的连接。

 TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数去接收请求,这样连接就建立好了(在connect之后就建立好了三次连接),之后就可以开始进行类似于普通文件的网络I/O *** 作了。

 如果accpet成功,那么其返回值是由内核自动生成的一个全新的描述字,代表与客户的TCP连接。
 accept的第一个参数为服务器的socket描述字,是服务器开始调用socket()函数生成的,称为监听socket描述字;而accept函数返回的是已连接的socket描述字。一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。

 read函数是负责从fd中读取内容当读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。如果错误为EINTR说明读是由中断引起的,如果是ECONNREST表示网络连接出了问题。

 write函数将buf中的nbytes字节内容写入文件描述符fd成功时返回写的字节数。失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误

 在服务器与客户端建立连接之后,会进行一些读写 *** 作,完成了读写 *** 作就要关闭相应的socket描述字,类似于 *** 作完打开的文件要调用fclose关闭打开的文件。

 close一个TCP socket的缺省行为时把该socket标记为已关闭,然后立即返回到调用进程。该描述字不能再由调用进程使用,也就是说不能再作为read或write的第一个参数

 close *** 作只是使相应socket描述字的引用计数-1,只有当引用计数为0的时候,才会触发TCP客户端向服务器发送终止连接请求。

 我们知道tcp建立连接要进行“三次握手”,即交换三个分组。大致流程如下:

客户端向服务器发送一个SYN J

服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1

客户端再想服务器发一个确认ACK K+1

socket中TCP的四次握手释放连接详解

 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。一段时间之后,服务端调用close关闭它的socket。这导致它的TCP也发送一个FIN N;接收到这个FIN的源发送端TCP对它进行确认,这样每个方向上都有一个FIN和ACK。

为什么要三次握手

由于tcp连接是全双工的,存在着双向的读写通道,每个方向都必须单独进行关闭。当一方完成它的数据发送任务后就可以发送一个FIN来终止这个方向的连接。收到FIN只意味着这个方向上没有数据流动,但并不表示在另一个方向上没有读写,所以要双向的读写关闭需要四次握手,

    3 time_wait状态如何避免?

首先服务器可以设置SO_REUSEADDR套接字选项来通知内核,如果端口忙,但TCP连接位于TIME_WAIT状态时可以重用端口。在一个非常有用的场景就是,如果你的服务器程序停止后想立即重启,而新的套接字依旧希望使用同一端口,此时SO_REUSEADDR选项就可以避免TIME_WAIT状态。

1客户端连接服务器的80服务,这时客户端会启用一个本地的端口访问服务器的80,访问完成后关闭此连接,立刻再次访问服务器的
80,这时客户端会启用另一个本地的端口,而不是刚才使用的那个本地端口。原因就是刚才的那个连接还处于TIME_WAIT状态。

2客户端连接服务器的80服务,这时服务器关闭80端口,立即再次重启80端口的服务,这时可能不会成功启动,原因也是服务器的连
接还处于TIME_WAIT状态。
实战分析:

状态描述:

CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉</pre>

命令解释:

如何尽量处理TIMEWAIT过多

编辑内核文件/etc/sysctlconf,加入以下内容:
netipv4tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
netipv4tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
netipv4tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
netipv4tcp_fin_timeout 修改系默认的 TIMEOUT 时间</pre>

然后执行 /sbin/sysctl -p 让参数生效
/etc/sysctlconf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。

简单来说,就是打开系统的TIMEWAIT重用和快速回收。

  本文主要讲述了socket的主要api,以及tcp的连接过程和其中各个阶段的连接状态,理解这些是更深入了解tcp的基础!

因为你手机创建的TCP服务器地址通常都是127001,这个IP地址是用作本地调试用的。不会被路由器转发,外部设备是无法找到这个地址的,另外,就算你用路由器上网,也无法创建一个可供其他设备连接的TCP服务器,道理是一样的,路由器分配给你的IP通常是192开头的,这也是私有IP,无法在公网上寻址的!除非你手机的上网方式是公网IP,否者手机是不可能建立TCP服务器的!

分类: 电脑/网络 >> 互联网
问题描述:

弄了半天就是上不去

详细信息显示:

网络设置局域网内使用透明代理

登录过程
---------------------------------------------------------------------------

开始登录时间[2006-11-10 22:23:07]

初始化登录服务器列表,上次的登录方式为初始登录方式

尝试UDP方式登录,先创建UDP网络组件

创建UDP网络组件成功,本地IP1921681101,端口4000,准备连接登录服务器

UDP登录服务器sztencent需要域名解析

UDP登录服务器sztencent域名解析成功,解析为21913349171

UDP服务器域名解析过程完成,开始连接服务器

尝试连接UDP服务器IP21913349171,端口8000

尝试连接UDP登录服务器超时,转尝试连接下一组服务器

UDP登录服务器全部尝试连接失败,尝试下一种登录方式

尝试TCP方式登录,准备连接TCP服务器IPtcpconn6tencent,端口80,先进行域名解析

TCP登录服务器tcpconn6tencent域名解析成功,解析为21913360173,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconn6tencent,端口80

确定登录TCP服务器IPtcpconn6tencent,端口80

向登录服务器发送新登录第一步骤数据

尝试TCP方式登录,准备连接TCP服务器IPtcpconn2tencent,端口80,先进行域名解析

TCP登录服务器tcpconn2tencent域名解析成功,解析为21913338230,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconn2tencent,端口80

确定登录TCP服务器IPtcpconn2tencent,端口80

向登录服务器发送新登录第一步骤数据

尝试TCP方式登录,准备连接TCP服务器IPtcpconn3tencent,端口80,先进行域名解析

TCP登录服务器tcpconn3tencent域名解析成功,解析为219133385,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconn3tencent,端口80

确定登录TCP服务器IPtcpconn3tencent,端口80

向登录服务器发送新登录第一步骤数据

尝试TCP方式登录,准备连接TCP服务器IPtcpconn5tencent,端口80,先进行域名解析

TCP登录服务器tcpconn5tencent域名解析成功,解析为21913349211,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconn5tencent,端口80

确定登录TCP服务器IPtcpconn5tencent,端口80

向登录服务器发送新登录第一步骤数据

尝试TCP方式登录,准备连接TCP服务器IPtcpconn4tencent,端口80,先进行域名解析

TCP登录服务器tcpconn4tencent域名解析成功,解析为58601445,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconn4tencent,端口80

确定登录TCP服务器IPtcpconn4tencent,端口80

向登录服务器发送新登录第一步骤数据

尝试TCP方式登录,准备连接TCP服务器IPtcpconntencent,端口80,先进行域名解析

TCP登录服务器tcpconntencent域名解析成功,解析为21913348103,准备连接该服务器

连接TCP登录服务器成功,服务器IPtcpconntencent,端口80

确定登录TCP服务器IPtcpconntencent,端口80

向登录服务器发送新登录第一步骤数据

TCP登录服务器全部尝试失败

最终登录失败,时间:2006-11-10 22:23:50

请高手帮忙!!!

解析:

服务器超时。

就是你的机器与服务器连接时。为了保障多人同时登陆服务器而不使服务器资源用尽。这时服务器就会对准备登陆服务器的计算机进行测试,如果在一定时间里不能正常登陆,那么服务器就会自动断开与这台计算机的连接。导致‘服务器超时’消息的发生。

服务器超时的QQ登录方法

QQ 服务器太忙无法登录或者超时 这里有灵验的登录方法 包你登陆上QQ

'DC(uN0i'%l 相信大家或多或少都有过这样的体验,在上网高峰时段登录QQ时,小企鹅在屏幕上徒劳地闪动半天之后,d出来的却是服务器太忙无法登录或者超时的提示框,接连试几次都是这样的,真的有点烦人。别着急,用下面的方法一定能让你顺利登录上去的。

1DM&Y4\C 先说第一种方法。如果你使用的是默认登录面板登录的话,那么你可以改用“注册向导”试试,一般情况下都能成功。还不管用的话,就得使用更绝的第二种方法了——打开多个QQ窗口来同时登录同一个号码。我遇到上述情况就会同时打开三个窗口,这里面肯定会有一个能登录上去的,百试不爽。不过也有一种情况是例外的,那就是:网络断线的时候:)。

如果你用Realpalyer看在线影片的时候超时 应该是你掉线了

重新拨号或者重新启动都可以

查了下,错误发生在accept_function()函数中:
/ We have to set the callback here even though
the new socket is unknown conn->socket is marked as -1 /
newconn = netconn_alloc(conn->type, conn->callback);
if (newconn == NULL) {
return ERR_MEM;
}
这里返回的 ERR_MEM 导致后面的问题,也就是内存分配出问题了。
到 netconn_alloc() 函数中发现 MEMP_NETCONN 好像没有定义。。。

原因有以下几点:
网络故障。
防火墙阻挡。关闭防火墙或设置允许QQ软件通行。真的不行把QQ重装了
DCOM服务被禁用或存在问题。启用DCOM服务
关于115713的另一个问题不在QQ软件本身的问题,建议你用反P2P软件杀掉终结者,或者重启动计算机就可以解决了,要是这样不行也不排除QQ软件在系统中的本身问题。
QQ是腾讯QQ的简称,是腾讯公司开发的一款基于Internet的即时通信(IM)软件。目前QQ已经覆盖MicrosoftWindows、OSX、Android、iOS、WindowsPhone等多种主流平台。其标志是一只戴着红色围巾的小企鹅。
腾讯QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与多种通讯终端相连。
2017年1月5日,腾讯QQ和美的集团在深圳正式签署战略合作协议,双方将共同构建基于IP授权与物联云技术的深度合作,实现家电产品的连接、对话和远程控制。双方合作的第一步,是共同推出基于QQfamilyIP授权和腾讯物联云技术的多款智能家电产品。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13492161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-18
下一篇 2023-08-18

发表评论

登录后才能评论

评论列表(0条)

保存