bash-c / bash-c.github.io

My Blog
https://writeup.md
0 stars 0 forks source link

post/linux-kernel-pwn-abc-2/ #3

Open utterances-bot opened 5 years ago

utterances-bot commented 5 years ago

Linux Kernel Pwn ABC(II) - localhost - Done with development, it's time to pwn.

这一篇讲 ret2usr 攻击和 smep 保护。主要参考了 Pratical SMEP bypass techniques on Linux。

https://bash-c.github.io/post/linux-kernel-pwn-abc-2/

23R3F commented 5 years ago

大佬,你这个exp编译会报错 “exp.c:17: Error: too many memory references for `mov'” 汇编那里出了问题 gcc exp.c -static -o .exp

bash-c commented 5 years ago

@23R3F 奥,我用的是intel风格的汇编,需要加上 -masm=intel 这个参数。 另外推荐你用musl-gcc代替gcc,参考 https://uaf.io/exploitation/2018/11/22/Hitb-2017-babyqemu.html

clxsh commented 3 years ago

为啥我搜出来的gadgets和大佬的不一样。。ROPgadget获取的 0xffffffff8181bfc5 : mov rsp, rax ; dec ebx ; jmp 0xffffffff8181bf83。 还有iretqgadget的地址(0xffffffff814e35ef)处,机器码是4DCF,但iretq机器码是48CF。。

clxsh commented 3 years ago

为啥我搜出来的gadgets和大佬的不一样。。ROPgadget获取的 0xffffffff8181bfc5 : mov rsp, rax ; dec ebx ; jmp 0xffffffff8181bf83。 还有iretqgadget的地址(0xffffffff814e35ef)处,机器码是4DCF,但iretq机器码是48CF。。

晓得了。。

  1. 当前版本ROPgadget对jmp相对跳转地址的计算似乎有问题,实际应该是这个0xffffffff8181bfc5 : mov rsp, rax ; dec ebx ; jmp 0xffffffff8181bf7e,而0xffffffff8181bf7e恰好是ret,所以构成了mov rsp, rax ; dec ebx ; ret
  2. 4DCF也能被当作iretq执行(rex.WRB iretq