跨站脚本攻击XSS
跨站脚本攻击概念介绍
XSS全称(Cross Site Scripting
)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017
年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript
编写的危险代码(payload
),当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。
从上面中的一段话,可以得知,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。
XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码, 最常用的攻击代码是javascript
语言,但也会使用其它的脚本语言,例如:ActionScript
、VBscript
。而如今的互联网客户端脚本基本是基于Javascript
, 所以如果想要深入研究XSS,必须要精通Javascript
。
XSS换句话说,JavaScrip
t能做到什么效果,XSS的胃口就有多大。这完全不是危言耸听。javascript
可以用来获取用户的cookie
,弹出窗口,那么存在XSS漏洞的网站,XSS就可以用来盗取用户Cookie
, 废掉页面,导航到恶意网站!更高端的XSS代码完全可以进行监控你的键盘操作,模仿Windows
注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入Javascript
代码!
xss跨站漏洞产生原理,危害,特点:
本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本等。
跨站脚本攻击产生原因
程序对输入和输出的控制不够严格, 导致"精心构造“的脚本输入后, 在输到前端时被浏览器当作有效代码解析执行从而产生危害。
简单的页面测试:http://192.168.100.54/pikachu/
‘”><script>alert(123456) </script>
源网页代码信息
$html='';
if(isset($_GET['submit'])){
if(empty($_GET['message'])){
$html.="<p class='notice'>输入'kobe'试试-_-</p>";
}else{
if($_GET['message']=='kobe'){
$html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
}
}
}
跨站脚本攻击造成危害
-
首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
-
劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
-
“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
-
挂马(水坑攻击)
-
有局限性的键盘记录
跨站脚本攻击分类介绍
反射型XSS或不持久型XSS(中危漏洞)
交互的数据一般不会被存在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。
如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞。通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文本返回给用户。
<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
?>。
存储性XSS或持久型XSS(高危漏洞)
交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。
DOM XSS(低危漏洞/中危漏洞)
不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。
什么是DOM:DOM全称是Document Object Model
,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript
语言来操作DOM以达到操作网页的目的。
http://www.w3school.com.cn/htmldom/index.asp
<a href='"+str+"'>what do you see?</a>
<a href='#' onclick="alert(1111)">what do you see?</a>
<a href='#' onclick="alert(2222)">what do y