标题:windows平台下的格式化字符串漏洞利用技术
作者:Abysssec
译者:riusksk(泉哥:http://riusksk.blogbus.com)

本文真正的受益者应该是那些有定汇编语言基础,以及具备经典的栈溢出知识的人,这样本文才能引领读者在windows平台下编写出自己的格式化字符串漏洞利用程序。本文主要讲述各种关键的利用技术,也许在本文发布前已经有不少人写了关于格式化字符串漏洞的文章,但他们的文章一般都相对枯燥和基础。但我们也不敢说本文讲述得相当出色和全面,不过我们会尽量使其达到这种程度。
格式化字符串这类软件漏洞最初是在1999年左右发现的,但在2000年之前一直被认为是没有危害和利用价值的。格式化字符串攻击可使程序崩溃或者执行恶意代码。这个问题源于对用户输入内容未进行过滤导致的,这些输入数据都是作为某些C函数执行格式化操作时的参数,如printf()。恶意用户可以使用%s和%x等格式符,从堆栈或其它可能内存位置来输出数据。也可以使用格式符%n向任意地址写入任意数据, 配合printf()函数和其它类似功能的函数就可以向存储在栈上的地址写入被格式化的字节数。一个经典的exploit是混合这些技术,然后用恶意shellcode的地址来覆盖某一链接库函数地址或者栈上的返回地址。其中填充的一些格式化参数主要是用于控制输出的字节数,而%x主要用于从栈中弹出字节直至格式化字符串自身的起始位置。伪造的格式化字符串起始部分应该用欲执行的恶意代码地址来覆写,这个可以借助%n格式符来实现。因此你现在需要理解受此类漏洞影响的PERL 和C/C++软件,除printf()函数之外,其它函数也可能受到格式化字符串漏洞的影响,比如:
●  Printf()
●  Snprintf()
●  Vprintf()
●  Syslog()
●  ……
格式化字符串漏洞除了可以执行恶意代码外,还可以从漏洞程序中读取某些数据,比如密码及其它重要信息。下面我们写份C代码进行分析,以帮助大家理解消化。
更多内容请参见附件……

上传的附件 windows平台下的格式化字符串漏洞利用技术.doc