明明很简单的一个实验…
偏偏卡了好多天…
蜜汁Illegal Instruction & SEG fault
心力交瘁
Task 1
这个Lab一定要按要求修改chown 和 chomod
编译运行即可,康康登录shell的效果
Task 2
缓冲区溢出已经做了很多次了,思路就是把需要执行的代码写进缓冲区,函数返回地址覆盖为代码的起始地址即可
需要的只有返回地址和缓冲区首地址
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权限
Task 3
没啥花样,教你的代码乖乖运行
不写setuid(0):用户权限的shell
写上setuid(0):root权限的shell
原本的shellcode改一改~加一条setuid(0):
重复Task 2~
搞定root权限
Task 4
没毛病,乖乖抄代码跑起来(文件类型.sh)
注意格式…一粗心全是报错
46秒就暴力出来啦
Task 5
ICS学过的,开启栈保护机制,会有canary
缓冲区一溢出覆盖了canary,检查的时候就不对了
所以无法漏洞利用
Task 6
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