您的位置:首页 > 博客中心 > 数据库 >

OD: Format String, SQL Injection, XSS

时间:2022-03-10 17:26

 

Format String 格式化串漏洞

考虑如下的代码:

gxlsystem.com,布布扣gxlsystem.com,布布扣
1 #include<stdio.h>
2 int main()
3 {
4     int a=44,b=77;
5     printf("a=%d, b=%d\n",a,b);
6     printf("a=%d, b=%d\n");
7     return 0;
8 }
View Code

第 6 行的 printf() 没有正确设置参数,而 C 对此没做强制检查。第 6 行的输出结果在 XP sp2 VM(VC6.0 Release 版本)上的结果为 a=4218928, b=44。其中 a 的值是第 5 行的参数 "a=%d, b=%d\n" 的地址,b 的值是第 5 行中压入的 a 的值(从右向左将参数压栈,printf 执行后其参数不会出栈)。

如上的代码只是个小 bug,但对于以下的例子,就构成严重的漏洞了(比如输入"%p, %p, %p, ...",%p 含义为 pointer):

gxlsystem.com,布布扣

而范式化(Canonicalization)可以较好地解决这个问题。Windows 中的 GetFullPathName() 或者 PathCanonicalize() 、Linux 中的 canonicalize_file_name()、Java 中的 File.getCanonicalPath() 和 java.net.URI.normalize()、PHP 中的 realpath() 都可以做到这一点。

OD: Format String, SQL Injection, XSS,布布扣,bubuko.com

热门排行

今日推荐

热门手游