| 关键词: 用户 漏洞 攻击者 网站 攻击 浏览器 定位 CSS SQL 个人简介 |
漏洞产生的原因主要有系统机制和编码规范两方面,由于网络协议的开放性,目前以 Web 漏洞居多关于系统机制漏洞的典型有JavaScript/CSS history hack,而编码规范方面的漏洞典型有心血漏洞(Heart Bleed)。 JavaScript/CSS history hack 漏洞漏洞影响:攻击者能够获取用户浏览器的某些历史记录。 攻击原理:利用浏览器自动查询历史记录,以及CSS对访问过的和未访问过超链接样式的不同渲染。比如 百度 这个链接是紫色,因为你最近访问过百度。而 自建CA证书搭建https服务器 这个链接是黑色,因为你当前没有访问过我上一篇博客。如果是紫色,删除访问历史后刷新会变成黑色。 攻击方法:由于JavaScript可以读取任何元素的CSS信息,所以能分辨浏览器应用了哪种样式从而判断用户是否访问过该链接。攻击者可以搭建自己的网站,在上面定义一些网站的超链接。当其他用户访问该网站时,浏览器会自动根据用户的历史记录判断哪些网址曾经访问过,从而以不同颜色呈现给用户。 攻击者的网站后台可以将用户访问过的网站发回给服务器,达到的效果是能够检测用户是否访问过某个网站,但并不是直接获取用户访问的历史记录。 该漏洞已被修复,如今虽然能够看到对超链接状态的不同显示,但是js已无法获取到其中的颜色差异。 Heart Bleed漏洞又称为心脏出血漏洞,编号(CVE-2014-0160) 漏洞由来:该漏洞由谷歌白帽子尼尔·梅塔(Neel Mehta)提出,他可从特定服务器上随机获取64k的工作日志,整个过程如同钓鱼,攻击可以一次次持续进行,大量敏感数据会泄露。 产生原因:编码时未能在memcpy()调用用户输入的内容前,对长度进行边界检查。攻击者可以输入超出范围的字节,再返回等长的缓存内容。 攻击方法: 每次问询都会附加一个问询的字符长度,如果这个字符长度大于实际的长度,服务器仍是会返回相同规模的字符信息,于是形成了内存里信息的越界访问。 漏洞影响:每发起一个心跳,服务器就能泄露一点点数据(理论上最多泄露 64K),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密密钥等信息,也可能并没有包含这些信息,但攻击者可以不断利用 “心跳”来获取更多的信息。就这样,服务器一点一点泄露越来越多的信息,就像是心脏慢慢在出血,心脏出血的名字由此而来,漏洞目前已修复,但该漏洞被提出之前是否已被利用就不得而知。 以上是两种类型漏洞的简单介绍,以下将对CSS欺骗、SQL注入与CSRF攻击进行实验 CSS欺骗正如名字一样,CSS欺骗主要是作为一种欺骗手段,给浏览器用户呈现出虚假信息。 欺骗原理:通过CSS定位方式和伪类,实现网页内容覆盖 html如人的骨骼,css是外表装饰,js控制页面的效果类似神经,CSS欺骗主要是利用CSS对页面的渲染。 定位方式和伪类简介CSS对网页元素的定位方式有以下四种:
常用定位方式:子绝父相
CSS伪类可以与 CSS 类配合使用,有anchor伪类、first-child伪类等。 如anchor伪类:
欺骗案例:早年的淘宝店铺装修直接使用css控制页面显示效果,有商户就此制作虚假店铺信息。 以下是2012年前后的一家店铺信息 ![]()
![]()
![]()
![]()
![]()
为什么说CSS欺骗虽然简单但是应用广泛? 就个人网页浏览经历而言,在4G之前或者4G刚开始那个时候,这种利用图片做虚假页面是很常见的。 最近一次是2018年双十一时候,在某电商平台申请退款,商家一直不理会,在平台进行投诉时发现提交投诉的按钮怎么点都没反应。一开始以为是手机显示不兼容,后来发现那个页面下半部分是张图片,提交按钮只是图片的一部分。 不过双十一也可以理解,但是就大多数没什么计算机基础的网民而言,CSS欺骗还是很有效的。 下面将会先介绍SQL注入,然后再将CSS欺骗与SQL注入结合,在搭建的测试网站上实现利用SQL注入前端代码进行CSS欺骗。 SQL注入SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,是目前最常见危险的漏洞之一。 SQL注入不是一个过期的安全问题,恰恰相反,它是一种非常容易被使用的攻击方式,SQL注入并不需要高深的攻击手段便可以轻易使敏感的数据库信息被非法浏览或删除。 一般注入过程:
网站搭建与SQL注入测试如果有简单网站的搭建经验,只需要理解了SQL注入的原理,就可以构建自己的测试。 ![]()
![]()
以下有两种SQL注入可以使得自己的zoobars变多:
方法一注入代码: ![]()
![]()
第4、5行的$sql值是数据库要执行的语句,方法1使得实际执行的sql语句变成了: 方法二由于场景不同,有时候会使用方法二注入,仅修改网页的显示进行CSS欺骗: ![]()
注入代码: ![]()
![]()
CSRF攻击CSRF(Cross-site request forgery),即跨站请求伪造。 引诱浏览器用户访问自己的攻击网站进行跨站访问,通过浏览器保存用户原网站cookie的机制,在攻击网站获取用户的身份权限并伪造请求进行攻击。 浏览器机制: 与JavaScript/CSS history hack不同的是,CSRF暂时无法像修改CSS或JS引擎那样进行漏洞修补,因为目前的浏览器需要这种机制。 场景模拟:程序员登录博客园浏览博客,发现一篇不错的博客后打算分享到朋友圈,但第一次分享时网页会要求先登录朋友圈。当登录分享成功后,没过多久程序员又发现一篇不错的博客,打算再次分享,以此往复循环,浏览器会怎么做? 目前浏览器的机制是会在第一次登陆后保存用户的cookie,使得用户在有效期内不必反复认证身份,所以后续的跨站不需要再登录。(没有实际操作过,也可能博客园分享每次都需要登录,只是举个例子模拟网页跨站情景) 浏览器保存cookie的机制是需要的,但同时给了攻击者可乘之机。 web中用户身份验证的漏洞: 也就是说,用户的浏览器发送了一条请求,同时浏览器的cookie也能证明用户身份,但是并不能保证这条请求是用户主动在原网站上进行的操作。 以搭建的网站为例进行攻击演示攻击步骤:
搭建网页 原网页与代码: ![]()
攻击者需要制作一个自己的网站,在网站上编写攻击操作。 攻击网页与代码: ![]()
然后在个人简介里注入一个超链接: 网址是攻击者自己的网站 ![]()
![]()
![]() ![]()
应对CSRF攻击的方法有很多,有一种是可以通过检查请求的Referer字段判断请求的来源网站,不过这是一个攻防的过程,攻击者也有可能进一步攻击篡改Referer字段。 小结
|
| 本文出处: https://www.toutiao.com/a6773914279486685700/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|