一篇文章学会格式化串漏洞

  • A+
所属分类:安全文章
一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞

文章介绍

一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞


本文主要讲解格式化串漏洞

1.格式化串漏洞介绍

一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞


    格式化串漏洞产生于数据输出函数中对输出格式解析的缺陷,其实这也是比较简单的一种漏洞

    首先来看一段特别简单的代码,这就是新手入门学习的输出语句,第一个printf会成功输出,10,20。但是到了下方这个printf,缺少了变量列表。只给了三个%d,那么会输出什么呢?

int main(int argc, char* argv[]){  int a = 10;  int b = 20;  printf("%d,%dn",a,b);  printf("%d,%d,%d");  system("pause");  return 0;}

    可以看到第二个程序输处的内容如下,但是也把10,20输出了。

一篇文章学会格式化串漏洞

我们看一下两次的栈内情况,当调用第二个printf的时候,会将格式控制符,变量1,和变量2都会打印出来。

一篇文章学会格式化串漏洞

现在进入OD验证一下,下方笔者圈住的地方,就是第一次压栈情况

一篇文章学会格式化串漏洞

2.用printf读内存数据

一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞


    如果只单单通过一个printf,是无法造成危害很大的漏洞。这就类似于web漏洞中"组合拳",使漏洞攻击危害最大化。

    我们通过printf读内存数据,看下方漏洞代码,通过print输出参数

int main(int argc, char* argv[]){
printf(argv);
return 0;}
    看如下利用过程,其实这就类似于printf("%x,%x...")用来读内存数据,如果条件允许的情况下,是可以灵活运用,劫持进程或者执行shellcode的 。

一篇文章学会格式化串漏洞

关注公众号吧~~下方扫一扫

一篇文章学会格式化串漏洞
一篇文章学会格式化串漏洞


微信关注“安全族”,长期致力于安全研究

一篇文章学会格式化串漏洞




本文始发于微信公众号(安全族):一篇文章学会格式化串漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: