pwn——basic rop
(ret2system):
老规矩,先checksec一下:

开启了NX,堆栈不可执行,这里提一下,复制文件进虚拟机之后最好改一下权限,命令是:
chmod 755 name
放入ida中:发现get()函数,可以溢出

这里与上一道题不同的是NX保护,所以我们无法通过在用户态的栈里写入一些类似system()的命令,所以我们要往内核态的栈里面写,但两个栈内存上是独立的,无法通过用户态的栈传参
这里就要用另外一种方式,这里普及一下知识:
众所周知,有三种情况下cpu会从用户态切到内核态:
系统调用,异常,中断(说白了三种都是中断)
在这里,int 80就是一种中断,int 80陷入内核后,内核进程就会去找80这个中断是干嘛的,找到了是系统调用再取eax看看是哪个系统调用,然后将寄存器内的参数传入内核中,可以说是对cpu的一种欺骗
现在大致确定一下思路:
1.先确定用户态的偏移量
2.在返回地址上写入一些指令,达成对寄存器的欺骗
3.在调好寄存器之后,写入中断
确定偏移量,用peda动态调试即可:

在这里我们使用将函数execve("/bin/sh",NULL,NULL)传入栈中,查找资料发现execve的调用号是0x0b,各个寄存器所传参数可参考下图:

本文介绍了在开启NX保护的情况下,如何利用基本的Return-Oriented Programming (ROP)技术,通过int 80系统调用来绕过用户态栈限制,执行内核态操作。主要内容包括确定用户态偏移量、构造指令欺骗寄存器、设置中断等步骤,最终实现调用execve("/bin/sh")来获取shell。
最低0.47元/天 解锁文章
1292

被折叠的 条评论
为什么被折叠?



