likes
comments
collection
share

web常见的攻击方式

作者站长头像
站长
· 阅读数 19

导语

web常见的攻击方式主要有三种:XSS攻击、CSRF攻击、SQL注入攻击,下面将详细介绍其攻击步骤以及主要防御方法。

XSS攻击

  • XSS:跨站脚本攻击(主要是由程序漏洞造成的)

    • 重点在脚本
    • 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览页面时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
    • 理论上,所有可输入的地方没有对输入数据进行处理的话,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力。
    • 原因:对URL中的参数,对用户输入提的内容,没有进行充分的过滤

分类

持久型跨站(存储型XSS):最直接的危害类型,跨站代码存储在服务器(数据库)
  • 概念

    • 指应用程序通过Web请求获取不可信赖的数据,在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码持续攻击用户
  • 出现场景

    • 存储型XSS漏洞常见于带有用户保存数据的网站功能,如:留言板、评论区、博客日志、论坛发帖、商品评论、用户私信、注册资料、修改资料等交互处
  • 攻击步骤

    1. 攻击者将恶意代码提交到目标网站数据库中
    2. 用户打开目标网站后,网站服务器将恶意代码从数据库中取出,然后拼接到html中,返回到用户浏览器中
    3. 用户浏览器解析html页面,其中的恶意代码也会执行
    4. 恶意代码执行后,攻击者拿到用户的敏感数据或者冒充用户进行违法操作等
非持久型跨站:反射型跨站脚本漏洞,最普遍的类型(用户访问服务器--跨站链接--返回跨站代码)
  • 表现在受害者点击了含有恶意javascript脚本的url,恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本反射回受害者的浏览器而使受害者的浏览器执行相应的脚本

    • 恶意脚本在 URL 上,需要用户手动点击才能触发攻击,攻击者往往会结合多种手段诱导用户点击
  • 出现场景

    • 反射型 XSS漏洞常见于通过 URL 传递参数的功能,如恶意URL链接、网站的搜索栏、用户登录口
  • 攻击步骤

    1. 攻击者在正常的url后面加上恶意攻击代码,然后诱导用户点击

    2. 用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端

    3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到

    4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户的行为,调用目标网站接口执行攻击等操作

DOM跨站:客户端脚本处理逻辑导致的安全问题,页面本身不变,只是对DOM环境的恶意修改。
  • 定义

    • 当Web应用程序没有对用户提交的语句和变量进行过滤或限制时,攻击者可以通过Web页面的输入区域向数据库或HTML页面中提交恶意代码。当用户打开包含这些恶意代码的链接或页面时,恶意代码会通过浏览器自动执行,从而达到攻击的目的。
    • 攻击者通过操纵 DOM 来触发攻击,是前端漏洞,不牵扯到服务器
  • 出现场景

    • 允许用户输入并动态渲染这些输入到页面上的Web应用程序中,如评论、留言等地方
  • 攻击步骤

    1. 攻击者构造出带有恶意代码的URL,并诱导用户点击。

    2. 用户打开带有恶意代码的URL。

    3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。

    4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作,调用目标网站接口执行攻击者一些操作。

XSS攻击手段和目的
  1. 窃取用户数据:通过XSS攻击,攻击者可以获取用户的敏感信息,如用户名、密码、信用卡信息等。

  2. 会话劫持:利用XSS攻击窃取用户的会话令牌(如Cookie),从而伪装成用户进行登录,访问用户的私人数据、执行敏感操作等。

  3. 恶意重定向:通过XSS攻击将用户重定向到恶意网站,从而进行钓鱼攻击、恶意软件下载等。

    钓鱼攻击:指不法分子利用各种手段,仿冒真实网站的URL地址以及页面内容,如银行金融网站、网络购物网站等需要在线支付的网页,骗取用户相关信息并实施犯罪。

  4. 网站篡改:利用XSS攻击修改网站的内容,如插入广告、显示虚假信息等。

  5. 浏览器攻击:利用XSS攻击执行浏览器端的恶意代码,如利用浏览器的漏洞进行攻击,可能导致浏览器崩溃、数据泄露等严重后果。

XXS攻击防御
浏览器层面
  1. cookie安全策略-HttpOnly
  • XSS攻击能够窃取到用户cookie的主要原因:js脚本可以通过document.cookie读取用户cookie信息

  • 在cookie中设置HttpOnly属性,通过js脚本就无法读取cookie信息

// HttpOnly用法示例:
response.setHeader("Set-Cookie", "user=test;Path=/;HttpOnly");
  1. 开启CSP网页安全政策
  • CSP(Content-Security-Policy):内容安全策略,是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。

  • CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

  • 目前绝大多数的浏览器都已经支持CSP。

  • 启用CSP有两种方式:

    • 设置HTTP 响应头
    • Content-Security-Policy: default-src 'self'
      
    • HTML中的meta标签
    • <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"
      
      
代码层面(输入检查,输出检查)

输入检查

  • 对输入和URL参数进行过滤,在变量输出到HTML页面时,使用HTML实体编码、 JavaScript 的转义 /

    • 很多时候也被用于格式检查,一般是检查用户输入的数据中是否包含一些特殊字符,如 <、>、 单引号', 双引号'',等。如果发现存在特殊字符,则将这些字符过滤或者编码。

    • 将用户输入中的特殊字符(如 <, >, &, ", ' 等)转换为HTML实体。例如,< 转换为 &lt;> 转换为 &gt;

CSRF攻击(跨站请求伪造,或缩写为 XSRF )

定义
  • CSRF通过伪装来自受信任的用户的请求来攻击受信任的网站,即攻击者会先盗用你的身份,然后以你的名义向网站伪造一个状态改变请求,并将表单提交到受害者的浏览器
  • XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS相比,CSRF更具危险性
原理
  • 攻击者会诱导用户访问一个恶意网站或点击一个恶意链接,这个恶意页面会构造一个伪造的请求,并将该请求发送到目标网站。由于浏览器会自动携带用户在目标网站上的认证信息(如Cookie),因此这个伪造的请求会以用户的身份被发送到目标网站,并执行一些非法的操作。
攻击流程
  1. 用户打开浏览器,访问安全网站A,输入用户名和密码请求登录网站A
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录A成功,可以正常发送请求到网站A
  3. 用户没有退出A之前,在同一个浏览器中,打开一个Tab页面来访问网站B
  4. 网站B接收到用户的请求后,返回一些攻击代码,并且发出一个请求要求访问第三方站点A
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。
  6. 网站A并不知道该请求其实是由B发出的,所以会根据用户C的cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行
常见的攻击
Get
  • 利用 iframe、img、a 等标签发起 get 请求时,不存在跨域的问题,利用 cookie 发起跨站请求,注意是跨站,不是跨域

  • 例子:

银行站点A: 以GET请求的方式来完毕银行转账的工作:如www.mybank.com.Transfer.php?toBankId=11&money=1000

危险站点B: 其中存在一段html代码为<img src=www.mybank.com/Transfer.ph…

首先你登录了银行站点A,然后访问危险站点B,这时你就会发现自己的银行账号少了1000元。 原因:

  1. 银行站点A违反了HTTP规范,使用GET请求更新资源。
  2. 在访问危急站点B的之前,你已经登录了银行站点A,而B中的一个合法的请求,但这里被不法分子利用了
  3. 所以你的浏览器会带上你的银行站点A的Cookie发出Get请求,去获取资源以GET的方式请求第三方资源
  4. 这里的第三方就是指银行站点了,原本这是www.mybank.com/Transfer.ph…
  5. 结果银行站点服务器收到请求后,觉得这是一个更新资源操作(转账操作),所以就立马进行转账操作。
Post
  • 构建一个表单 html 中的

    ,隐藏它,当用户进入页面时,自动提交这个表单,一个 form 表单可以实现 post 请求或者get 请求,Post类型的CSRF危害没有GET类型的大

  • 解决:

    • 在提交 form 表单之后页面会自动跳转,想要阻止自动跳转,就不能用 form 自带的 submit 功能了,需要手动使用 js 提交表单的内容,但是那样就不会发起 csrf 攻击了。
<form action=http://wooyun.org/csrf.php method=POST>
    <input type="text" name="xx" value="11" />
</form>
<script> document.forms[0].submit(); </script> 

// 访问该页面后,表单会自动提交,相当于模拟用户完成一次POSt操作
防御

尽量使用POST,限制GET、加验证码、 Referer Check、Token

SQL注入攻击

  • SQL注入攻击利用了Web应用程序对用户输入数据的不正确处理,通过在输入字段中注入恶意的SQL代码,从而篡改应用程序的行为或访问敏感数据。
攻击步骤
  1. 确定注入点:攻击者首先需要在目标网站上找到一个可以输入数据的地方,例如搜索框、登录框等。这个地方需要能够接受用户输入并将其传递到后端的SQL查询中。
  2. 判断 数据类型:攻击者需要判断目标网站的数据类型,例如是数字型还是字符型。这有助于他们构造合适的SQL注入语句。
  3. 构造注入语句:攻击者会构造一个恶意的SQL语句,这个语句通常包含一些特殊字符和SQL关键字,用于绕过目标网站的验证和过滤机制,并直接执行SQL查询。
  4. 执行注入:攻击者将构造好的注入语句输入到目标网站的输入点中,并提交请求。如果目标网站没有对输入进行严格的过滤和验证,那么注入语句就会被执行。
  5. 获取数据:一旦注入语句被执行,攻击者就可以通过查看目标网站的响应或利用其他手段来获取数据库中的敏感数据。这些数据可能包括用户的个人信息、密码、信用卡信息等。
危害
  • 数据泄露:攻击者可以通过SQL注入获取敏感数据,如用户账号、密码、信用卡信息等,造成隐私泄露。
  • 数据篡改:攻击者可以通过SQL注入修改数据库中的数据,如篡改用户信息、订单信息等,对系统造成破坏。
  • 拒绝服务:攻击者可以通过SQL注入攻击导致数据库崩溃或系统崩溃,从而影响正常的服务提供。
防御
  • 输入验证:对用户输入数据进行严格的验证和过滤,包括输入长度、类型、格式等方面,避免恶意用户注入恶意代码。
  • 参数化查询:使用参数化查询语句而不是拼接字符串的方式构建SQL查询,以防止SQL注入攻击的发生。
  • 最小权限原则:在数据库访问控制方面,采用最小权限原则,限制Web应用程序对数据库的访问权限,减少攻击面。
  • 错误信息处理:对于发生SQL错误的情况,应该通过定制的错误信息替代原始的SQL错误信息,以避免泄露敏感信息。
  • 定期更新:定期更新Web应用程序和数据库系统,修补已知的漏洞和安全问题,提高系统的安全性和稳定性。
转载自:https://juejin.cn/post/7398038441524887586
评论
请登录