记一次小pwn
文件链接:
提取码:vn4i
1.checksec一下
• RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
• Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
• NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
• PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址
• FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。
2.查看函数
3.查看system函数地址
4.查看汇编
4.1这个是system
4.2这个是get_shell_
5.用pattern生成乱序字符串
6.进行溢出调试让他报错
7.查看覆盖RBP的字符串
8.查看偏移:48
9.写脚本:
使用脚本定位溢出字符串为48,在栈帧中,RBP下方为返回地址所以覆盖返回地址的字符串是从48+8开始的。
这里的8是因为该程序为64bit程序RBP为64位寄存器。
10.运行结果