На мероприятии уже ближе к вечеру я провел мастер-класс по теме "Внедрение операторов SQL". "Велосипед" на этот раз не выдумывал (а его от меня там и не требовали), а просто воспользовался наработками, которые в свое время готовились для института МИФИ. Собственно, материалы мастер-класса, который по времени уместился в один час, представлены ниже.
PT Hackday#2
View more presentations from Dmitry Evteev.
PT Hackday#2
Виртуальная машина использовалась прежняя, но с небольшими изменениями в контексте blind SQL Injection. Внесенные изменения позволили продемонстрировать быструю технику эксплуатации слепых SQL-инъекций – подбора одного символа в один запрос. Это возможно, если приложение использует приблизительно такой синтаксис:View more documents from Dmitry Evteev.
Так, сопоставив возможные значения параметра id, передаваемого приложению, в данном случае методом GET, с самим контентом и наложив их на карту подбираемых символов становится возможным очень эффективно и за один запрос считывать данные из таблицы и/или файла, если существуют необходимые привилегии.
Proof of concept, реализующий эту идею:
Думаю по коду все становится прозрачно, потому комментировать не стану. Для демонстрации в старой среде просто были добавлены новые данные:
И т.д. Таким образом, было осуществлено сопоставление данных и возможность демонстрации быстрой техники эксплуатации blind SQL Injection.
Какой то у тебя огромный скрипт получился, у меня попроще: https://forum.antichat.net/showpost.php?p=1258163&postcount=2
ОтветитьУдалить>> Какой то у тебя огромный скрипт получился
ОтветитьУдалитьпросто демка, написанная за полчаса... доведу до ума...))
>> у меня попроще
кстати по поводу функции find_in_set. функция не различает регистр букв, поэтому для целей получения данных в разном регистре она не подходит:(
select find_in_set((select 'a'),'A') - вернет 1
Ошибаетесь, ведь
ОтветитьУдалитьselect find_in_set((select 'A'),0x41); # вернет 1,
а
select find_in_set((select 'a'),0x41); # вернет 0
однако.........
ОтветитьУдалитьи ведь:
select find_in_set((select 'A'),'A'); # 1
select find_in_set((select 'a'),'A'); # 1
)) интересная особенность mysql... не знал. спасибо!