课程编写类别内容实验课题名称HTTP攻击与防范-跨站攻击-01简介实验目的与要求1、掌握WEB渗透测试跨站攻击原理2、了解WEB站点的跨站攻击脆弱性3、修复存在跨站攻击可能的漏洞实验环境VPC1(虚拟PC)Windowsserver2003VPC1连接要求PC网络接口,本地连接与实验网络直连软件描述1、学生机要求安装java环境2、vpc安装windwos系统实验环境描述1、学生机与实验室网络直连;2、VPC1与实验室网络直连;3、学生机与VPC1物理链路连通;预备知识XSS又叫CSS(CrossSiteScript),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。XSS原理图跨站脚本攻击(cross-sitescripting,XSS)发生在客户端,恶意代码在服务器上,用户点击此链接,恶意代码注入浏览器,从而达到攻击效果。跨站攻击多是窃取cookie的信息。XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式。因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决。那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了有针对性的具体实例分析。跨站脚本攻击(CrossSiteScripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。为了与层叠样式表(CascadingStyleSheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。XSS原理(1)嵌入非法的html标签;(2)嵌入JavaScript;(3)flash的actionscript脚本。注入的标签和脚本都在客户端浏览器执行。XSS实例攻击者给查询参数q增加了恶意构造的值(跨站代码:=scriptalert(document.cookie)script)如果服务端在返回的结果页面中,将用户提交的内容进行了原样的显示,那么访问这个链接时会弹出你的Cookie信息.XSS危害:(1)钓鱼欺骗;(2)网站挂马;(3)身份盗用;(4)xss蠕虫。XSS解决方案(1)假定所有输入出都是可疑的。对http请求头部的变量,cookie中的变量检查。(2)验证数据的类型,格式,长度,范围和内容。(3)在服务器端过滤。XSS跨站脚本攻击的分类及类型根据XSS跨站脚本攻击存在的形式及产生的效果,可以将其分为以下三类。一、反射型XSS跨站脚本攻击,非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。反射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式,该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。二、存储型XSS跨站脚本攻击,也称为持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。如流行的Bo-Blog程序的早期版本中存在对用户提交评论数据过滤不严导致的XSS跨站脚本攻击漏洞,黑客可以在文章评论中提交插入恶意数据的UBB代码,提交后,Bo-Blog程序会将数据保存至数据库中,当用户浏览该日志时,就会执行插入的恶意代码,如图所示。三、基于DOM的XSS跨站脚本攻击,DOM跨站(DOMXSS):DOM(documentobjectmodel文档对象模型),客户端脚本处理逻辑导致的安全问题。基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascriptDOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。基于DOM的XSS漏洞反射型和保存型XSS漏洞都表现出一种特殊的行为模式,其中应用程序提取用户控制的数据并以危险的方式将这些数据返回给用户。第三类XSS漏洞并不具有这种特点。在这种漏洞中,攻击者的JavaScript通过以下过程得以执行。用户请求一个经过专门设计的URL,它由攻击者提交,且其中包含嵌入式JavaScript。服务器的响应中并不以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,上述脚本得以处理。这一系列事件如何发生呢?由于客户端JavaScript可以访问浏览器的文本对象模型(DocumentObjectModel,DOM),因此它能够决定用于加载当前页面的URL。由应用程序发布的一段脚本可以从URL中提取数据,对这些数据进行处理,然后用它动态更新页面的内容。如果这样,应用程序就可能易于受到基于DOM的XSS攻击。回到前面的反射型XSS漏洞中的示例,其中服务器端应用程序将一个URL参数值复制到一条错误消息中。另一种实现相同功能的办法是由应用程序每次返回相同的静态HTML,并使用客户端JavaScript动态生成消息内容。例如,假设应用程序返回的错误页面包含以下脚本:/这段脚本解析URL,提取出message参数的值,并把这个值写入页面的HTML源代码中。如果按开发者预想的方式调用,它可以和前面的示例中一样,用于创建错误消息。但是,如果攻击者设计出一个URL,并以JavaScript代码作为message参数,那么这段代码将被动态写入页面中,并像服务器返回代码一样得以执行。在这个示例中,前面示例中利用反射型XSS漏洞的相同URL也可用于生成一个对话框:=scriptalert(''xss'');/script利用基于DOM的XSS漏洞的过程如图所示。与保存型XSS漏洞相比,基于DOM的XSS漏洞与反射型XSS漏洞有更大的相似性。利用它们通常需要攻击者诱使一名用户访问一个包含恶意代码的专门设计的URL,并由服务器响应那个使得恶意代码得以执行的特殊请求。但是,在利用反射型与基于DOM的XSS漏洞的细节方面,还存在一些重要的差异,这点我们在稍后讨论。CSRF(Cross-siterequestforgery跨站请求伪造,也被称成为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。实验内容1、掌握跨站攻击的基本原理2、了解WEB站点的脆弱性-XSS3、通过掌握的只是能够修复XSS的漏洞实验步骤1、学生单击实验拓扑按钮,进入实验场景,进入目标主机,(第一次启动目标主机,还需要安装java控件),如图所示:2.打开虚拟机,输入用户名和密码,用户为adminsitrator密码为1234563.、打开IE浏览器,输入,即可登录如图所示页面:4.我们使用的跨站脚本演示环境如下:5.查看跨站脚本演示目录的结构,点击开始-运行-输入cmd,打开命令提示符6.进入dos窗口,输入:cd\xampp\htdocs\xss7.查看代码文档结构树,输入命令如下:tree/f8.查看文档info.php代码,输入命令如下:typeinfo.php9.查看文档index.php代码,输入命令如下:typeindex.php10.切换到IE浏览器窗口11.演示反射型跨站脚本攻击漏洞:正常情况下,用户会在URL中提交参数name的值为自己的姓名,然后该数据内容会通过以上代码在页面中展示,如用户提交姓名为“张三”,完整的URL地址如下:=张三点击”反射型XSS跨站脚本攻击漏洞”,在浏览器中访问时,会显示如下图1所示内容:12、此时,因为用户输入的数据信息为正常数据信息,经过脚本处理以后页面反馈的源码内容为p欢迎您,张三!/p。但是如果用户提交的数据中包含有可能被浏览器执行的代码的话,会是一种什么情况呢?我们继续提交name的值为scriptalert(/我的名字是张三/)/script,即完整的URL地址为=scriptalert(/我的名字是张三/)/script我们点击后退按钮,进入xss跨站攻击演示环境13.我们点击“反射型XSS跨站脚本攻击”链接,在浏览器中访问时,我们发现会有弹窗提示,如下图所示:14、那么此时页面的源码又是什么情况呢?源码变成了“p欢迎您,scriptalert(/我的名字是张三/)/script!/p”,从源代码中我们发现,用户输入的数据中,script与/script标签中的代码被浏览器执行了,而这并不是网页脚本程序想要的结果。这个例子正是最简单的一种XSS跨站脚本攻击的形式,称之为反射型XSS。15、在对一个网站进行安全检测的时候,检测者并不知道被检测的网站使用的是什么数据库及网页程序语言,需要对其进行一些手动探测。点击刚才弹出的窗口“确定”按钮。16.点击后退按钮,进入xss跨站攻击演示环境17.切换到dos窗口,我们查看一下“基于DOM的XSS跨站脚本攻击”的演示环境代码18.输入命令,typeDOM_Based_XSS_Demo.php19.切换到IE浏览器窗口20.我们点击“基于DOM的XSS跨站脚本攻击”链接21.以上代码的作用是提交一个图片的URL地址以后,程序会将图片在页面中进行展示,如我们提交图片的地址:,那么在页面中展示结果如下图所示。22.当用户输入完的地址,点击“提交”按钮后,“提交”按钮的onclick事件会调用xsstest()函数。而xsstest()函数会获取用户提交的地址,通过innerHTML将页面的DOM节点进行修改,把用户提交的数据以HTML代码的形式写入页面中并进行展示。以上例子中输出的HTML代码为“imgsrc=””/img”。23.以上情况为正常的用户输入情况,那黑客又是怎么利用该种类型代码实现XSS跨站脚本攻击的呢?黑客可以通过构造如下数据,输入:#'onerror='javascript:alert(/DOMBasedXSSTest/),在浏览器中提交后,发现代码果然被执行,出现了弹窗提示,如下图所示。24、实验完毕,关闭虚拟机和所有窗口。