![]() |
eXeL@B —› Вопросы новичков —› Синий экран под отладчиком. |
Посл.ответ | Сообщение |
|
Создано: 05 января 2017 23:37 · Личное сообщение · #1 Пробую этот эксплоит https://github.com/Re4son/KiTrapOD/blob/master/vdmexploit.c на виндовс хп для повышения прав. Скачал уже собранный, на хп работает, все окей. Решил из тех исходников собрать экзешник и либу, экзешник нормально собрал, а либу криво. Хочу в ollydbg сравнить ту либу и которую собирал, чтобы найти ошибку. Но почему-то при отладке этой либы под ollydbg в момент входа в ядро тут: NtVdmControl(VdmStartExecution, NULL); в дебагере sysenter вываливается в синий экран, но без отладчика все норм. А после она выходит из ядра и выполняет функцию VOID FirstStage() Я хотел ее отлаживать, саму функцию нашел в отладчике, но из-за синего экрана до нее дойти не могу. Пробовал в начало FirstStage() прописать MessageBoxA чтобы приаттачиться уже после выхода из ядра, но в этом случае она начинает и вне отладчика в синий экран кидать. Может кто подскажет как обойти синий экран в отладчике. ![]() |
|
Создано: 05 января 2017 23:40 · Личное сообщение · #2 |
|
Создано: 05 января 2017 23:55 · Поправил: mazaxaker · Личное сообщение · #3 difexacaw пишет: А если под отладчиком запустить не крэшит ? Если запустить под отладчиком экзешник то не крашит. Но я отлаживаю либу, которую сплоит пихает удаленным потоком в процесс ntvdm.exe из system32, в начало либы messageboxa поставил, чтобы аттачиться к этому ntvdm.exe пока висит сообщение. Вот в этом случае хоть по шагам, хоть запустить падает в синий экран. На вин хп сп2 х86 на виртуалке пробую. ![]() |
|
Создано: 05 января 2017 23:58 · Личное сообщение · #4 |
|
Создано: 06 января 2017 00:03 · Личное сообщение · #5 difexacaw, про сервис не говорил ведь. Экзешник через удаленный поток подсовывает либу в системный процесс винды ntvdm.exe и в нем ее запускает, я аттачусь к этому процессу и при отладке крешит в синий экран. ![]() ![]() |
|
Создано: 06 января 2017 00:21 · Поправил: difexacaw · Личное сообщение · #6 |
|
Создано: 06 января 2017 00:41 · Личное сообщение · #7 |
|
Создано: 06 января 2017 00:48 · Личное сообщение · #8 |
|
Создано: 06 января 2017 00:48 · Поправил: difexacaw · Личное сообщение · #9 mazaxaker Если бы оно крэшило как вы сразу сказали - при трассировке сервиса, то суть была бы ясна, отличие в обработке известно. Но оно крэшит в зависимости от фазы луны, так как отладчик воздействует на огромное число механизмов, может существовать совсем не очевидная цепочка причин в конце концов приводящая к крэшу, так как LPE которые робят через смещение стека - как этот являются анстаб и любой внешний фактор делает его не рабочим. По нормальному нужно или отлаживать или полностью разбирать дамп, для этого нужно много времени и ваше ядро. Можно было бы что то предположить по вменяемому описанию, к примеру в какой именно момент происходит крэш, то что при отладки крэшит" это никакая не инфа.) Да и семпл этот кривой, его весь ядерный кодес выполняется при замаскированных прерываниях, юзая при этом рандом - подкачиваемую памяти и даже сервисы, отдавая управление вникуда. Так что возможно крэшит сам семпл из за изменений рабочего набора отладчиком. ----- vx ![]() |
|
Создано: 06 января 2017 00:49 · Личное сообщение · #10 difexacaw, вот добавил jmp на себя в ту функцию, которая после ядра идет. Теперь такой бсод вылетает, но после добавления jmp в нее теперь и без отладчика крешится. Не пойму почему добавления jmp в ту функцию, которая уже юзермодная ее теперь крешит даже без отладчика. ![]() ![]() |
|
Создано: 06 января 2017 00:57 · Личное сообщение · #11 |
|
Создано: 06 января 2017 01:03 · Личное сообщение · #12 |
|
Создано: 06 января 2017 01:05 · Личное сообщение · #13 |
|
Создано: 06 января 2017 01:45 · Поправил: mazaxaker · Личное сообщение · #14 difexacaw, да понял. Сейчас пробую либу собрать из сорцов. Саму либу собрал, но что-то в коде видать в сорцах ошибки, сейчас хочу ее скомпиленную сравнить через отладчик с той, которая собраная была и рабочая. Моя из сорцов чет не дает привелегии. Походу с указателями где-то напутал при сборке. Добавлено спустя 5 минут difexacaw, в аттаче мой исходник, собирал в студии 2010, а это оригинальные https://github.com/Re4son/KiTrapOD/blob/master/vdmexploit.c В оригинальных сорцах прога не попадает на Exitthread этот. Это хорошо. А в моих сорцах попадает туда. 306 ExitThread('VTIB'); Оригинальная прога на выходе сюда попадает. Это хорошо. ZwTerminateProcess(GetCurrentProcess(), 'w00t'); А моя на том экзите с параметром VTIB выходит, что плохо. Можете глянуть так может увидете где косяк. ![]() ![]() |
|
Создано: 07 января 2017 02:15 · Личное сообщение · #15 Я еще заметил, что функция, в которую прога из ядра выходит, на эту функцию накинута пара cli/sti. Вот пробую jmp пихнуть внутри там, но при остановке на jmp в этом блоке виснет комп намертво. А если ставлю jmp на себя до cli, то синий экран. Как бы остановить прогу в этой функции без креша и приаттачиться туда ? Кстати прога в этой функции для вывода текста в консоль использует DbgPrint, а ее адрес получает без помощи getprocaddress, а через таблицы по имени ищет. Если там ее имя подменить на MessageBox, такая идея, как думаете не крешнится ли она после такого или точнее найдет ли она в той таблице эту функцию. ![]() |
|
Создано: 08 января 2017 08:59 · Личное сообщение · #16 |
|
Создано: 08 января 2017 20:02 · Личное сообщение · #17 mazaxaker пишет: Пробовал в начало FirstStage() прописать MessageBoxA чтобы приаттачиться уже после выхода из ядра, но в этом случае она начинает и вне отладчика в синий экран кидать. Прошу прощения, но вы чушь какую-то делаете. Посмотрел ваш исходник, какие-то MessageBox'ы в режиме ядра. Понятно, что крэшить все будет. И никакого выхода из ядра нету внутри FirstStage, это все код режима ядра. Кстати, сообщения в этом коде лучше выводить через DbgPrint, как в оригинальном исходнике. И если уж так хочется этот код отлаживать можно попробовать в начало этих функций вместо MessageBox поставить int 3, по идее, отладчик должен всплыть. Кроме того, вы видимо пытаетесь отлаживать локально (через Syser), а такие вещи лучше делать удаленно, подключаясь к виртуалке через тот же windbg, как в предыдущем посте написали. ![]() |
|
Создано: 12 января 2017 01:05 · Личное сообщение · #18 mazaxaker > Я еще заметил, что функция, в которую прога из ядра выходит, на эту функцию накинута пара cli/sti. Вот пробую jmp пихнуть внутри там, но при остановке на jmp в этом блоке виснет комп намертво. Я это выше несколько раз вам повторил, но вы же не слушаете. cli там быть не должно, упоротый автор его туда вставил вообще не понимая зачем. Вообще же такие вещи методом тыка не делаются, если код это POC, то добиваться его работоспособности бессмысленно, он не для того нужен. ----- vx ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Синий экран под отладчиком. |