PUSH [SFWORD DS:401234] или хз чё делать...

Тема в разделе "WASM.ASSEMBLER", создана пользователем psh, 16 сен 2009.

  1. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    cppasm, нет, дословный перевод выглядт не так, то просто yна питоне написано.
    вот код:
    Код (Text):
    1. IP db '127.0.0.1',0
    2. BSend db 00h,90h,4dh,4dh,00h,90h,4dh,4dh,0
    3. hSocket dd ?
    4. hwnd dd ?
    5. Port dd 3080
    6. sin_to sockaddr_in <?>
    7. wsa    WSADATA <?>
    8. .code
    9. start:
    10. invoke WSAStartup,101h,wsa
    11. invoke socket,AF_INET,SOCK_DGRAM,0
    12. mov [hSocket],eax
    13. invoke htons,[Port]
    14. mov [sin_to.sin_port],ax
    15. mov [sin_to.sin_family],AF_INET
    16. invoke inet_addr,IP
    17. mov [sin_to.sin_addr],eax
    18. invoke connect,[hSocket],sin_to,100
    19. invoke send,[hSocket],BSend,64,0
    20. invoke sendto,[hSocket],BSend,64,0,sin_to,100  
    21. invoke ExitProcess,0
    Теперь проблема: api(sendto) обрезает нашу строку по 0. Bsend наша строка, перед вызовом функи в сте заносится указатель на нашу строку, в которой выходит
    , что 0 это конец, а нам не надо это, надо определённй размер данных передать функе.

    Подскажите как это можно реализовать.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    psh
    Тоесть SMB2 ?
    http://www.reversemode.com/index.php?option=com_mamblog&Itemid=15&task=show&action=view&id=64&Itemid=15
    Код (Text):
    1.  int __stdcall Smb2ValidateProviderCallback(PVOID DestinationBuffer)
    2. _Smb2ValidateProviderCallback@4 proc near
    3. .text:000156B3 loc_156B3:                              ; CODE XREF: Smb2ValidateProviderCallback(x)+4D5j
    4. .text:000156B3                                         ; Smb2ValidateProviderCallback(x)+4DEj
    5. .text:000156B3                 movzx   eax, word ptr [esi+0Ch]; packet->SBM_Header->Process_ID_High
    6. .text:000156B7                 mov     eax, _ValidateRoutines[eax*4]; BUG - out-of-bounds dereference.
    7. .text:000156BE                 test    eax, eax
    8. .text:000156C0                 jnz     short loc_156C9
    9. .text:000156C2                 mov     eax, 0C0000002h
    10. .text:000156C7                 jmp     short loc_156CC
    11. .text:000156C9 ; —————————————————————————
    12. .text:000156C9
    13. .text:000156C9 loc_156C9:  ; CODE XREF: Smb2ValidateProviderCallback(x)+4F3j
    14. .text:000156C9                 push    ebx
    15. .text:000156CA                 call    eax ; Smb2ValidateNegotiate(x) ; Smb2ValidateNegotiate(x) - KABOOOM!!
    Это Сантамарты дизасм. Есть проблема, а именно на произвольный код управление не будет передано. Первый ворд индексирует указатель из массива ValidateRoutines. Для эскалации необходимо:
    - Выделить память в первых 16 страницах адресного простнаства.
    - Найти в драйвере этот самый массив.
    - Выполнить сканирование памяти, за пределами массива по 4 байта, найдя указатель в нём p < 0x10000.
    - По определённому адресу разместить пикод. Либо разместить пикод в конце выделенного региона памяти и заполнить его 0x90(Nop).
    - Указать в одном из полей хидера индекс для найденного указателя относительно начала массива.
    - Послать запрос. Произойдёт передача управления на наш код. Он должен сформировать шлюз для последующего вызова его для смены CPL, после чего корректно возвратить управление обратно в ядро. Если приведённый выше код выполняется на высоком IRQL, то перед посылкой запроса для эскалации захватить регион, создав тред который будет на высоком приоритете обращаться к нему.
    Это только теория.
     
  3. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    Clerk, When SMB2.0 recieve a "&" char in the "Process Id High" SMB header field
    Вобще да, но в реализации то попроще, сенд на нетбиос порт. На скрипте всё прекрасно пашет, охото на асм перевести.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    psh
    Ну да оно, вот только вам рано есчо юзать это. Вы наверно только на VB код собирать можите и читать.. это сразу видно:
    Вы восприняли это как передачу строки в процедуру. Сначала матчасть подучите. Это указатель на структуру передаётся, а переполнения никакого нет - отсутствие проверки вхождения индекса в диапазон.
    Всякая школота уже пытается зеродей собирать.. куда всё катится..
     
  5. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    Не надо строить из себя круто кодера и тру реверсера. Уже по твоим словам видно что тебе далеко до этого. Потому оставь свои понты и если кроме них нечего писать, лучше не пиши. VB я не знаю, питон тоже плохо, поэтому в том, что я не понял принцып работы эксплоита , нет ни чего удивительного. Шарящий человек пояснил бы суть и паправил на путь истиный. А понты кидать это первое, что научилось ламье делать. То и обидно(((
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    psh
    Какие есчо понты. Мне не нужно чтоб кто не попадя мне в систему загружали гуан и запускали там из под ядра. Не следует вам помогать.)
     
  7. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    Да причем здесь это? Эта фигня давно уже написана и хорошо работает на висте и х7 и уже мелкософтом написана заплатка, а фаерволы все это прекрасно блочат. Я решил написать это исключительно в обучающих целей(и как оказалось угадал). Для того и выбрал ассемблер.
     
  8. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Мил человек, лучше прислушайся, то есть заткни фонтан и начни думать. Тебе дело сказали, с небольшой подколкой. И если уж попало в точку - не надо на этом заостряться =). Блин, в первом же ответе сказали - тебе надо УКАЗАТЕЛЬ! а если что-то непонятно - УЧИМ МАТЧАСТЬ. То есть? то есть передавать в send надо адрес твоей строки. Никто никогда не передает через стек строки как аргументы функций. Всегда - указатели. Чужой стек, в котором будет твой код - это на другой машине, исключительно потому, что кто-то там сделал локальную переменную, куда он копируется, то есть в стек его та сторона будет пихать, без твоего участия. А твоя машина, твой send, получит АДРЕС строки, и нормально байт за байтом ее перешлет. Твой вопрос в нормальной формулировке звучит так:

    "При передаче произвольного набора байт (среди которых есть нули) функцией sendto все обрывается на первом нуле. Подскажите, как это сделать, или какой другой функцией".
    Никаких стеков, никаких PUSH - это все к тому, что тебе надо, отношения не имеет :))
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Хочет он как я понял именно этого, но проблемы я всё равно не вижу.
    sendto() не режет данные по нулю - там размер отдельным параметром передаётся.
    http://msdn.microsoft.com/en-us/library/ms740148(VS.85).aspx

    psh - а как ты определили что данные режутся?
    Уж не MessageBox'ом их выводишь на принимающей стороне?
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
  11. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    FatMoon
    , да я в начале тупил с передачей аргумента в стек т.к. когда мудрил с передачей аргумента чета как-то получилось и 0 передалсяО_о Сделал серв и передовал ему для проверки работоспособности. После этого начал жоско тупить. Запутал себя и всех, за что прошу прощения. Позже разобрался как должно быть. Привел код где передается указтель . Запускаю код и мой мини серв ни че не получает, а обычные строцки получает.
     
  12. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Как ты на сервере отображаешь получанные данные?
     
  13. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    О фак. Точно выводящая функа может резать строку, как же я это сразу упустил,но вывожу не меседжбоксом.
     
  14. psh

    psh New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    13
    cppasm
    Спасибо огоромное, стока тупняка в поиске не понятно какой причины, а тут всё по моей глупости.
    Выводел текст на серве через DrawTextA, он всё и резал, щас отдебажил серв, посмотрел, а данные то все передаются ;)))) ыыыы
    p/s: пцц тока скока страшных слов тут наговорили и я почти повереил.