Regular expression Denial of Service - ReDoS
Деніал послуг через регулярні вирази - ReDoS
Деніал послуг через регулярні вирази (ReDoS)
Деніал послуг через регулярні вирази (ReDoS) відбувається, коли хтось використовує слабкі місця у роботі регулярних виразів (спосіб пошуку та відповідності шаблонам у тексті). Іноді, коли використовуються регулярні вирази, вони можуть стати дуже повільними, особливо якщо шматок тексту, з яким вони працюють, стає більшим. Ця повільність може бути настільки поганою, що зростає дуже швидко навіть при невеликому збільшенні розміру тексту. Злоумисники можуть використовувати цю проблему, щоб змусити програму, яка використовує регулярні вирази, перестати працювати належним чином протягом тривалого часу.
Проблемний алгоритм наївних регулярних виразів
Перевірте деталі за посиланням https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Зловісні регулярні вирази
Зловісний шаблон регулярного виразу - це той, який може застрягти на створеному вході, спричиняючи DoS. Зловісні регулярні вирази зазвичай містять групування з повторенням та повторення або альтернативу з перекриттям всередині повтореної групи. Деякі приклади зловісних шаблонів включають:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} для x > 10
Усі ці вразливі до входу aaaaaaaaaaaaaaaaaaaaaaaa!
.
Навантаження ReDoS
Витік рядка через ReDoS
На CTF (або в програмі винагороди за виявлення помилок) можливо ви керуєте регулярним виразом, з яким збігається чутлива інформація (прапорець). Тоді, якщо може бути корисним зробити сторінку замороженою (з тайм-аутом або більш тривалим часом обробки), якщо регулярний вираз збігся і не збігся. Таким чином ви зможете ексфільтрувати рядок по символах:
У цьому пості ви можете знайти це правило ReDoS:
^(?=<flag>)((.*)*)*salt$
Приклад:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
У цьому описі ви можете знайти це:
<flag>(((((((.*)*)*)*)*)*)*)!
У цьому описі він використовував:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Керування входом та регулярним виразом ReDoS
Наведені нижче приклади ReDoS, де ви керуєте як входом, так і регулярним виразом:
Інструменти
Посилання
Last updated