OD: Format String, SQL Injection, XSS
时间:2022-03-10 17:26
Format String 格式化串漏洞
考虑如下的代码:
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):
而范式化(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