-
-
[原创] KCTF 2019 Q3 第十二题 Writeup by Nu1L
-
发表于:
2019-9-25 22:05
8529
-
[原创] KCTF 2019 Q3 第十二题 Writeup by Nu1L
这是个V8
FastElement的Fill方法的end和capacity校验被删了...那就是常规的溢出咯
学习一下
https://segmentfault.com/a/1190000008188648
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中回调函数的用法
https://www.exploit-db.com/raw/46748
可以改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,成了
交的时候居然还要压缩成一行
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)