HTTPS及Web攻击技术

 一、HTTPS(确保web安全)

  在HTTP协议中可能存在信息窃听或身份伪装等安全问题,使用HTTPS通信机制可以有效的防止这些问题。

   HTTP的缺点:

    1、通信使用明文(不加密),内容可能会被窃听

    2、不验证通信方的身份,因此有可能遭遇伪装

    3、无法证明报文的完整性,所以有可能已遭篡改

    下面详细解释HTTP协议的这三种缺点:

    1、通信使用明文(不加密),内容可能会被窃听

      HTTP本身不具有加密的功能,即,HTTP报文使用明文方式发送

      另外TCP/IP协议的的通信机制,通信内容在所有的通信线路上都有可能遭到窥视。即使已经过加密处理的通信,也会被窥视到通信内容。窃听相同段上的通信并非难事,只需要收集在互联网上流动的数据包(帧)就行了

      

      解决方案:加密处理防止被窃听

       1)、通信的加密(建立安全通信线路)

        HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用加密HTTP的通信内容。

        用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。

       2)、内容的加密

        由于HTTP协议没有加密机制,那就手动对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。

        在这种情况下,客户端需要对HTTP报文主体(body)进行加密处理后再发送请求。这种方式要求客户端和服务器同时具备加密和解密机制,主要应用在Web服务中。

        注意:由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。需要使用签名机制验证加密后的报文没有被篡改。

    2、不验证通信方的身份,因此有可能遭遇伪装

      HTTP 协议中的请求和响应不会对通信方进行确认。

      也就是说存在服务器是否就是请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端等类似问题;

       因此:任何人都可发起请求(服务器对请求来者不拒)。

       在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。因为不确认通信方,会存在以下各种隐患:

        ①:无法确定请求发送至目标的Web服务器是否是真实的服务器,可能是已伪装的Web服务器

        ②:无法确定响应返回到的客户端是否是真实客户端。有可能是已伪装的客户端

        ③:无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限

        ④:无法判定请求是来自何方、出自谁手

        ⑤:即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)

      解决方案:查明对方的证书

        使用HTTP无法确定通信方,但是SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定通信对方。

        证书由值得信任的第三方机构(CA)颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说非常困难,所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的身份。

        客户端在开始通信之前先确认服务器的证书,验证服务器是否是真实的服务器。另外,客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节。

    3、无法证明报文的完整性,所以有可能已遭篡改

      所谓完整性是指信息的准确度。无法证明报文的完整性,也就意味着无法判断接收到的信息是否准确,可能接收的信息是已遭篡改的信息。

      问题:由于 HTTP 协议无法证明通信的报文完整性, 因此,在请求或响应送出之后直到对方接收之前的这段时间内, 即使请求或响应的内容遭到篡改, 也没有办法获悉。即没有办法确认发出的请求/响应和接收到的请求/响应是前后相同的

      解决方案:防止信息在请求或响应传输中被篡改

       1)签名校验

        使用HTTP协议确定报文完整性的方法,其中常用的MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法(RSA、HMACSHA1 等)。

        如提供下载服务的Web网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值。供用户检查验证下载的文件是否就是原来服务器上的文件。

       2)使用HTTPS

        虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠,依然无法百分百确认结果正确。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。所以有必要使用HTTPS,SSL提供认证和加密处理及摘要功能

        

  HTTPS

  HTTP+加密+认证+完整性保护=HTTPS

    HTTP协议使用明文,如果通信线路被窃听,信息就会泄漏;没有办法确认通信方,可能遇到通信方伪装;无法验证明文完整性,报文可能会遭篡改。

    为了解决以上问题,需要在HTTP的基础之上再添加加密处理和认证等机制,把添加了加密及认证机制的HTTP称为HTTPS。使用HTTPS通信时,使用https://。

    HTTPS是身披SSL外壳的HTTP

      HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。所以说HTTPS是身披SSL外壳的HTTP。

      在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能了。

      SSL是独立于HTTP的协议,所以其他运行在应用层的协议如SMTP、Telnet均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。

    SSL采用 对称密钥加密 和 非对称密钥加密 混合的加密机制

      1、对称密钥加密

        加密和解密通用一个密钥的方式称为对称密钥加密(共享密钥加密),简称对称加密。

        问题:对称密钥加密方式必须将密钥也发给对方,但是密钥的发送有窃听的风险,而不发送,对方就无法解密

      2、非对称密钥加密

        非对称密钥,即加密和解密使用一对不同的密钥,私钥和公钥。私钥自己保存,公钥发送给对方。所以也叫公开密钥加密。

        使用非对称密钥加密的方式,发送密文的一方使用对方的公钥进行加密,对方收到被加密的信息后,使用自己的私钥进行解密。

        利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走的问题。且要根据密文和公钥要恢复明文从目前的技术手段是异常困难的。

        问题:非对称加密的耗时比对称加密耗时长,只适合对少量数据进行处理。

      HTTPS采用混合加密机制

        HTTPS采用对称加密和非对称加密两者并用的混合加密机制。结合对称加密的速度快和非对称加密不必担心密钥被窃听的优势。

        ①:使用非对称加密安全地交换 对称加密 的密钥

        ②:使用对称加密方式 加密

    证明非对称加密的公钥正确性的数字证书

      遗憾地是,非对称密钥加密的方式还是存在一些问题的。那就是无法证明 公钥 本身是货真价实的公钥。存在在公钥的传输中,真正的公钥被攻击者替换掉了的可能。

      解决方案:使用由数字证书认证机构(CA,Certificate Authority)颁发的公钥证书。      

      数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,会对向CA申请公钥证书的服务器的身份做校验。数字证书认证流程:

      (1)、服务器把自己的公开密钥登录至CA

      (2)、CA用自己的私钥向服务器的公钥签署数字签名并颁发公钥证书(包含:服务器公钥+CA对此公钥的签名)给服务器

      (3)、服务器将CA颁发的公钥证书转送给客户端

      (4)、客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥(CA公钥,事先植入到浏览器中),向CA验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性

      (5)、客户端使用服务器的公开密钥对报文加密后发送

      (6)、服务器用私有密钥对报文解密。

    即数字证书认证机构使用非对称加密方式对同样使用非对称加密的双方的交换公钥的公钥进行加密和加签保证公钥的正确性,只不过数字证书认证机构的公钥事先植入在浏览器中,是可信的。

    HTTPS的通信步骤

      1、客户端通过发送 Client Hello 报文开始 SSL通信。 报文中包含客户端支持的 SSL的指定版本、 加密组件( Cipher Suite) 列表( 所使用的加密算法及密钥长度等)

      2、服务器可进行 SSL通信时, 会以 Server Hello 报文作为应答。 和客户端一样, 在报文中包含 SSL版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的

      3、之后服务器发送 Certificate 报文。 报文中包含公开密钥证书

      4、最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL握手协商部分结束

      5、SSL第一次握手结束之后, 客户端以 Client Key Exchange 报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串(客户端生成的随机数)。 该报文已用步骤 3 中的公开密钥进行加密

      6、接着客户端继续发送 Change Cipher Spec 报文。 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret 密钥加密

      7、客户端发送 Finished 报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准

      8、服务器同样发送 Change Cipher Spec 报文

      9、服务器同样发送 Finished 报文

      10、服务器和客户端的 Finished 报文交换完毕之后, SSL连接就算建立完成。 当然, 通信会受到 SSL的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP 请求

      11、应用层协议通信, 即发送 HTTP 响应

      12、最后由客户端断开连接。 断开连接时, 发送 close_notify 报文,之后四次挥手断开连接。

    

    既然HTTPS安全可靠,为什么不一直使用HTTPS?

      1、HTTPS比HTTP要慢2到100倍,比HTTP多了SSL通信,首先SSL通信慢,另外SSL通信因为要加密还要大量消耗CPU及内存等资源。

      2、此外要进行HTTPS通信,证书必不可少,而证书必须向认证机构(CA)购买,价格昂贵。

     因此,如果是非敏感信息则使用HTTP通信,只有包含敏感数据时,才使用HTTPS加密通信

    疑问?

      1、HTTPS通信报文已经加密,为什么抓包工具可以抓到明文信息

        因为我们允许抓包工具在电脑上安装了证书,使抓包工具充当了中间人的角色。

        https抓包的原理就是抓包工具将服务器返回的证书截获,然后给客户端返回一个它自己的证书,我们会手动安装抓包工具的证书。之后客户端发送的数据抓包工具用自己的证书解密,然后再用截获的服务器的证书加密,再发给服务器。

      2、使用HTTPS还需要对请求报文做签名吗

        HTTPS可以防止中间人攻击、加密防窃听、防篡改。

        RSA签名用于认证(验证身份,防止抵赖)。

        HTTPS主要解决的是传输层面的数据安全,但是HTTPS无法保证传输的数据是有效的(没有签名,无法甄别数据来源)      

      3、HTTPS通信的对称密钥是哪方生成的?

        是由客户端生成的。客户端在收到服务器返回的公钥证书,并校验证书合法后,生成一个随机数,并使用公钥加密随机数发送给服务器,这个随机数就是对称密钥。

二、用户身份的认证

  某些Web页面只想让特定的人浏览,所以需要认证功能。认证即确定访问者的身份,以及访问者是否有权限等,核对只有登录者本人才知道的信息,包括:

    密码、动态令牌(仅本人持有的设备内显示的一次性密码)、数字证书(仅限本人终端持有的信息)、生物认证(指纹和虹膜等)、IC卡。

  1、HTTP常用的认证方式:

    BASIC认证(基本认证)、DIGEST认证(摘要认证)、SSL客户端认证、FormBase认证(基于表单认证)。

    认证多半基于表单认证,由于使用上的便利性和安全性问题,HTTP协议标准提供的BASIC认证和DIGEST认证几乎不怎么使用。另外,SSL客户端虽然具有高度的

    安全等级,但因为导入和维持费用等问题,还尚未普及。

      BASIC认证步骤:

        1、发送请求

        2、返回状态码401告知客户端需要进行认证

        3、用户ID和密码以Base64方式编码后发送

        4、认证成功返回状态码200,若认证失败返回状态码401

 

      基于表单认证:

        基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务端上的Web应用程序发送登录信息,按登陆信息的验证结果认证。

  2、Session管理及Cookie应用

    基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session。因为HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即无法实现状态管理,因此

  即使当该用户下一次继续访问,也无法区分他与其他的用户。于是我们使用Cookie来管理Session(保存SessionID),以弥补HTTP协议中不存在的状态管理功能。然而,如果SessionID被第

  三方盗走,对方就可以伪装成你的身份进行恶意操作了,因此必须防止SessionID被盗,因此SessionID应使用难以推测的字符串,且服务端也要进行有效期的管理,保证其安全性。另外,为

  减轻跨站脚本攻击Xss造成的损失,建议事先在Cookie上加上httponly属性。

    另外,不仅基于表单认证的登陆信息及认证过程都无标准化的方法,服务器端应如何保存用户提交的密码等登陆信息等也没有标准化。通常,一种安全的保存方法是,先利用给密码加盐

  (salt,由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的),然后把它和密码字符串相连接(前后都可以)生成散列值。这样,即使当两个用户使用了同一个

    密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特性,攻击者也很难利用自己手中的二密码特征库进行破解。

三、Web的攻击技术

  互联网上的攻击大都将Web站点作为目标,协议本身几乎不会称为攻击的对象,应用HTTP协议的服务端和客户端,以及运行在服务器上的Web因公等资源才是攻击目标。

  统计显示互联网上重要的攻击事件中SQL注入攻击占4成,其次是XSS,占到15%。

  1、HTTP不具备必要的安全 功能

    现今几乎所有的Web网站都会使用会话(session)管理、加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能。从整体上看,HTTP就是一个通用的单纯协议机制

  ,因此它具备较多优势,但是在安全性方面则呈劣势。

  2、在客户端即可篡改请求

    在Web应用中,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由地变更,篡改。所以,Web应用可能会接收到与预期数据不相同的内容。

    在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过URL查询字段或表单、HTTP头部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,

  那内部信息就会遭到窃取,或被攻击者拿到管理权限。

  3、针对Web应用的攻击模式

    主要有主动攻击和被动攻击两种。

    1、以服务器为目标的主动攻击

      主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要访问到

    那些资源。主动攻击模式里最具代表性的是SQL注入和OS命令注入攻击。

    2、以服务器为目标的被动攻击

      被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。

      被动攻击通常的攻击模式如下所示:

      步骤1:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求

      步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱

      步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码

      步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态找那个的用户权限遭恶意滥用等后果。

     被动攻击模式中具有代表性的攻击是跨站脚本攻击(XSS)和跨站点请求伪造(CSRF)。

     利用用户的身份攻击企业内部网络:利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。只要用户踏入攻击者预先设好的陷阱,在用户能够

    访问到的网络范围内,即使是企业内网也同样会受到攻击。

 因输出值转义不完全引发的安全漏洞

    实施Web应用的安全对策可大致分为一下两部分

    1)客户端的验证

    2)Web服务器的验证

      (1)、输入值验证

      (2)、输出值转义 

    多数情况下采用JavaScript在客户端验证数据。可是在客户端允许篡改数据或关闭JavaScript,不适合将JavaScript验证作为安全的防范对策。保留客户端验证只是为了尽

  早的辨别错误,起到UI体验同时减轻服务器压力的作用。

    Web应用端的输入值验证按Web应用内的处理则有可能被误认为是具有攻击性意义的代码。针对输入值验证通常是指检查是否是符合系统业务逻辑的数据或检查字符编码等预防对策。

    从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。

  1、跨站脚本攻击(XSS)

    跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的

  HTML部分有可能隐藏着安全漏洞,就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

    跨站脚本攻击有可能造成以下影响:

      (1)、利用虚假输入表单骗取用户个人信息

      (2)、利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求

      (3)、显示伪造的文章或图片

    跨站脚本攻击案例:

     (1)、在动态生成HTML处发生

      如:在表单上输入内容的时候使用HTML标签括起来,使显示的内容样式改变

      在URI的参数值上使用JavaScript脚本,导致用户在登录时同时发送用户名密码到攻击者的网站,或者导致alter弹出框

     (2)、对用户Cookie的窃取攻击

      同样在URI的参数上指定一个远程的script脚本,通过该脚本窃取用户的Cookie信息。

  2、SQL注入攻击

    SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄漏。

    SQL注入攻击有可能会造成以下等影响:

    (1)、非法查看或篡改数据库内的数据

    (2)、规避认证

    (3)、执行和数据库服务器业务关联的程序等

    SQL注入攻击案例

      在表单上输入查询的条件去查询特定的结果,如果没有使用预编译SQL语句(#{}),而是使用占位符(${})来获取查询条件的话就有可能导致SQL注入。

      如:攻击者在表单上输入的条件为[xxx or 1=1]就能规避掉查询条件查看到非法的数据。或者输入[xxx ---],也会导致之后的查询条件失效。

  3、OS命令注入攻击

    OS命令注入攻击(OS Command Injection)是指通过Web因公,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就存在被攻击的风险。

    可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行非法的OS命令,从而执行OS上安装着的各种程序。

    OS攻击案例

      在表单中写入OS命令,将操作系统中指定文件的内容发送到攻击者的邮箱中。

  4、HTTP头部注入攻击

    HTTP头部注入攻击(HTTP Header Injection)是指攻击者通过在响应头部字段内插入换行,添加任意响应头部或主体的一种攻击。属于被动攻击模式。

    向头部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)。如:

      Web应用有时会把从外部接收到的数值,赋给响应头部字段Location和Set-Cookie。

    HTTP头部注入攻击可能造成以下一些影响:

      (1)、设置任何Cookie信息

      (2)、重定向至任意URL

      (3)、显示任意的主体(HTTP响应截断攻击)

  5、邮件头部注入攻击

    邮件头部注入是指Web应用中的邮件发送功能,攻击者通过向邮件头部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对

  任意邮件地址发送广告邮件或病毒邮件。

  6、目录遍历攻击

    目录遍历攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历攻击

    通过Web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用../等相对路径定位到/etc/passwd等绝对路径上,因此服务器上

  任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除Web服务器上的文件。因此应该关闭指定对任意文件名的访问权限。

  7、远程文件包含漏洞

    是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

    这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种通过设定,指定外部服务器的URL作为文件名的功能。因为该功能太危险,PHP5.2.0

  之后默认设定此功能无效。

  因设置或设计上的缺陷引发的安全漏洞

  是指错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞    

  8、强制浏览

    强制浏览安全漏洞是指,从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件

    强制浏览有可能造成以下一些影响:

      1)泄漏顾客的个人信息等重要情报

      2)泄漏原本需要访问权限的用户才可查阅的信息内容

      3)泄漏未连接到外界的文件

    对那些原本不愿公开的文件,为了保证安全会隐蔽其URL。可一旦知道了那些URL,也就意味着可浏览URL对应的文件。直接显示容易推测的文件名或文件目录

  索引时,通过某些方法可能会使URL产生泄漏。

    如:在需要访问权限控制的页面中,不具备对图片访问权限的控制,攻击者通过源代码获取图片地址可直接访问需要权限才能访问的页面上的图片信息。

  9、不正确的错误消息处理

    是指Web应用的错误信息内包含对攻击者有用的信息,与Web应用有关的主要错误信息如下所示:

      1)Web应用抛出的错误信息

      2)数据库等系统抛出的错误信息

    Web应用不必在用户的浏览页面上展现详细的错误信息。对攻击者来说,详细的错误消息有可能给它们下一次攻击以提示。

    如:在登录时会提示手机号未注册,当已注册可能会提示密码错误等其他消息。攻击者利用不同的输入提示不同的错误信息,就能判断手机号是否在这个网站注册过了。

    所以建议将提示的消息尽可能模糊。

  10、开放重定向

    开发重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的Web网站。

    

 因会话管理疏忽引发的安全漏洞

  会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。

  11、回话劫持

    会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。

    具备认证功能的Web应用,使用会话ID的会话管理机制,作为管理认证状态的主流方式。会话ID中记录客户端的Cookie等信息,服务器端将会话ID与认证状态进行

  一对一的匹配管理。

    攻击者可获取会话ID的途径:

      1)通过非正规的生成方法推测会话ID

      2)通过窃听或XSS攻击盗取会话ID

      3)通过会话固定攻击(Session Fixation)强行获取会话ID

    案例:攻击者在得知该Web网站存在可跨站攻击XSS的安全漏洞之后,就设置好用JavaScript脚本调用document.cookie以窃取Cookie信息的陷阱,一旦用户踏入

  陷阱(访问了该脚本),攻击者就能获取含有会话ID的Cookie。攻击者在拿到用户的会话ID后,往自己的浏览器的Cookie中设置该会话ID,即可伪装成会话ID遭窃的

  用户,访问Web网站了。

  12、会话固定攻击

    对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。案例步骤:

      1)、攻击者访问需要认证的页面

      2)、服务器发布一个未认证状态的会话ID(http://xxx/login?SID=xxx)

      3)、攻击者将上面未认证的会话ID URL作为陷阱,诱导用户前去认证,认证后,会话ID变为已认证状态

      4)、攻击者即可访问网站

  13、跨站点请求伪造(CSRF)

    跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些

  状态更新,属于被动攻击。跨站点请求伪造有可能会造成以下影响:

    1)利用已通过认证的用户权限灯芯设定信息等

    2)利用已通过认证用户权限购买商品

    3)利用已通过认证的用户权限在留言板上发表言论

    案例:用户A通过认证登录某网站,攻击者不下陷阱,A触发了攻击者布下的陷阱将利用A的身份和权限(因为用户A的浏览器中Cookie持有已认证的会话ID)去

  执行发表言论等动作。

 其他安全漏洞

  14、密码破解

    密码破解(Password Cracking)即算出密码,突破认证。攻击不限于Web应用,还包括其他的系统(如FTP或SSH等),密码破解有以下两种手段:

      1)通过网络的密码试错(穷举法,字典攻击)

      2)对已加密密码的破解(指攻击者入侵系统,以获取加密或散列处理的密码数据的情况)

    除了突破认证的攻击手段,还有SQL注入攻击逃避认证,跨站脚本攻击窃取密码信息等方法

    Web应用在保存密码时,一般不会以明文的方式保存,通过散列函数做散列处理或加salt的手段对要保存的密码本身加密。这样即使攻击者使用某些手段窃取密码

  数据,如果想要真正使用这些密码,则必须先通过解码等手段,把加密处理的密码还原成明文形式。从加密过的数据拿到明文通常有以下几种方法:

    1)通过穷举法-字典攻击进行类推

    2)彩虹表(由明文密码及与之对应的散列值构成的一张数据库表)

    3)拿到加密密钥

    4)加密算法的漏洞(极困难)

  15、点击劫持

    是指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装。

    已设置陷阱的Web页面,表面上并看不出来,但实际上已埋入了想让用户点击的链接,当用户点击到透明按钮时,实际上是点击了已指定透明属性元素的iframe页面。

    在做过手脚的Web页面上,目标的页面将作为透明层覆盖在游戏网页上,覆盖时,要保证想让用户点击的透明页面的按钮和覆盖的按钮重叠。

  16、DoS攻击

    是一种让运行中的服务呈停止状态的攻击。有时也叫服务停止攻击或拒绝服务攻击。DoS攻击的对象不受限于Web网站,还包括网络设备及服务器等。

    主要有以下两种DoS攻击方式:

      1)利用集中访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态

      2)通过攻击安全漏洞使服务停止

  17、后门程序

    是指开发设置的隐藏入口,可不按正常步骤使用受限功能。通常的后门程序分为以下3种类型:

      1)开发阶段作为Debug调用的后门程序

      2)开发者为了自身利益植入的后门程序

      3)攻击者通过某种方法设置的后门程序

END.

原文地址:https://www.cnblogs.com/yangyongjie/p/14563179.html