写在前面: 记录自己的学习过程,从零开始。。。
从第一个文件可以看出,文件由fd_pwn所有,同属于fd组。字节大小为7322,创建时间Jun 11 2014(看来已经创建好久了。。),文件名fd。
最重要的就是文件的访问权限了,-r-sr-x–表示文件所有者拥有读文件的权限,fd组的其他用户拥有set UID和读的权限,其他用户拥有执行的权限。
其他文件的分析过程同上
可以看出该文件是32位的LSB(least significant bit)的可执行文件。这里我们只需要记住它是32位程序即可。
这里可以看出没有开启栈保护措施。
所谓canary就是在栈中插入一些数据作为检测目标,当使用栈溢出措施时,数据就会覆盖canary,然后系统在返回的时候就会检测到栈溢出,从而达到栈保护的作用。
RELRO
RELRO 设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。RELRO为” Partial RELRO”,说明我们对GOT表具有写权限。
NX开启了保护措施。
NX 全称是Non-eXecuteable。即在非代码区的数据如堆栈中的数据是不可执行的,所以一些基于在stack中注入shellcode的攻击就不法达成。
PIE未打开
PIE(ASLR)打开即开启内存地址随机化机制,主要表现为对堆、栈、共享库映射等线性区布局的随机化。该机制一旦开启表名每次执行都会产生不同的地址空间,使得预测地址的难度加大。
这里我们可以看出,程序至少接受两个输入参数。并且逍遥从buf中读出数据fd必须为0,所以我们的思路是构建输入参数argv[1]为0x1234的字符形式,然后输入LETMEWIN字符串即可。
所有操作结束得到最终flag!!! mark