美文网首页
格式化漏洞利用原理

格式化漏洞利用原理

作者: 鸡龙 | 来源:发表于2019-03-24 17:00 被阅读0次

    在printf()函数正常使用中,printf(s),printf("%s",s)都能够输出s字符串的值,但如果在s字符串中存在%,计算机无法判断是否为参数,所以可以在printf(s)中s填入带有%的符号,能达到泄漏地址的作用。
    一般我们想要泄漏栈上多个地址,往往可以采用输出多个%x来达到。如果想直接获得某个地址,可以用%n$x。

    #include <stdio.h>
    int main() {
      char s[100];
      int a = 1, b = 0x22222222, c = -1;
      scanf("%s", s);
      printf("%08x.%08x.%08x.%s\n", a, b, c, s);
      printf(s);
      return 0;
    }
    

    可以用以上C代码来验证输入%08x.%08x.%08x,你会发现他在第二个printf中输出的是调用printf函数时调用栈上的部分地址
    也可以输入AAAA%p%p%p%p%p%p%p%p%p%p%p%p%p%p%p,你会发现其中有一段为对应的414141,41为A的ASCII码

    当然,能得到地址,当然也能覆盖地址,%n为将参数量赋值给当前地址,可以作为覆盖地址的渠道

    #include <stdio.h>
     
    int main(void)
    {
        int c = 0; 
        printf("%.100d%n", c,&c);
        printf("\nthe value of c: %d\n", c);
        return 0;
    
    

    这个函数就成功的将c修改为100,所以只要能找到c的地址,再适当的使用%n植入对应的参数数量,就能将c地址覆盖为你想要地址

    相关文章

      网友评论

          本文标题:格式化漏洞利用原理

          本文链接:https://www.haomeiwen.com/subject/ahbuvqtx.html