https://github.com/FULLSHADE/WindowsExploitationResources
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/leesh3288/WinPwn
https://github.com/r3p3r/nixawk-awesome-windows-exploitation
https://web.archive.org/web/20200506122824/https://fullpwnops.com/windows-exploitation-pathway.html
Пара врайтапов на питоне, павершелле и на сях от хашерезады:
https://rootkits.xyz/blog/2017/08/kernel-stack-overflow
https://www.fuzzysecurity.com/tutorials/expDev/14.html
https://jb05s.github.io/HEVD-Driver-Exploitation-Part-2-Stack-Overflow-Presented-in-Python-and-C/
https://github.com/hasherezade/wke_exercises/blob/master/stackoverflow_expl/main.cpp
Собственно сорцы самого драйвера:
https://github.com/hacksysteam/HackSysExtremeVulnerableDriver/tree/643f39023bda9254e5cfd3534f4222c00d89088b
Общий код эксплойта
Computer --> Properties --> Advanced --> Performance --> Data Execution Prevention
Сначала (переписав чужой код и собрав всё нужное вместе) я ошибся и в строке
memcpy(&expl[0x820], &shellcode, 0x4);
Использовал shellcode вместо shellc_ptr
Разница в том, что shellcode объявлен в секции данных, которая, если я правильно понимаю, будет неисполняемой только в случае включённого DEP'а
shellc_ptr же - это аллоцированная область в куче, в которой мы сами выставляем исполняемый бит и DEP тут ни при чём
Всё сработало, эксплойт прокатил, но ошибку я заметил и решил поэкспериментировать
Адрес в верхушке стека - место, где в секции даты лежит шеллкод
Посмотрим на права на секции:
Адрес очевидно в пространстве даты в процессе
Исполняемого бита E на месте нету (в PTE)
Шагаем дальше и всё исполняется
Очевидно, адрес уже из кучи
Бит E стоит
Адрес из даты
Бита нету
Сидим курим бамбук…
Куча
Исполняемая
shellcode.asm
exploit.c