文章首发于安全KER https://www.anquanke.com/post/id/233831
0x00前言
从一题学习php模块的编写,学习WEB PWN,并演示WEB PWN中的堆UAF利用基本手法。
文章首发于安全KER https://www.anquanke.com/post/id/233831
从一题学习php模块的编写,学习WEB PWN,并演示WEB PWN中的堆UAF利用基本手法。
文章首发于安全KER https://www.anquanke.com/post/id/227284
chrome issue 1051017是2020年2月公布的一个v8漏洞,该漏洞是在JIT优化时对循环变量的类型估算考虑不周导致的compiler阶段的类型混淆,通过compiler阶段的类型混淆进一步构造OOB溢出。
在seek功能里使用了abs,可以第一次传入0x80000000,然后第二次传入0x7fffffff,即可将8offset设置为负数,改写size,实现全局读写。在本地进行调试时,发现musl libc会崩溃,用第三方musl libc也崩溃,patch掉崩溃的地方,即可在本地成功运行。
还需要泄露堆地址,才可以实现任意地址读写,free几个堆形成链表,然后溢出,泄露指针即可。构造内存泄露函数,泄露远程栈布局,确定ROP位置写ROP即可。
架构是risc-v的,IDA装上插件勉强能看汇编,但是没有进行重定位不好看,直接进行盲打测试,发现程序先是malloc(0x20),用于存放name和content指针,然后content通过malloc(0xf0)获得,name没有进行\0截断,可以用于泄露content指针,而输入content时,存在一个off by one,libc为glibc 2.27,于是就可以直接开始进行利用了。
1 | #coding:utf8 |
在设备的write函数里,存在任意地址读写,但是仅能写一次,也不能泄露
可以考虑低字节写opaque,使得opaque设备对象向上移动,在内存里找到合适位置,使得opaque->execed为0,而其他字段有内容,这样,这可以利用设备的read函数,读取字段便可以泄露地址,而且由于opaque->execed为0,我们还可以再次进行任意地址写。