XSS漏洞-手动挖掘(四)

1.1 Stage 9 UTF-7编码注入XSS

http://xss-quiz.int21h.jp/stage_09.php?sid=e65bbb1a82573cd9e16ad710a7d7a259226deecf

因为现在都使用UTF-8编码且没有ie7的环境而且当前漏洞在实际场景中几乎没有利用价值,我们下面跳过该关卡:

在id字段后添加事件: onclick= “alert(document.domain)”

图片[1]|XSS漏洞-手动挖掘(四)|leon的博客

点击hint的提示信息就会弹出域名,从而跳过该关卡。

1.2 Stage 10 绕过关键字domain注入XSS

http://xss-quiz.int21h.jp/stage00010.php?sid=a2b30459133383d75b93e0b2b6da09f1af726f04

1.2.1 页面分析

图片[2]|XSS漏洞-手动挖掘(四)|leon的博客

1.2.1.1 分析过程

  1. 提示信息:关键字domain被替换为空

1.2.1.2 尝试注入

可以发现关键字domain被替换为了空:

图片[3]|XSS漏洞-手动挖掘(四)|leon的博客

1.2.2 双写绕过注入测试

1.2.2.1 构建payload

我们根据前面学习SQL注入的绕过技巧,使用双写绕过尝试进行注入:

"><script>alert(document.dodomainmain)</script>

1.2.2.2 执行payload

图片[4]|XSS漏洞-手动挖掘(四)|leon的博客

1.2.3 编码绕过注入测试

1.2.3.1 使用burpsuite对payload进行base64编码

图片[5]|XSS漏洞-手动挖掘(四)|leon的博客

编码后payload:

"><script>YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==</script>

1.2.3.2 构建payload

这里页面中是不会对我们加密的字符串进行解密的,所以直接使用加密后的代码是不能够被执行的,我们需要使用解密函数对字符串进行解密再进行执行。

"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

【payload解析】:

  • atob():将base64加密后的字符串进行解密还原为alert(document.domain);
  • eval():可计算某个字符串,并执行其中的的JavaScript 代码;

1.2.3.3 执行payload

图片[6]|XSS漏洞-手动挖掘(四)|leon的博客

1.3 Stage 11 绕过script和on关键字过滤注入XSS

http://xss-quiz.int21h.jp/stage11th.php?sid=92cf8e08ff2953b4323487859fbdc88d9c15bf85

1.3.1 搭建本地关卡

公网此关已经无法访问,所以自建此关进行测试:

1.3.1.1 上传文件到/var/www/html

[root@web html]# pwd
/var/www/html
[root@web html]# ls
stage11th.php  style.css

1.3.1.2 启动apache

[root@web ~]# systemctl start httpd

1.3.2 页面分析

图片[7]|XSS漏洞-手动挖掘(四)|leon的博客

1.3.2.1 分析过程

  1. 提示信息:将script替换为xscript;将on[a-z]+=替换为onxxx=;将style=替换为stxxx=;
s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;

script:主要过滤我们直接插入的JavaScript代码

on:可以过滤掉事件

1.3.2.2 尝试普通注入

直接使用”><script>alert(document.domain)</script>进行注入尝试,我们看到script被过滤成了xscript:

图片[8]|XSS漏洞-手动挖掘(四)|leon的博客

1.3.2.3 尝试使用javascript注入

"><a href="javascript:alert(document.domain);">xss</a>

发现javajcript也会被过滤成javaxscript:

图片[9]|XSS漏洞-手动挖掘(四)|leon的博客

1.3.2.4 尝试添加空格绕过过滤

"><a href="javas   cript:alert(document.domain);">xss</a>

图片[10]|XSS漏洞-手动挖掘(四)|leon的博客

查看代码script未被替换,但是结果却失败:

图片[11]|XSS漏洞-手动挖掘(四)|leon的博客

我们可以看到我们的超链接请求在内部是不存在的,我们可以看到URL中传递的参数javas%20%20 cript:alert(document.domain); 发现空格经过URL编码之后并没有被忽略掉而执行整条JavaScript代码。

1.3.2.5 尝试宽字符和编码绕过过滤

"><a href="javas%0acript:alert(document.domain);">xss</a>
"><a href="javas&#0acript:alert(document.domain);">xss</a>

经测试%0a和%0d这样的空格符会被转换成原本的字符,而宽字符也会被自动转码为原始字符到代码中被执行:

图片[12]|XSS漏洞-手动挖掘(四)|leon的博客

1.3.3 宽字符注入测试

1.3.3.1 生成tab的URL编码

根据上面的测试确定只要将我们添加的符号定义为浏览器可以忽略的符号代码即可正常执行,我们来测试一个能够被浏览器忽略的字符tab符号:

图片[13]|XSS漏洞-手动挖掘(四)|leon的博客

1.3.3.2 构造payload

%09的URL编码实体编码是&#09

"><a href="javas&#09cript:alert(document.domain);">xss</a>

1.3.3.3 执行payload

图片[14]|XSS漏洞-手动挖掘(四)|leon的博客

1.4 Stage 12 利用IE特性绕过防护注入XSS

https://xss-quiz.int21h.jp/stage_no012.php?sid=7df92a1a89835f9f2d9dd1c139eb992898db994c

1.4.1 页面分析

图片[15]|XSS漏洞-手动挖掘(四)|leon的博客

1.4.1.1 分析过程

  1. 提示信息:将x00-,x20,<,>,”,’ 符号都过滤为空

1.4.1.2 尝试注入

"><script>alert(document.domain)</script>

我们可以看到所有的引号和尖括号都被过滤掉了,所以我们前面使用的方法对当前关卡是都没有作用的。

图片[16]|XSS漏洞-手动挖掘(四)|leon的博客

1.4.2 IE特性注入测试

我们使用IE浏览器的特性来进行XSS注入。

IE浏览器特性:IE中两个反引号“可以闭合一个左边双引号。

1.4.2.1 构建payload

因为事件只使用到了双引号,并没有使用<>尖括号,所以此处使用事件来构造payload:

`` onmousemove=alert(document.domain)

1.4.2.2 执行payload

图片[17]|XSS漏洞-手动挖掘(四)|leon的博客

温馨提示:本文最后更新于2022-12-20 20:57:35,已超过345天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/2647.html
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享