这是我参与「第四届青训营 」笔记创作活动的的第11天
Web开发的安全之旅之攻击篇
大家好,这里是抽时间补笔记的Vic,今天给大家带来Web开发的安全之旅的相关笔记,在这个篇章中,我的计划是分为两部分,分别为攻击篇和防御篇。今天带来的是攻击篇的相关内容。
web开发中的安全问题是一个不可忽视的问题,在这个篇章中我将介绍几种常见的攻击方法。
跨站脚本攻击(XSS)
XSS攻击也被称为前端注入,其本质是将用户输入的数据当做前端代码进行执行,其核心是开发者盲目信任用户提交的内容,将用户输入的字符串在不经过筛查的情况下直接转换为了DOM元素。
由于在暗地里执行脚本,XSS攻击往往难以从UI上感知到。通过XSS攻击,攻击者可以窃取到浏览器中cookie/token,从而获得用户信息。攻击者也可以采用绘制UI,如伪造弹窗等手段,诱骗用户点击/填写表单。
在这里附上一个课堂上XSS攻击的例子,在这个例子中开发者对于用户提交的数据没有做筛选过滤工作,因此会直接渲染用户提交的数据内容。
在这种情况下,攻击者就可以利用这个漏洞从而进行XSS攻击。下图所示就是这样的一个例子,在这个例子中XSS攻击者利用恶意脚本生成了一个弹窗。那么假如脚本中的内容不是弹窗呢?
XSS攻击主要分为四种类型,分别为:存储型XSS、反射型XSS、DOM型XSS、突变型XSS。下面具体介绍这四种类型。
存储型XSS:攻击者注入的恶意脚本是存储在数据库中的,当用户访问使用数据库中对应数据的对应页面时,随着读数据的过程,浏览器中就自动执行了恶意脚本,从而被攻击。这种类型的XSS攻击危害最大,因为它是对访问这个页面的所有用户都是可见的。以某视频网站为例,由于该视频网站的弹幕功能并没有对用户输入的字符串进行过滤,因此被攻击者注入了XSS攻击,当用户访问该视频网站之后,用户浏览器中存储的cookie和token被攻击者获取,从而信息泄露。
反射型XSS:这种攻击并不涉及数据库,而是从URL上攻击。这种攻击往往仅针对本次访问产生影响,是一种非持久型的攻击。在这里也举一个例子,如某不法攻击者想获取某购物网站会员用户信息,其利用非法手段将注入XSS攻击的URL链接通过邮件大量群发给该购物网站会员用户,一旦有用户点击该链接,攻击者就可以获取到点击用户的个人信息。
DOM型XSS:这种攻击方式并不需要服务器的参与,其恶意攻击的发起与执行均在浏览器中进行。这种攻击方式同样通过URL进行执行,这看上去和反射型XSS攻击很像,然而不同的是,反射型XSS攻击是在服务器端完成恶意脚本的注入,而DOM型XSS则是在浏览器中进行。
突变型XSS:这种攻击方式利用了浏览器渲染DOM的特性,不同的浏览器中这种攻击方式会有所区别。
如图所示,我们可以看到在上面的代码中,我们的过滤器会将这段代码中title的部分认为是一个正常的title属性,然而当代码渲染时,就会渲染成下面的样子。很明显我们可以看到这里注入了一个含有恶意代码的图片。
跨站请求伪造(CSRF)
在这种攻击中,攻击者在用户不知情的情况下,利用用户权限构造指定的HTTP请求发送给服务器,从而窃取或修改用户敏感信息。
在这里同样举一个例子进行讲解,如某同学在邮箱中收到攻击者伪造的包含有恶意链接的邮件,该同学点击链接后,该恶意页面在后台向银行服务器请求银行转账接口,由于该请求包含有用户的cookie,因此服务器认为该请求是合法的,因此同意该请求,返回结果,从而导致此同学经济受到损失。
这种方式也可以将恶意链接包含在图片中,当图片加载时,恶意链接自动执行。
注入
提到注入攻击,那么首当其冲必然是SQL注入。SQL注入的主要原因在于服务端在读取请求字段的时候,在没有经过过滤的情况下直接以字符串的形式拼接SQL语句。攻击者利用SQL语句向数据库中传入恶意代码,从而达到脱库、删库甚至是获取整个服务器权限的目的。
如上图所示就是一个通过SQL注入,利用恶意SQL语句达成的删库操作。在这种情况下,如果服务器数据没有备份,那么造成的损失是不可估计的。
当然注入攻击并不仅仅局限与SQL语句,可以利用CLI(命令行指令)、OS command(操作系统命令)达成。需要注意的是SSRF(服务器请求伪造)严格来说并不是注入攻击,只不过其原理与注入攻击类似。如下图所示就是一个利用CLI的注入攻击。利用这种方式,我们可以读取或修改目标服务器中的重要文件,从而利用这些重要文件完成提权或攻击,如:修改nginx中的proxy_pass从而将流量转发到真实第三方,使得第三方流量激增,从而无法正常提供服务。
SSRF攻击的目标一般是外网无法访问的内部系统。其形成的原因一般是由于服务端提供了从其他服务器获取数据的功能且没有对目标地址做过滤与限制。利用这种攻击,攻击者就可以获得对一般来说无法访问到的内网的访问权限。
拒绝服务攻击(DoS)
顾名思义,这种攻击方式采用某种方式导致服务器资源被显著消耗从而来不及响应请求,导致请求挤压,进而引发雪崩效应。
比较典型的方法是利用正则表达式的贪婪模式,在下图中就是一个利用正则表达式贪婪模式的DOS攻击案例。
在这个例子中正则表达式多次回溯进行匹配,这就导致响应时间大大上升,接口的吞吐量也受到影响显著下降。
我们可以通过耗时的同步操作、数据库写入、SQL join、文件备份或循环执行逻辑这些方式来进行DOS攻击。
在DOS攻击的基础上引入DDOS攻击,这种方式采用使服务器在短时间收到大量僵尸设备的请求流量,从而导致服务器不能及时处理请求,从而造成雪崩效应。这是一种简单粗暴,但十分有效的方法。其攻击特点是直接访问IP、针对任意API都可以攻击、消耗大量带宽。典型的方法是SYN洪水攻击,这种方法利用了TCP三次握手的原理,使握手中的最后一步无法完成,从而导致目标服务器响应请求后一直等待最后一步完成,进而消耗目标服务器的资源。
中间人攻击
这种攻击方式主要作用于传输层,攻击者通过恶意web view、路由器甚至ISP作为中间人,从而窃取目标与服务器之间发送的信息,进而修改请求并返回修改后的请求。这种攻击的主要原因在于三个方面。第一个方面是信息传输采用明文传输,第二个方面是信息篡改不可知,第三个方面是无法验证对方身份。
总结
以上就是我们攻击篇的所有内容,在这篇文章中主要介绍了Web的五种典型攻击方式,在下一篇文章中,我们将针对这五种方式分别进行防御手段的介绍。