今天给学弟演示最简单的pwn题的时候居然翻车了,没想到还是这个xmm寄存器的问题,我tcl,记录一下。
原来的exp是这样。
就是很简单的调用这个callsystem
结果本地打不通。试了下远程,发现能打通,太奇怪了。
|
|
通过gdb调试发现,跳到这里就断了。
我本地调试系统是ubuntu 18,在bin群里问了问,组长肥猫嘤嘤告诉我是xmm寄存器的问题,当glibc版本大于2.27的时候,系统调用system("/bin/sh")之前有个xmm寄存器使用。要确保rsp是与16对齐的,也就是末尾必须是0.
由于xmm寄存器是128bit又用了movaps指令,故必须让rsp的地址能够整除16,解决方法就是少push一个寄存器。
让指令跳转到400597,本地exp如下:
|
|
使用cat /proc/version发现我的本地调试环境是ubuntu 18而jarvis oj本地的环境也是ubuntu18 那么为什么会不同呢,就是glibc版本的问题,使用
|
|
查看发现我的glibc版本是
|
|
jarvisOJ的版本是:
|
|
看来就是libc的问题,与系统版本无关。

说些什么吧!