码迷,mamicode.com
首页 > 其他好文 > 详细

第一个Shellcode(Xp sp3)

时间:2014-05-10 00:21:54      阅读:610      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

研究挖0day有一阵了,先是汇编后来是逆向,最近才开始尝试第一个shellcode,我是用这个程序尝试溢出的:

bubuko.com,布布扣
/*
 * fb.c
 *
 *  Created on: 2014年5月3日
 *      Author: yuris
 */

#include<stdio.h>
#include<windows.h>

#define PASSWORD "1234567"
int verify_password (char *password)
{
    int authenticated;
    char buffer[44];
    authenticated=strcmp(password,PASSWORD);
    strcpy(buffer,password);
    return authenticated;
}
main()
{
    int valid_flag=0;
    char password[1024];
    FILE *fp;
    LoadLibrary("user32.dll");
    if(!(fp=fopen("password.txt","rw+")))
    {
        exit(0);
    }
    fscanf(fp,"%s",password);
    valid_flag = verify_password(password);
    if(valid_flag)
    {
        printf("incorrect password!\n\n");
    }
    else
    {
        printf("Congratulation! You have passed the verification!\n");
        
    }
    fclose(fp);
}
bubuko.com,布布扣

其实这是0day书中的例子,这里故意载入了user32.dll方便我们调个框。很容易看出来问题在strcpy那里,它没有检查输入。于是我们试着这样输入:

43214321432143214321432143214321432143214321

这样能通过验证,那么同样的原理我们可以让他跳到任意地址,比如我们可以让他跳到正确的分支:

bubuko.com,布布扣
43214321432143214321432143214321432143214321432143210@ 
bubuko.com,布布扣

……具体是使用winhex输入的,所以看起来是乱码,其实就是把ret覆盖成正确跳转处的地址。那么,再进一步,我们是不是还可以转到自己的代码,其实我们只要把代码放在缓冲区里,然后转到就好,那么可以这样构造:

bubuko.com,布布扣
3跾hsfkuhyuri嬆SPPS戈誻袗悙悙悙悙悙悙悙悙悙悙悙悙悙悙?
bubuko.com,布布扣

可以看见一个弹框(winxp sp3),但是换了一个系统就会有问题,于是加上一个jmp esp定位:

bubuko.com,布布扣
悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙S撘w冹"3跾hsfkuhyuri嬆SPPS戈誻蠸?藖|袗悙悙
bubuko.com,布布扣

这里还加入了exit,防止结束后弹框。但是我们发现这样在别的系统上还是有问题,于是我们要让shellcode自己找到api基址,自己加出来地址(这部分还未做),那么就能在所有win系统上使用了。

研究中………………

第一个Shellcode(Xp sp3),布布扣,bubuko.com

第一个Shellcode(Xp sp3)

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/yuris115/p/3718559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!