pwn——basic rop
(ret2system):
老规矩,先checksec一下:
开启了NX,堆栈不可执行,这里提一下,复制文件进虚拟机之后最好改一下权限,命令是:
chmod 755 name
放入ida中:发现get()函数,可以溢出
这里与上一道题不同的是NX保护,所以我们无法通过在用户态的栈里写入一些类似system()的命令,所以我们要往内核态的栈里面写,但两个栈内存上是独立的,无法通过用户态的栈传参
这里就要用另外一种方式,这里普及一下知识:
众所周知,有三种情况下cpu会从用户态切到内核态:
系统调用,异常,中断(说白了三种都是中断)
在这里,int 80就是一种中断,int 80陷入内核后,内核进程就会去找80这个中断是干嘛的,找到了是系统调用再取eax看看是哪个系统调用,然后将寄存器内的参数传入内核中,可以说是对cpu的一种欺骗
现在大致确定一下思路:
1.先确定用户态的偏移量
2.在返回地址上写入一些指令,达成对寄存器的欺骗
3.在调好寄存器之后&