XSS知识

Posted by  "star" on Friday, February 8, 2019

TOC

XSS的分类

1.反射型XSS

通过在页面上植入恶意链接,诱使用户点击,执行js脚本,所谓反射型XSS就是将用户输入的数据(恶意用户输入的js脚本),“反射”到浏览器执行。
攻击步骤:
(1)用户正常登录web应用程序后,获得一个cookie
(2)攻击者将含有攻击代码的URL发送给用户
(3)用户打开URL
(4)Web服务器执行该URL中用户的请求,同时执行该URL中所包含的的JavaScript代码
(5)攻击者可以使用的攻击代码的的可以将用户的cookie信息发送到cookie_save.php
(6)攻击者获得用户的cookie之后可以将这些信息进行登录.

打个比喻alert(“XSS”),如果换成inframescr=http://127.0.0.1.exe),如果http://127.0.0.1.exe是一个木马之后浏览这个页面的网站管理员跟用户都会感染木马

2.存储性XSS

此类XSS漏洞是指,用户输入的数据(恶意代码)可以“存储”在服务端,只要有人访问这个包含有存储型XSS代码的页面,XSS脚本就会在他们的浏览器中执行,这种XSS具有很强的稳定性。所以也被称做,“持久型XSS”。
攻击步骤:
(1)攻击者将含有攻击代码嵌入应用程序。
(2)用户打开URL,正常登录web应用程序后,获得一个cookie
(3)Web服务器执行该URL中用户的请求,同时执行该URL中所包含的的JavaScript代码
(4)攻击者可以使用的攻击代码的的可以将用户的cookie信息发送到cookie_save.php
(5)攻击者获得用户的cookie之后可以将这些信息进行登录.

3.DOM型XSS

用户可以从一个表单页提交数据,数据提交到服务期端后进行html编码后保存到数据库,然后有个修改这个提交信息的页面,会把信息从数据库里查询出来,填充到INPUT控件的VALUE属性里,来达到一个展示现有数据的效果。这里的数据在输出到value之前经过html编码的,所以输出到value里没有跨站的问题,但是这里程序为了实现一个其他功能,加了段js脚本,脚本取得前面提到的INPUT控件的VALUE,进行了一系列的动作和条件判断后,符合条件的话就把这个VALUE值放到一个DIV的INNERHTML里,这一放就放出了一个跨站问题来。可能你比较奇怪,不是VALUE里的值被HTML编码过了么,为什么这里还有问题呢,其实如果源代码是VALUE="<a>",虽然经过HTML编码,但是用脚本通过DOM的方式来取得VALUE的值的时候,又会被解码。

XSS的传播方式

1.可以通过邮件或者某些其他的通讯方式,给受害者发送一个含有恶意URL的链接
2.在一些热门网站的评论区进行恶意Javascript代码插入
3.可以创建一个网站之后让所有人都可见,以便于对用户发起XSS攻击(GET或者POST请求)进行跨域

XSS的影响

XSS受影响程度取决于受攻击的人,其包含的数据和功能会不会影响同一个域内的其他人或者其他应用程序.如果是在某一个不重要的位置,例如某个不敏感而且没有身份验证或者控制访问的地方,XSS几乎没有什么用.如果是在关键的地方,例如cookie里面,这样就会威胁到其他的应用程序所以被判定为危险.同样如果XSS被用到钓鱼上面,那么XSS就会增加用户的信任,同时安全软件也不会警告.从而使用木马进行进一步攻击。

XSS的防御

1.对输入和URL参数进行过滤(白名单和黑名单)
2.对输出进行编码(对潜在的威胁的字符进行编码、转义)
3.设置httponly(XSS一般利用js脚步读取用户浏览器中的Cookie,而如果在服务器端对Cookie 设置了httponly属性,那么js脚本就不能读取到cookie)

「真诚赞赏,手留余香」

Star's Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付