- 论坛徽章:
- 0
|
关于printf
Format String 漏洞介绍/总结(二)
bkbll(bkbll@cnhonker.net)
2003/4/8
2. format stirng 漏洞利用
通过前面讨论,我们很容易知道,如果要让我们的shellcode运行起来,必须要知道三个数据:
1. 我们要写的地址,want_write_addr
2. Printf参数后面多少位是我们自定义的数据地址,pad,也就是stack popup的值
3. 我们的shellcode地址.
为什么我们要知道pad的数值呢?printf提供了一个$参数给我们,
~~~~~~~~~~~~~~~~~~~~~~~~~
允许用户不用一个个显示参数,可以自定义显示数据,比如:
[bkbll@mobile fmtxp_lib]$ cat 7.c
main()
{
int i=1,j=2;
printf("j=%2$d i=%1$d\n",i,j);
}
[bkbll@mobile fmtxp_lib]$ cc 7.c ; ./a.out
j=2 i=1
[bkbll@mobile fmtxp_lib]$
有了这个$参数,我们也可以很容易控制写入到某个地址的数据地址:
比如,我们想写入900到变量n里面,我们可以这样写:
[bkbll@mobile fmtxp_lib]$ cat 8.c
main()
{
int n=0;
printf("before printf,n=%d\n",n);
printf("%800d%n\n",1,&n);
printf("after printf,n=%d\n",n);
}
[bkbll@mobile fmtxp_lib]$ cc 8.c ; ./a.out
before printf,n=0
1
after printf,n=800 |
|