首页
社区
课程
招聘
[翻译]windows平台下的格式化字符串漏洞利用技术
2011-1-3 15:35 10689

[翻译]windows平台下的格式化字符串漏洞利用技术

2011-1-3 15:35
10689
标题:windows平台下的格式化字符串漏洞利用技术
作者:Abysssec
译者:riusksk(泉哥:http://riusksk.blogbus.com)

本文真正的受益者应该是那些有定汇编语言基础,以及具备经典的栈溢出知识的人,这样本文才能引领读者在windows平台下编写出自己的格式化字符串漏洞利用程序。本文主要讲述各种关键的利用技术,也许在本文发布前已经有不少人写了关于格式化字符串漏洞的文章,但他们的文章一般都相对枯燥和基础。但我们也不敢说本文讲述得相当出色和全面,不过我们会尽量使其达到这种程度。
格式化字符串这类软件漏洞最初是在1999年左右发现的,但在2000年之前一直被认为是没有危害和利用价值的。格式化字符串攻击可使程序崩溃或者执行恶意代码。这个问题源于对用户输入内容未进行过滤导致的,这些输入数据都是作为某些C函数执行格式化操作时的参数,如printf()。恶意用户可以使用%s和%x等格式符,从堆栈或其它可能内存位置来输出数据。也可以使用格式符%n向任意地址写入任意数据, 配合printf()函数和其它类似功能的函数就可以向存储在栈上的地址写入被格式化的字节数。一个经典的exploit是混合这些技术,然后用恶意shellcode的地址来覆盖某一链接库函数地址或者栈上的返回地址。其中填充的一些格式化参数主要是用于控制输出的字节数,而%x主要用于从栈中弹出字节直至格式化字符串自身的起始位置。伪造的格式化字符串起始部分应该用欲执行的恶意代码地址来覆写,这个可以借助%n格式符来实现。因此你现在需要理解受此类漏洞影响的PERL 和C/C++软件,除printf()函数之外,其它函数也可能受到格式化字符串漏洞的影响,比如:
●        Printf()
●        Snprintf()
●        Vprintf()
●        Syslog()
●        ……
格式化字符串漏洞除了可以执行恶意代码外,还可以从漏洞程序中读取某些数据,比如密码及其它重要信息。下面我们写份C代码进行分析,以帮助大家理解消化。
更多内容请参见附件……

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (8)
雪    币: 182
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
komany 2011-1-3 16:06
2
0
顶,好文章
雪    币: 2743
活跃值: (1049)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zysyyz 1 2011-1-3 20:22
3
0
泉哥出手,必属精品
雪    币: 239
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dlmu 1 2011-1-4 10:49
4
0
不知道泉哥的翻译材料都来自哪里
雪    币: 357
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ditans 2011-1-4 11:11
5
0
snprintf函数应该不会有这种漏洞吧?第二个参数已经限定了缓冲区的大小,应该无法溢出吧?

int snprintf(
   char *buffer,
   size_t count,
   const char *format [,
      argument] ... 
);

雪    币: 431
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2011-1-4 12:50
6
0
[QUOTE=Ditans;911136]snprintf函数应该不会有这种漏洞吧?第二个参数已经限定了缓冲区的大小,应该无法溢出吧?

int snprintf(
   char *buffer,
   size_t count,
   const char *format [,
      argument] ...
...[/QUOTE]

这不是缓冲区大小问题,你可能还没有理解什么是格式化漏洞
雪    币: 431
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2011-1-4 12:55
7
0
都是国外的一些网站和博客
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
switShell 2017-3-20 09:06
8
0
请教泉哥,sprintf的漏洞利用点和printf是一样的吗?我怎么一直调不同。
雪    币: 704
活跃值: (228)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
飞龙使者 4 2017-3-21 09:20
9
0
Ditans snprintf函数应该不会有这种漏洞吧?第二个参数已经限定了缓冲区的大小,应该无法溢出吧? int snprintf( char *buffer, size_t count ...
只要有`format`参数,并且可控,最好支持`%n`,就会有这种漏洞。
游客
登录 | 注册 方可回帖
返回