zoukankan      html  css  js  c++  java
  • HTTP基础知识(十一)

     
    十一、Web的攻击技术
     
    1、简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的web应用等资源才是攻击目标。
      (1)HTTP不具备必要的安全功能
    几乎现今所有的web网站都会使用会话管理、加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能。
    开发者通常要自行设计并开发认证及会话管理功能来满足Web应用的安全,而自行设计就意味着会出现各种形形色色的实现。结果安全等级并不完备,可仍在运作的web应用背后却隐藏着各种容易被攻击者滥用的安全漏洞的Bug。
      (2)在客户端即可篡改请求
    在Web应用总,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改。所以Web应用可能会接收到与预期数据不相同的内容。
    所以在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。攻击者通过URL查询字段或表单、HTTP首部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。
     
    2、针对web应用的攻击模式
      (1)主动攻击(active attack)
    主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。(SQL注入和OS命令注入)
      (2)被动攻击(passive attack)
    被动攻击是指利用圈套策略执行攻击代码的攻击模式。被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
    步骤一:攻击者诱使用户触发已设置好的陷阱(在web页面或邮件内),而陷阱会启动发送已嵌入攻击代码的HTTP请求。
    步骤二:当用户不知不觉中招后,用户的浏览器或邮件客户端就会触发这个陷阱。
    步骤三:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。
    步骤四:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
     
    3、因输出值转义不完全引发的安全漏洞
      实施Web应用的安全对策可大致分为以下两部分:
    客户端验证、web应用端(服务器端)的验证(包括输入值验证和输出值转义)
    客户端多数情况下采用JavaScript验证数据,可是在客户端允许篡改数据或关闭JavaScript,不适合将JavaScript验证作为安全的防范对策,保留客户端验证只是为了尽早地辨识输入错误,起到提高UI体验的作用。
    输入值验证:指检查是否符合系统业务逻辑的数值或检查字符编码等预防对策。
    输出值转义:防止输出值转义不完全而触发攻击者传入的攻击代码,导致的输出对象损坏。
     
      (1)跨站脚本攻击(Cross-Site Scripting,XSS)
    指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
    造成的影响:1)利用虚假输入表单骗取用户个人信息。2)利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。3)显示伪造的文章或图片
    1)XSS是攻击者利用预先设置的陷阱触发的被动攻击。
    攻击者会创建嵌入了恶意代码的URL,并隐藏植入事先准备好的欺诈邮件中或Web页面内,诱使用户去点击该URL。用户点击后,设置好的脚本就开始偷偷运行,把用户输入的信息直接发送到攻击者的网站。
    2)对用户Cookie的窃取攻击
    攻击者还会恶意构造窃取Cookie信息的脚本。
     
      (2)SQL注入攻击(SQL Injection)
    指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
    造成的影响:1)非法查看或篡改数据库内的数据。2)规避验证。3)执行和数据库服务器业务关联的程序
    例子:
    当用户输入用户名a去查询a买过的东西时,构成的sql语句是:select * from product where user = 'a' and flag = 1;
    但当攻击者在用户名处输入' a --时,构成的sql语句变成了:select * from product where user = 'a' --' and flag = 1;
    这样就会把后面flag=1的条件注释掉了。
     
      (3)OS命令注入攻击
    指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
    OS命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。
     
      (4)HTTP首部注入攻击(HTTP Header Injection)
    指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主题的一种攻击。属于被动攻击模式。
    造成的影响:1)设置任何Cookie信息。2)重定向至任意URL。3)显示任意的主体(HTTP响应截断攻击)
    例子:
    正常的URL是:http://example.com/?c=100;
    如果攻击者把100替换成:100%0D%0ASet-Cookie:+SID=123456789
    其中%0D%0A代表HTTP报文中的换行符,接着就是强制设置SID,攻击者就能伪装成用户。
     
      HTTP响应截断攻击是HTTP首部注入攻击的一种,攻击顺序相同,了但是要将两个%0D%0A%0D%0A并排插入字符串后发送,两个连续的换行正式HTTP首部与主体分割所需的空行,这样就可以显示伪造的主体。
    利用这个攻击,触发陷阱的用户浏览器会显示伪造的web页面,再让用户输入自己的个人信息,便可达到攻击效果。
     
      (5)邮件首部注入攻击(Mail Header Injection)
    指Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件。
     
      (6)目录遍历攻击(Directory Traversal)
    指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历攻击。
    当URL脚本接受对指定目录的访问请求处理,那原本不公开的文件就存在可被访问的风险。
     
      (7)远程文件包含漏洞(Remote File Inclusion)
    指当部分脚本内容需要熊其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
    这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种可通过设定,指定外部服务器的URL作为文件名的功能。因为该功能太危险,所以PHP5.2.0之后默认设定此功能无效。
     
    4、因设置或设计上的缺陷引发的安全漏洞
    指错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞。
      (1)强制浏览(Forced Browsing)
    指从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
    造成的影响:1)泄露顾客的个人信息等重要情报。2)泄露原本需要具有访问权限的用户才可查阅的信息内容。3)泄露未外链到外界的文件。
     
      (2)不正确的错误消息处理(Rrror Handling Vulnerability)
    指Web应用的错误信息内包含对攻击者有用的信息。
    与Web应用有关的主要错误信息包括:1)Web应用抛出的错误消息。2)数据库等系统抛出的错误消息。
    1)攻击者可通过“邮件地址未注册”、“密码有误”等错误消息可判断邮件地址是否被注册;
    2)当输入未预料的字符串时,数据库可能会提示错误,这对开发者来说这是有帮助的信息,但是对用户来说毫无用处,攻击者还能从中判断出这是什么数据库,获得进行SQL注入攻击的启发。
    系统抛出的错误主要几种在:PHP或ASP等脚本错误;数据库或中间件的错误;Web服务器的错误
    我们可以对详细的错误消息进行抑制设定,或使用自定义错误消息。
     
      (3)开放重定向(Open Redirect)
    指对指定的任意URL作重定向跳转的功能。如果指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。
    用户以为访问example.com,但实际上被诱导至example1.com这个指定的重定向目标。
     
    5、因会话管理疏忽引发的安全漏洞
    会话管理是用来管理用户状态的必备功能,如果再会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。
      (1)会话劫持(Session Hijack)
    指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
    攻击者获得会话ID的途径有:1)通过非正规的生成方法推测会话ID。2)通过窃听或XSS攻击盗取会话ID。3)通过会话固定攻击强行获取会话ID
     
      (2)会话固定攻击(Session Fixation)
    指强制用户使用攻击者指定的会话ID,属于被动攻击。
    攻击者诱使用户对事先准备好的未验证会话ID进行验证,那么此已验证的会话ID状态就会被服务器记录下来,攻击者就能利用此会话ID顺利登录网站。
     
      (3)跨站点请求伪造(Cross-Site Request Forgeries,CSRF)
    指攻击者通过设置好的陷阱,强制对已完成验证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
    造成的影响:1)利用已通过认证的用户权限更新设定信息等。2)利用已通过认证的用户权限购买商品。3)利用已通过认证的用户权限在留言板上发表言论。
     
    6、其他安全漏洞
      (1)密码破解(Password Cracking)
    即算出密码,突破验证。破解手段包括:1)通过网络的密码试错。2)对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
     
    1)通过网络的密码试错
    主要有两种方式:
    穷举法(Baute-force Attack,又称暴力破解法):
    指对所有密钥集合构成的密钥空间进行穷举。但是当密钥空间很庞大时,解密可能需要花费数年、甚至前年的时间。
    字典攻击:
    指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过验证的一种攻击手法。
     
    2)对已加密密码的破解
    web应用在保存密码时,一般不会直接以明文的额方式保存,通过散列函数做散列处理或加salt的手段对要保存的密码本身加密。那即使攻击者使用某些手段窃取密码数据,必须先通过解码等手段,把加密处理的密码还原成明文形式。
    从加密过的数据中导出明文通常有以下几种方法:
     
    ·通过穷举法、字典攻击进行类推
    ·彩虹表(Rainbow Table):是由明文密码及与之对应的散列值后塍的一张数据库表,是一种通过事先制作庞大的彩虹表,可在穷举法、字典攻击等实际破解过程中缩短消耗时间的技巧。
    ·拿到密钥
    ·加密算法的漏洞
     
      (2)点击劫持(Clickjacking)
    指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。
     
      (3)DoS攻击(Denial of Service attack)
    是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。
    主要攻击方式包括:1)集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。2)通过攻击安全漏洞使服务停止。
     
      (4)后门程序(Backdoor)
    指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。
    只要分为以下3中类型:
    1)开发阶段作为Debug调用的后门程序。
    2)开发者为了自身利益植入的后门程序。
    3)攻击者通过某种方法设置的后门程序。
  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/CTXXCH/p/6555473.html
Copyright © 2011-2022 走看看