明明很简单的一个实验… 偏偏卡了好多天… 蜜汁Illegal Instruction & SEG fault 心力交瘁
这个Lab一定要按要求修改chown 和 chomod 编译运行即可,康康登录shell的效果
缓冲区溢出已经做了很多次了,思路就是把需要执行的代码写进缓冲区,函数返回地址覆盖为代码的起始地址即可 需要的只有返回地址和缓冲区首地址
gdb disass main一下,调用main之后的那条指令是0x08048574:
buffer先写入AAAA定个位~
0x41414141的地方就是缓冲区首地址,往后看有返回地址,计算一下偏移==0x24
okk这样就获得返回缓冲区首地址0xbfffeb10 返回地址位置buffer+0x24 shellcode写远一点,就写在buffer+300(0xaa)处 shellcode起始地址就是0xbfffeb10+0xaa == 0xbfffebba 前面的36个A是为了填补0x24的偏移 (此处返回地址应该是\xba\xeb\xff\xbf)
既然思路不难,为什么卡了那么久呢??
似乎是每次打开terminal就要执行一下关闭地址随机化的命令~ 不然地址永远写不对 🙂
终于搞出来了!
注意到此时uid还是用户id,不是root
于是就需要task3来获取root权限
没啥花样,教你的代码乖乖运行 不写setuid(0):用户权限的shell
写上setuid(0):root权限的shell
原本的shellcode改一改~加一条setuid(0): 重复Task 2~
搞定root权限
没毛病,乖乖抄代码跑起来(文件类型.sh) 注意格式…一粗心全是报错 46秒就暴力出来啦
ICS学过的,开启栈保护机制,会有canary 缓冲区一溢出覆盖了canary,检查的时候就不对了 所以无法漏洞利用
ICS又学过了,栈不可执行就是栈上内容只能读写不能执行 自然无法执行写在缓冲区里的shellcode了
害,这么简单个Lab写了那么久 (手动狗头
感谢大佬相助!
保姆级辅导: https://www.it610.com/article/1295993920798400512.htm
https://blog.csdn.net/qq_40712959/article/details/103773547
还有一个String Format Lab 对调用栈结构的要求比较高 感谢大佬相助,这篇教程真的叹为观止~ https://blog.csdn.net/HananoYousei/article/details/91357337
以及一些pwn和格式化字符串漏洞利用的参考: https://bbs.pediy.com/thread-258704.htm https://www.cnblogs.com/ichunqiu/p/9329387.html