网络安全课程论文
--浅谈XSS跨站脚本攻击的危害
姓名代雷波
学号:20103190
专业:网络工程
2013年5月21日
浅谈XSS跨站脚本攻击的危害
众所周知,网站中包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS)的威胁,而静态站点则完全不受其影响。
什么是XSS跨站攻击
跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶
意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。有关攻击方法的详细情况将在下面阐述。
那么到底什么是XSS呢?我这里简单的说一下,举例子HTML代码: <FONT SIZE=2>***</FONT>这是个简单的HTML的代码。这段代码的意思是设置字体大小为“2”,假设我想发表这个代码,我发表这个代码是显示给大家看,给用户看!但是浏览器误认为这是一段html代码,于是将它作为HTML代码进行执行,这时候我们发表的字体可能被这段代码修饰成了2号字体。也就是说这段代码被浏览器执行成了HTML语言,而不是直接输出来给用户看!不知道大家是否明白。再举例<script>alert(‘XSS’)</script>前天 18:09 上传下载附件 (2.89 KB)。这是一个最简单的javascript脚本语句,javascript是可以嵌入到HTML页面中,并且也会被执行,js脚本不仅可以在单个页面中执行,也可以单独作为js文件进行调用。那么是什么意思呢?它的含义就是弹出一个警告框,框中的内容为XSS。如下图:
假设我们想将代码输出给用户给大家看,但又被浏览器当成了javascript语言执行了,弹出一个提示内容为XSS的警告框,这就说明网站存在XSS跨站漏洞,它会将用户提交的特殊代码当成脚本语言去执行。不知道大家是否能听懂,就是我们提交一些js或者html代码却被浏览器当作脚本语言执行。
html获取input输入的数据XSS跨站攻击的类型
根据XSS跨站脚本攻击存在的形式及产生的效果,可以将其分为以下三类。
一、反射型XSS跨站脚本攻击
反射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式,该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
二、存储型XSS跨站脚本攻击
存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。如流行的Bo-Blog程序的早期版本中存在对用户提交评论数据过滤不严导致的XSS跨站脚本攻击漏洞,黑客可以在文章评论中提交插入恶意数据的UBB代码,提交后,Bo-Blog程序会将数据保存至数据库中,当用户浏览该日志时,就会执行插入的恶意代码,如图3所示。
三、基于DOM的XSS跨站脚本攻击
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。让我们来针对如下代码进行详细分析:
<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{
varstr = ElementById("input").value;
ElementById("output").innerHTML = "<imgsrc='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="提交" onclick="xsstest()" />
</body>
</html>
以上代码的作用是提交一个图片的URL地址以后,程序会将图片在页面中进行展示,如我们提交百度LOGO图片的地址www.baidu/img/baidu_sylogo1.gif,那么在页面中展示结果如下图4所示。
三、基于DOM的XSS跨站脚本攻击
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。让我们来针对如下代码进行详细分析:
<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{
varstr = ElementById("input").value;
ElementById("output").innerHTML = "<imgsrc='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="提交" onclick="xsstest()" />
</body>
</html>
以上代码的作用是提交一个图片的URL地址以后,程序会将图片在页面中进行展示,如我们提交百度LOGO图片的地址www.baidu/img/baidu_sylogo1.gif,那么在页面中展示结果如下图4所示。
XSS跨站攻击危害
盗取用户的cookies
XSS跨站漏洞不仅仅是弹框,而且可以盗取用户的cookies。说到cookies,我这里就要解释下了什么是cookies。举例说明:我们登录到红客联盟论坛时候,记住了密码,下次我们再登录的时候就不需要再次输入帐号密码了,这是因为浏览器读取了我们电脑上的cookies文件,
验证了我们的帐号密码。所以我们无需输入密码就可以。这种cookies是保存在硬盘中的!还有一种应该是保存在内存中,举例说我们登录了红客联盟,然后我们在QQ里面看到了一个帖子地址,地址是红客联盟的某个帖子地址,我们在QQ里点开了该地址,一个新的浏览器窗口打开了,但是会发现我们已经登录了红客联盟的号。但是一旦关闭登录了红客联盟的网站窗口,再次登录时候就需要输入帐号密码。再举例说明:我们登录某网站后台,输入了帐号密码,然后将后台的一个配置页面复制到浏览器地址上,然后回车!会发现不需要验证你的后台帐号密码了,这是因为读取了内存中的cookies,已经验证你的身份了。这就是cookies!下面则是上面所说特殊代码被浏览器执行了弹出了cookies~
我已经说明了cookies的作用,很可悲的是!cookies是可以改的,具体这么改?可以使用火狐浏览器、明小子、啊D注入工具去修改!一段代码<script>alert('kies')</scrip
t>前天 18:09 上传下载附件 (3.99 KB)。这段代码是js的代码,意思是弹出一个框子,框中的内容是用户的cookies信息。如果你学过js脚本等语言就知道,对于一个存在XSS跨站漏洞的网站,黑客是可以编造出脚本代码盗取用户的cookies,特别是盗取管理员的cookies!
黑客怎么盗取用户的cookies
举例说明这一个例子:比如某个论坛发帖子存在XSS跨站漏洞,黑客就会在里面发一个脚本代码的帖子,当管理员浏览到这个页面的时候,页面被执行了黑客所发表的js代码,管理员的cookies马上就会被黑客收取,黑客收取之后登录网站的后台,然后将cookies修改为盗取的管理员的cookies,再次刷新页面会发现居然进去了后台!这是因为网站验证了用户的cookies是管理员的,所以允许进入后台操作!那么这些代码这么来?又如何发送给黑客?具体我也不是很清楚,但我知道08小组开发了一套XSS跨站的平台,我也没有邀请码,但是具体流程可能是这样的:在XSS跨站平台中,设置黑客用于接受cookies的邮箱地址,然后生成一段脚本代码,这段代码的含义是:无形中悄悄输出用户的cookies到某个文件中,然后读取该文件中的cookies信息,发送到指定的邮箱中。试着想一想,发在某个留言板中,当管理员看到了,那么管理员的cookies就被盗取了,黑客再进入后台修改cookies,浏览器验证cooki
es信息为管理员的,则无需输入帐号密码直接进入后台!进了后台干嘛,我想黑客一定想得到webshell~
XSS跨站脚本攻击的防范
通过以上针对不同种情况的XSS跨站脚本攻击的描述,我们了解到了在复杂的Web环境中,XSS的利用是千变万化的,如何能够有效地防范XSS跨站脚本攻击问题一直都是浏览器厂商和网站安全技术人员关注的热门话题。现在很多浏览器厂商都在自己的程序中增加了防范XSS跨站脚本攻击的措施,如IE浏览器从IE8开始内置了XSS筛选器,Firefox也有相应的CSP、Noscript扩展等。而对于网站的安全技术人员来说,提出高效的技术解决方案,保护用户免受XSS跨站脚本攻击才是关键。下面我们结合网站安全设计,描述一下如何通过技术手段实现XSS跨站脚本攻击的防范。
利用HttpOnly