格式化字符串漏洞

这篇博客记录一下常规的我所知道的格式化字符串漏洞
为什么会有格式化字符串漏洞,就是因为printf的参数和格式化字符不匹配导致的。
比如printf("%s")这样的,格式化字符没有参数,那么会导致什么情况发生呢?
就是因为printf这个函数机制的原因,他不管你后面给没给参数,他都要去调用一个参数。
利用这一个特点我们可以发现一个漏洞点,如果出现一个这样的情况我们就可以利用他,比如说:打印栈上的信息,或者利用可写的特性修改栈上的信息。
https://www.cnblogs.com/jy030515/articles/16425017.html
这里附上我的一篇博客,是32位的一个格式化字符串漏洞解释,就是利用了一个可写的特性,这里面就是注意,printf在栈中的关系,emmm
image
看下图,这是博客里这道题的调试图,我是输入了‘AAAAAAAAAAAAA'这样调试,目的是为了判断格式化字符串的第一个参数在栈上的哪个位置。
这里作一个区分,可以看到第一个出现'AAAAAAAAA'的位置,他是prinf的第一个参数是格式化字符串本身,并不是格式化字符串的参数,而后面出现的'AAAAAAAAAAA'才是真正的参数在栈上的位置,而对应上面的格式化字符串本身的位置相差了11个位置,所以用%11\(n 这里还要注意一个%n的使用方法,这个贼恶心,他就是前面打印了多少个字符,他就会变成多少。 还有一个问题,如果是64位的程序,众所周知64位程序是先用寄存器传6个参,那么偏移量最好用暴力方法从%7\)p开始爆破。

posted @ 2022-07-07 19:16  REPWNER  阅读(7)  评论(0)    收藏  举报