-
-
[原创] KCTF 2019 Q3 第十二题 Writeup by Nu1L
-
发表于:
2019-9-25 22:05
8589
-
[原创] KCTF 2019 Q3 第十二题 Writeup by Nu1L
这是个V8
FastElement的Fill方法的end和capacity校验被删了...那就是常规的溢出咯
学习一下
5fdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6h3N6E0k6h3&6@1k6X3q4#2L8s2c8Q4x3X3g2U0L8$3#2Q4x3V1k6S2i4K6u0r3x3e0p5&6x3o6l9H3x3o6l9H3z5o6p5^5z5o6j5@1z5l9`.`.
https://bbs.pediy.com/thread-252812.htm
找一波FastElements属性
fast之前应该要先过一个Runtime_ObjectGetOwnPropertyNamesTryFast
和TryFastArrayFill
,主要是后者
审错分支了
JSObject
在v8::internal::`anonymous namespace'::ElementsAccessorBase<v8::internal::`anonymous namespace'::FastPackedObjectElementsAccessor,v8::internal::`anonymous namespace'::ElementsKindTraits<(v8::internal::ElementsKind)2>>::Fill
断下,发现end已被替换为length,得想个法子把TryFast绕了
[[rsi]+8]能看到a.elements
有个想法,可以整一个回调函数,length先改大,在执行fill的时候跑个回调把length变小,这样end就溢出了
高仿一份v8的exp,学习了一下exp中回调函数的用法
631K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2P5s2m8D9L8$3W2@1i4K6u0V1k6r3u0Q4x3X3g2U0L8$3#2Q4x3V1k6J5j5i4N6Q4x3V1j5@1y4U0M7@1z5l9`.`.
可以改valueOf方法
然后整出一个PoC,这里的global用来做后面oob的持续化(之后的oob全靠global这个FastDoubleElements)
获取end时调用valueOf,valueOf的callback去修改arr.length为0x20,然后start = 0x2f end = 0x30 下标溢出
调一下
Sakura大佬先知里发过的工具类(轮子)
任意地址读
改下一个FastDoubleArray的elements指针,然后整一个read64原语
EXP
修改ArrayBuffer的backing-store为rwx_page_addr,然后把Float64给set进去,篡改wasm,成了
交的时候居然还要压缩成一行
[招生]系统0day安全-IOT设备漏洞挖掘(第6期)!