首先声明一下,这篇文章与泉哥翻译的是不一样的,虽然名字很相同,演示的例子是同一个,但自己在翻译过程中写进了很多心得体会。具体看下面:


老钟古序:
  本来是打算翻译作者的另外一篇文章http://net-ninja.net/blog/?p=71的,但是由于在实战分析过程中遇到了一些问题自己暂时无法解决,等技术掌握更深入一些之后再去想办法解决之后再进行翻译(实在不想让它胎死腹中)。因为没有实战分析过的文章对自己产生的价值会小很多,没有实践过就等于把文章最精华的部分给浪费了,不能够为了翻译而翻译。在翻译的过程中加了很多自己的心得体会。

正文就在附件里面。


学习总结:
      学会了如何进行格式化字符串漏洞的利用,但是能否实现一些操作的自动化和能否绕过DEP的保护机制和利用egg-hunter的技术的利用,这些自己都没有涉及到。这里自己可以提供一个预防格式化字符串漏洞的方法,因为造成格式化漏洞的几个主要函数,在编程的时候编译器一般都会有给我们提示,但它又是如何实现的呢?对此我觉得一种思路也是挺不错的,就是字符串的匹配,但这里需要的是多串匹配的算法,这时候就需要用到Aho-Corasick automation(即简称为AC自动机)。这个在编译器的词法分析中有可能会用到的,具体的思想就是Trie树加上KMP字符串匹配的算法,这里推荐两篇学习文章,我放在附件里面。具体的实现网上应该有很多。其次AC自动机远远不止这个用途,比如可以做一些敏感词的过滤,但基于中文的匹配还是有难度的。如果了解了相应的知识之后,可以把那些容易引起格式化字符串漏洞的函数,比如printf几个函数建立一个Trie树,并将我们编写的源代码作为文本,再在这个Trie树上进行匹配,当然前提是我们在Trie树中已经使用了KMP算法,把AC自动机已经建立起来。其效率是优秀的,一般可以认为O(m),m为文本串的长度。
其实在字符串匹配中还有很多优秀的算法,可以参考《柔性字符串匹配》这本书,里面会给你在实际的使用中哪些是效率最好的。

上传的附件 Windows格式化字符串漏洞利用.rar
AC自动机算法学习资料.rar