题目链接:greeting-150
原理:
格式化字符串漏洞、覆盖 .fini_array
目的:
用格式化字符串漏洞制造程序循环,进而使普通格式化字符串漏洞可以被利用
环境:
ubuntu14 64位
工具:
pwntools
步骤:
用格式化字符串漏洞修改strlen
或其他函数(能被调用且有可操纵字符串传入的函数)的got表
为system地址
plt地址,以及 .fini_array
的4
个字节为start地址
,进而程序进入第二次循环,输入/bin/sh\x00
,拿到shell。
流程:
用file greeting-150
的文件信息:32位程序
greeting-150: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=beb85611dbf6f1f3a943cecd99726e5e35065a63, not stripped
用checksec greeting-150
检查保护:
用IDA查看程序流程得:
程序的大致流程就是向v5
读入64字节
,读入成功后,将v5
的内容输出到s
里面,之后将s
直接输出,很明显这里有一个格式化字符串漏洞,再根据保护,咱们可以用任意地址写,接下来就是找偏移,构造payload。
由IDA可以看出,s
在栈上的地址为esp+1C
,而s里面的内容为“Nice to meet you, %s :)\n”
,其中的%s
是v5
的内容,即我们输入的内容。所以&#x