网络安全

254 阅读23分钟

在互联网站中会受到,各种外来的攻击,因此,如何在应用开发中主动规避设计的缺陷,降低攻击风险。

XSS攻击

xss即跨站脚本攻击cross site scripting, 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

反射型 XSS

又称非持久型XSS,这种攻击方式具有一次性,只在用户单击时触发。 跨站代码一般存在链接中,当受害者请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码通常不存储服务端。

1、构造链接

首先我们构造一个携带恶意尝试的该网站的链接,如 http://api.xxx.org?input=<script>alert("Yimwu is coming!")<script>

2、诱导点击

我们可以通过发送钓鱼邮件或者在钓鱼网站植入链接,诱导用户进行点击,当用户点击恶意链接后将对目标网站进行访问

3、网站反射 XSS

当网站服务器接收到携带恶意代码的参数后,将恶意代码返回给用户端,用户端执行恶意代码,XSS 攻击成功

存储型 XSS

存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。

1、上传恶意脚本

存储型攻击的第一步是构造恶意脚本,通过构造恶意脚本,然后嵌入到网站允许上传的内容中,提交到服务器,然后服务器将其存入数据库中

2、用户访问网站

当用户通过正常请求,发送请求到该被攻击的网站,由于请求的网页包含恶意脚本的内容,因此网站会从数据库中提取存在恶意脚本的内容,返回给用户

3、执行恶意代码

当服务器返回了包含恶意脚本的内容给用户后,用户端自动执行,发送 XSS 攻击,将用户敏感信息发送到恶意服务器,至此攻击成功

CSRF 攻击

CSRF(Cross-site request forgery)简称:跨站请求伪造,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

1、登录网站

如上图所表达的过程,第一步用户按往常正常登录网站A,再提交账号和密码后,用户从网站A获得相关的 cookie 值并保存到浏览器中

2、访问恶意网站

当用户登录成功,获得了相关 cookie 等认证信息后,这个时候黑客通过广告、邮件等方式,对用户发送黑客自建的恶意网站B的链接,这个时候,若用户点击了恶意链接,将自动访问网站B

3、窃取信息

当用户点击了恶意链接,访问恶意网站B,这个时候,网站B会要求提取 cookie 并发送到网站B

4、实施攻击

当恶意网站B收集到网站A相关的信息后,就可以假冒用户的身份,给网站A发送恶意操作请求了

防范措施

1、验证 HTTP Referer 字段

我们都知道 Referer 只要用于验证发送 HTTP 请求的来源地址,当攻击者拿到 cookie 后,将 cookie 用于构造恶意请求发送到目标服务器,但是如果开启了 Referer 认证,这个时候攻击者发送到目标服务器的请求就能够被识别为非法请求,进而拦截攻击

2、添加验证码

对重要的操作添加验证码确认机制,当黑客盗用了 cookie 进行恶意操作提交时,会触发验证码机制,从而对攻击进行拦截,当加入了验证码,也就不会出现我们完全不察觉的情况下账号被直接进行恶意操作提交

3、添加 token

在 header 中添加自定义字段,使用 token 验证,这种方式 token 由服务器生成,并在客户端每次请求时携带在 header 中,黑客无法猜测到 token,本质上与 Referer 验证方式相同,都是用来区分是否为源网站发起的请求

SQL 注入

顾名思义,sql,即数据库sql查询语句,我们都知道,任何涉及到存储的东西,例如身份验证、信息查询、信息提交等等,涉及到数据持久性的,都离不开数据库的支持,而数据库上层的操作语言是 SQL,那么如果不加强防范的话,通过 SQL 的相关漏洞,也就能够对数据库进行一些非法的攻击,进而达到窃取数据库相关敏感信息以及越权访问等高危攻击行为。

1、构造恶意语句

在存在漏洞的页面上的某个输入框中,猜测输入框背后对应的 SQL 查询语句的构成方式,也就是说,需要在这一步猜测通过前端提交到服务器上的参数是如何嵌入到 SQL 查询语句中的,然后通过 SQL 语句的语法分析,运用条件符 or、and 等改变语句的判断方式,或者加入“;”对语句进行闭合等方式,构造特殊的恶意攻击语句

2、服务器构造SQL语句

服务器将接收到的请求参数代入到 SQL 语句中,形成最终的 SQL 执行语句,最后提交到数据库中执行

3、数据库执行恶意语句

当服务器将拼接产生的恶意 SQL 语句提交到数据库后,数据库默认按照 SQL 要求执行对应的操作,最终产生了恶意攻击的效果

典型案例

假设某网站是一个个人相关信息查询网站,登录需要验证,当验证通过则能够查询到所有相关的个人信息。

黑客攻击:首先黑客按照以往的渗透测试经验,猜测到登录验证的 SQL 语句大致为 select * from user where user=user and psd=psd; ,其中 user 与 psd 为前端输入框传到服务器的参数,那么这个时候黑客便可以通过构造特殊的 user 和 psd 来改变原来执行的 SQL 语句,当 user = yimwu';-- 时,构造出来的语句是这样子的 select * from user where user='yimwu';--' and psd=psd; ,这个语句中 -- 表示注释,直接忽略了后面的其他内容,因此可以实现的效果是直接绕过了密码,无需验证密码即可完成个人信息查询。

DDOS

DDOS,即分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。

1、收集僵尸机

目前规模较大的网站,基本上都应该是做了高并发机制的,那么黑客如果只通过自己的力量,肯定无法将网站服务器冲垮,为了将流量放大,黑客通常采取的是同时操控网络上大量的被其控制的主机,同时对某个网站设施集中打击,所以收集僵尸机成为了最开始的第一步,也是最关键的一步。通常,黑客们会采用无差别扫描,通过扫描器,对网络上大量的主机进行渗透检测,当发现某主机存在漏洞,即通过相关攻击手段获取该主机的控制权,拿权限的方法有很多,可能是上传木马病毒等方式,这里不展开介绍,当拿到控制权后,这台主机将成为僵尸机池里的一名成员,随时待命着。

2、发出指令

当黑客收集到足够的僵尸机后,那就到了最后设施的关键一步了,黑客远程对所有僵尸机下达指令,统一对目标网站进行访问

3、网站响应至宕机

当黑客完成指令下达后,僵尸机将开始持续统一地对网站发起无差别请求,这个时候,网站按正常的响应方式,一一对僵尸机的请求进行响应,随着请求越来越多,网站服务器达到其性能瓶颈,最后资源被耗尽,进入宕机状态,网络攻击成功

典型案例

假设有两个购物网站,阿猫网和阿狗网,阿猫网起家早,卖货生意非常火爆,而后来入局者阿狗网却一天天持续低迷,销量持续萎缩,眼看着对手在逐渐吃掉自己的市场份额,这个时候,啊狗网开始慌了,于是,在情急之下动了个歪主意,请了某网站的黑客,希望他帮忙想办法打压啊猫网,于是思来想去,黑客终于想到了一个非常可取的方案,那就是让阿猫网不定时宕机,影响消费者的好感度,进而打压其市场份额。于是黑客开始实施该方案,首先通过在网络上搭建钓鱼网站,诱骗安全意识较低的网民下载提前写好的具有高传播性的木马病毒,于是通过不断的传染复制,许多机子被病毒感染,等待数日后,黑客启动病毒控制程序,收集被感染的主机,加入僵尸机池,准备任务完成,然后黑客选了一个月黑风高夜,想所有主机发起指令,吹响总攻号角,于是,啊猫网不出所料应声宕机。。。。。。

防范措施

针对 DDOS,由于其访问并非同一台主机发起,无法对访问次数进行限制并封禁 IP ,因此在软件层面上是很难进行正对性防御的。

1、搭建负载均衡高性能服务器集群

DDOS 主要是利用大量的流量来冲垮服务器,那么我们可以采取增加服务器、搭建负载均衡的方式来对抗这类攻击,当然这样做的成本是巨大的,为了抵挡 DDOS 攻击,增加非常多的服务器设备,将是一笔非常大的开支,也增加了非常多的运维成本,一般不建议这么做

2、部署 CDN

CDN主要是能够使访问者按最近原则获取网页缓存内容,从而缩短访问速度,那么如果部署了 CDN ,DDOS 的访问流量首选就应该是走 CDN 而不是直接访问服务器了,这样一来也就能够利用 CDN 为网站抵挡一部分的攻击

3、部署安全厂商的防火墙

对于 DDOS ,各大安全厂商都做了相对应的防御型产品,当预算重置的情况下,部署防 DDOS 防火墙也是一个不错的选择

4、购买云 DDOS 高防服务

对于初创公司,没有自建机房,网站部署在云端的,可以采取购买对应云厂商的高防 DDOS 高防服务来对抗 DDOS,毕竟云厂商的数据中心设备资源量也是能够达到一定量级的,当发生 DDOS 攻击的时候,通过智能调度调配资源,也能够对 DDOS 达到有效的防御

垂直越权

什么是越权,越权顾名思义就是进行了超越权限限制的操作,而越权又分为垂直越权和水平越权,垂直越权指的是通过一系列的操作,最终以权限较低的账户,实现权限较高的操作。

攻击过程

20220614003416.png

1、普通账号登录

所谓越权,那就是得从自己的权限超越到权限之外嘛,那么第一步也就是需要先获取自己的权限,然后再通过一些特殊手段进行越权,获得其他的权限。黑客首先通过网站注册等方式,获得普通账号,使用普通账号登录,主要也就获得普通账号权限了

2、抓包分析

抓包分析是安全分析非常重要的手段之一,在这里我们不过多介绍,后期有机会专门进行解析。黑客通过对登录过程进行抓包分析,分析出服务器向前端传输的角色为明文传输,确定了攻击方式

3、修改角色

黑客确认了角色为明文传输后,便可以开始进行越权了,首先黑客打开数据包拦截工具,对使用普通账户登录时服务器返回的响应包进行拦截,当拦截到响应包之后,对响应包中的角色对于的字段进行修改,将角色修改为管理员等高权限角色,随后放行响应包,于是前端收到了角色为管理员的响应包并进行对应的渲染操作,至此,也就成功通过垂直越权的方式将普通账号权限提升到了管理员角色对应的操作权限

经典案例

假设有一个知识付费网站,然后它的机制是这样子的,该网站上上传了许多非常有用的技术参考文章,非常干货,而如果想要阅读这些文章,非常简单,“亲,只要成为我们站的超级大VIP会员,即可无限次、无限制浏览任何文章哦!!”,当看到这,黑客白了好几眼,于是黑客首先注册了一个普通账号,随机开启压箱底的 bp,接着,黑客按正常程序登录账号,观察登录的请求包和响应包,这时黑客观察到了一个另他非常兴奋的字段,“isVip”,很显然,这个字段表明了账号是否为 VIP 用户,而前端通过该字段判断是否有权限阅读文章,从而进行相关文章的拉去和渲染。于是,黑客修改了响应包,将 “isVip:true”,最终完美收场!!

防范措施

很明显,对于这种越权,主要导致的原因是前后端过于“偷懒”,对于权限验证相关的东西没有做足工作,才导致了能够简单得绕过登录进行提权,那么可以怎样防范呢?很简单,其实主要就一个,对于角色控制相关的参数应该做加密处理,或者增加多个隐藏字段来进行权限相关的验证,只有这样,对于角色的控制,才能够做到更加安全可靠。

水平越权

什么是水平越权,拆开来讲,水平,即同级别,相同水平,而越权则是超越权限的意思,也就是说水平越权是在同级别中用户中,以超越自身权限的方式访问其他资源。

攻击过程

批注 2022-06-15 004729.png

1、登录账号

为了能够通过水平越权获得其他账号的信息,那么首先需要进行登录,通过正常的操作流程,配合截包工具进行接口交互分析,寻找可能存在的越权突破口,为后面的攻击的实施做好铺垫。

2、服务器返回 id

当使用普通账号发起登录请求后,服务器收到登录请求后向数据库查询数据,验证账号密码并将对应的 id 返回。

3、抓包

在登录前我们需要事先开启抓包工具,对前端与服务器之间的通讯数据包进行监控。当登录成功后,服务器向前端回包,这个时候我们就能够通过抓包工具分析服务器向前端发送的数据包中是否包含权限设置相关的参数

4、发起数据请求并修改数据包,完成攻击

从抓包中,我们发现了服务器向前端发送的 id 为明文传输,并且 id 遵循一定的规律,能够轻松通过账号名猜测到,例如 username + id 等格式,于是,我们通过前端,发起信息请求,并通过截包工具将数据包拦截,将对应的 id 修改为其他账号对于的 id,最后放包,完成数据请求,服务器正常返回 id 对应的信息,至此,水平越权成功完成

经典案例

假设有某个云盘,提供给用户两个功能,一个是存储资料,一个是选择某些资料进行对外分享。某天,当黑客在晚上寻找学习课程的时候,偶然发现了某位热心网友分享的课程,黑客立刻打开看了看,没想到没看一小会,经典的东西终究还是出现了,首先视频开始没有声音,接着开始断断续续,前段接不上后端,最后弹出全屏大广告,“如需完整课程,请前往充值,成为超级 VIP,即可终身免费观看!!!”于是,一气之下黑客抄起家伙开始教做人。首先,黑客通过其分享的链接中的特征,猜测到该用户的相关 id,经过测试和调整,最终锁定 id 的形成规则,第二步,黑客打开截包工具,准备对前端的请求进行拦截,接着登录自己的账号,并对请求包进行修改,将 id 构造成“贩卖课程”的小子的账号对应的 id,放包进行请求,于是!!!于是黑客实现课程自由!!!

防范措施

对于水平越权,可以说是非常非常常见的漏洞了,相比于垂直越权,似乎并不那么严重,毕竟涉及到的并不是超级管理员权限,但是恰恰是这个原因,导致了许多开发者对这种安全问题视而不见,最终导致了相关信息的泄露,因此水平越权的防范也是开发中不可忽视的一部分。那么如何防范呢,首先需要特别注意的是,对于请求接口的设计,id 的安全处理至关重要,id 必须做到无法猜解,避免通过简单的修改请求包就能够更换请求的数据源;其次还可以对每个接口添加 token 验证,强制每个数据请求接口都必须验证 token 合法才能够进行请求,这样也就能够有效地降低水平越权

文件上传漏洞

什么是文件上传漏洞?文件上传漏洞是指网站中存在文件上传相关功能的模块出现的漏洞,主要的方式是用户通过上传了一个可执行的恶意文件,并通过此文件对服务器进行恶意操作和破坏。

攻击方式

批注 2022-06-17 225028.png 如图,看起来攻击的方式很简单,而这个过程却变化多端。首先服务器上搭建了一个 WEB 网站,而网站上存在一个可以上传文件的模块,和许多系统一样,这个模块的主要功能是上传头像图片,然后,这个时候,黑客“不走寻常路”,通过各种手段,绕过上传限制,上传了一个非图片的恶意文件到服务器上,然后通过恶意文件,最终成功控制服务器,至此服务器彻底沦陷。

上传限制绕过

1、前端绕过

作为前端应该再熟悉不过了,当我们选择了上传文件的组件的时候,会弹出文件选择框,而选择框则限制了我们能选择的类型,这个时候我们看起来似乎被简简单单的前端就给拦住了,而换个角度仔细一想,前端如何上传文件到后端的呢?数据包,没错,前端的限制依然可以通过修改数据包来绕过,怎么操作呢?很简单,我们先将恶意文件修改为合法的后缀名,接着通过 bp 对文件上传过程中的数据包进行截取,然后修改文件后缀名,最后放行数据包,绕过成功

批注 2022-06-17 231416.png

2、服务器文件类型检测绕过

说完前端绕过,那么后端其实也存在类似的文件类型检测,后端主要通过检测 content-type 字段,来判断上传的文件的类型,那么既然它想检测这个字段,那我们也就故技重施,将绕过前端的方法再用一次,依然通过BP 截取上传文件的数据包,然后对数据包进行修改,将content-type字段修改为合法字段,绕过成功

批注 2022-06-17 231646.png

3、文件头绕过

通过上两种方式的简单绕过,可见,对于文件类型的判断,已经无法阻止黑客的进攻了,于是,第三种高级一些的方式上场了。这种验证方式不对后缀名、文件类型做判断了,已经被打怕了,这种方式看起来更加隐蔽,也更有效果,他直接对文件的文件头进行检测。计算机基础稍微扎实点的掘友应该都知道,我们图片、文本、视频等所有的文件,最终都是以二进制的方式存在,而对于这些文件的类型,其实在其相对应的代码中也存在相关的区分特征,也就是所谓的文件头,因此,对这些文件头就行检测,是一个比检测后缀名更加安全的方式。

而所谓“道高一尺,魔高一丈”,当黑客知道了这种高级的过滤方式后,那随着而来的也就免不了相关的绕过技术了,针对这种方式,我们可以将“木马病毒”相关的代码段和图片等合法的文件方式进行糅合,将其合成为一个合法的文件,然后上传,最终通过执行该合法文件,间接执行恶意代码,绕过成功!

什么是 WebShell ?

顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作命令。webshell就是以 asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。而正是由于其便利性和功能强大,被特别修改后的 webshell 也被部分人当作网站后门工具使用,以达到控制网站服务器的目的。

攻击方式

批注 2022-06-18 171514.png

1、上传恶意脚本

首先,黑客通过文件上传漏洞,绕过了层层验证,将恶意脚本文件上传到了服务器中,为自己能够控制服务器做好了提前埋点

2、执行恶意脚本

在黑客决定想要上传哪一类恶意文件的同时,就应该思考,自己上传的文件将以什么方式来执行,从而获得服务器控制权,例如,该服务器为一个资源服务器,也就是说提供给用户存放资料的服务器,那么,当黑客上传了恶意文件后,黑客便可以通过浏览自己上传的文件,达到执行文件的目的。

3、连接服务器执行,执行恶意指令

当黑客成功将恶意及脚本上传到服务器并执行后,也就意味着这台服务器已经能够被远程控制了,那么这个时候,黑客将可以通过远程连接工具,按照预先在恶意脚本的连接埋点特征,连接该服务器,当成功连接到服务器后,黑客就能够对服务器进行“为所欲为”的指令操作了,至此攻击成功!

经典案例

最近某位舍友苦于某度云的会员太过于坑人,决定自己搭建云盘服务器,供我们自己日常存储相关的工具、资料,也能够在线浏览一些简单的文件,避免繁琐的下载过程。在某个“月黑风高夜”,当室友这个大技术宅已入睡,室友B 便开始伺机对该网盘系统进行渗透测试。

测试开始,首先 室友B 尝试直接上传恶意脚本代码,被成功拦截,提示为恶意文件并直接锁定访问 IP,接着,室友B 通过搭建VPN,更换了访问 IP 再次尝试,这次脚本代码被伪装成了图片格式,成功绕过 室友A 服务器的文件类型检测机制。接着室友B通过访问自己上传的带后门的图片,巧妙地执行了恶意脚本,开启了服务器远程控制机制,最后,室友B掏出熟悉的远控软件,输入特征码,Success!拿下!!!

防范措施

对于 WebShell 漏洞,其实最主要的问题其实是出现在文件上传以及文件执行上,那么当文件上传漏洞能够有效遏制以及任意文件执行的漏洞能够避免,那么,WebShell 漏洞出现的概率将会大幅降低。

转至YimWu : juejin.cn/post/711051…