文章介绍
本文主要讲解格式化串漏洞
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;
}
关注公众号吧~~下方扫一扫
微信关注“安全族”,长期致力于安全研究
本文始发于微信公众号(安全族):一篇文章学会格式化串漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论