首页
学习
活动
专区
圈层
工具
发布
27 篇文章
1
Kali Linux Web渗透测试手册(第二版) - 6.8 - 检测和利用命令注入漏洞
2
Kali Linux Web渗透测试手册(第二版) - 6.7 - 利用XML外部实体注入
3
Kali Linux Web渗透测试手册(第二版) - 6.4 - 基于错误的SQL注入
4
Kali Linux Web渗透测试手册(第二版) - 6.3 - 手动识别SQL注入
5
Kali Linux Web渗透测试手册(第二版) - 6.2 - 文件包含和文件上传
6
Kali Linux Web渗透测试手册(第二版) - 5.7 - 使用ZAP测试WebSokets
7
Kali Linux Web渗透测试手册(第二版) - 6.6 - 使用SQLMap查找和利用SQL注入
8
Kali Linux Web渗透测试手册(第二版) - 7.3 - 利用metasploit创建并反弹shell
9
Kali Linux Web渗透测试手册(第二版) - 6.1 - 寻找文件包含漏洞
10
Kali Linux Web渗透测试手册(第二版) - 2.8 - 利用robots.txt
11
Kali Linux Web渗透测试手册(第二版) - 5.3 - 利用XSS获取Cookie
12
Kali Linux Web渗透测试手册(第二版) - 3.9 - WebScarab的使用
13
Kali Linux Web渗透测试手册(第二版) - 9.7 - 通过HTTP头利用漏洞
14
Kali Linux Web渗透测试手册(第二版) - 9.2 - 对跨站脚本攻击(xss)进行混淆代码测试
15
Kali Linux Web渗透测试手册(第二版) - 9.1 - 如何绕过xss输入验证
16
Kali Linux Web渗透测试手册(第二版) - 8.4 - 使用OWASP ZAP进行扫描漏洞
17
Kali Linux Web渗透测试手册(第二版) - 9.6 - 利用HTTP参数污染
18
Kali Linux Web渗透测试手册(第二版) - 9.4 - 绕过web服务器的CORS限制
19
Kali Linux Web渗透测试手册(第二版) - 9.3 - 绕过文件上传限制
20
Kali Linux Web渗透测试手册(第二版) - 8.8 - 使用CMSmap扫描Drupal
21
Kali Linux Web渗透测试手册(第二版) - 8.7 - 使用JoomScan扫描Joomla中的漏洞
22
Kali Linux Web渗透测试手册(第二版) - 8.3 - 使用Wapiti发现漏洞
23
Kali Linux Web渗透测试手册(第二版) - 7.8 - 使用Hashcat暴力破解密码哈希
24
Kali Linux Web渗透测试手册(第二版) - 7.6 - 使用Tomcat管理界面执行代码
25
Kali Linux Web渗透测试手册(第二版) - 7.5 - Windows提权
26
Kali Linux Web渗透测试手册(第二版) - 7.4 - Linux上的权限提升
27
Kali Linux Web渗透测试手册(第二版) - 7.2 - 通过利用Shellshock执行命令

Kali Linux Web渗透测试手册(第二版) - 9.2 - 对跨站脚本攻击(xss)进行混淆代码测试

9.2、对跨站脚本攻击(xss)进行混淆代码测试

在前面的小节中,我们遇到了一种过滤机制,他会自动删除一些常见的JavaScript标签。

<script> 不是XSS攻击的唯一标签,另外JavaScript代码在大小写和结构方面和HTML具有相似性,一些过滤器会去试图限制一些JavaScript代码,如:alert,cookie和document等。

在这小节中,我们将学习一种比较有趣的方法,即使用JSFuck来混淆代码(http://JSFuck.com)。

实战演练

在这小节中,我们将使用到已包含在OWASP BWA中的一个应用程序作为虚拟机:

1. 首先,我们在应用程序处的XSSmh菜单处选择XSS沙盒。在这里,我们可以使用自定义类型设置一个易受XSS攻击的字段。

2. 在我们这个例子中,我们将使用最后一个级别:区分大小写,匹配关键字,删除重复字段。

3. 在参数设置中,我们需要加入一个关键字或字符匹配的黑名单,如:alert,doucument,cookie,href,location,src。这将极大的限制攻击者利用应用程序的行为。

4. 具体输入部分,如下图所示:

5. 现在测试一个普遍使用的弹框出COOKIE信息的命令,如下:

正如你所见,它并不会执行弹框。这是因为你刚才设置的过滤机制的原因。

6. 为了绕过这种保护,我们需要找到一种方法来混淆代码,使其得到验证机制的批准,并且仍然被浏览器识别和执行。这就是JSFuck发挥作用的地方了。在你的浏览器中,打开http://jsfuck.com这个网站。该站点描述了这种语言以及它是如何生成的只有六个不同字符的JavaScript代码,也就是:

  • [
  • ]
  • (
  • )
  • +
  • !

7. 你还会发现这个站点有一个表单可以将普通JavaScript转换为JSFuck表示。尝试转换alert(document.cookie),这将是我们需要使用的攻击载荷。如下面的屏幕截图所示,这个简单的字符串生成了将近13000个字符的代码,这对于GET请求来说太多了,我们需要找到一种方法来减少这个数量:

8. 我们所能做的是不混淆整个有效载荷,而只是绕过限制的必要部分。确保Eval Source选项没有设置,并混淆以下字符串:

  • ert
  • d
  • e

9. 现在,我们将把混淆的代码集成到一个完整的有效载荷中。由于JSFuck输出被JavaScript引擎解释为文本,因此我们需要使用eval函数来执行它。最终有效载荷如下:

<script>eval("al"+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+"('XSS

10. 在注入字符串中插入有效负载并单击Inject。代码的执行方式如下:

原理剖析

通过混淆有效载荷,我们能够绕过基于单词和字符识别的安全机制。我们选择使用JSFuck语言来混淆代码,因为它实际上就是JavaScript。

JSFuck通过操作布尔值和预定义常量来形成可打印字符来混淆代码,例如,获得字符a:

  1. a是false的第二个字母,它也可以表示为数组的第二个元素:false[1]
  2. 它也可以表示为(false+[])[1]
  3. 同样,false作为布尔值,是对空数组的非操作![]。因此,上面的表达式也可以是(![]+[])[1]。
  4. 数字1也可以是+true,因此(![]+[])[+true]
  5. 最后,我们都知道真是假的非操作,那么!![],最后一个字符串是(![]+[])[+ ! ![]]

我们只对每个被列入黑名单的单词的几个字母使用了混淆,所以我们没有创建太大的负载,但是我们也能够绕过它。当这种混淆产生一个字符串时,我们需要使用eval来指示解释器将该字符串视为一段可执行代码。

下一篇
举报
领券