
Метод обходу CAPTCHA: аудіофайли
https://ift.tt/MBenqZr
Це чернетка матеріалу з 2019 року, що документує техніку обходу CAPTCHA, яку я відкрив тоді. Усі наведені код і зображення — приклади з навчальних цілей.
Одного дня у 2019 році я втомився від повторюваного входу в студентську систему моєї школи лише для того, щоб записатися на повний курс. Тоді в голові спалахнула ідея: я міг автоматизувати ці спроби і зосередитися на своїй справжній роботі.
Що стосується автоматизації процесів на сайті, я люблю використовувати користувацькі скрипти.
1. План автоматизації
Наш навчальний портал закінчував сесії користувачів після певного часу, навіть якщо ви були активними. Тож спочатку мені потрібно було автоматизувати процес входу. Увійшовши успішно, навігація та запис на курс були б простими (лише кілька дій мишкою).
2. Інтерфейс входу
У навчальній системі був внутрішній сервіс CAPTCHA. Він відображав два числа і просив їхню суму. Зображення були трохи пошкоджені, але не настільки, щоб перешкодити OCR. Проте я не хотів покладатися на будь-яке API або систему обробки зображень для розв’язання цього CAPTCHA.
3. Перегляд аудіосервісу CAPTCHA
Після рішення не використовувати жодного сервісу зображень, я почав аналізувати мережевий трафік системи входу. Я помітив, що відповідь на згенерований CAPTCHA зберігається на сервері у сесії, пов’язаній зі мною.
Коли я натиснув кнопку відтворення аудіо, я зрозумів, що вона озвучує відповідь безпосередньо. Дві різні кінцеві точки повертали два різних аудіофайли, поділені на цифри десятків та одиниць.
Аудіосистема здавалася для мене ідеальним маршрутaм. Я не мав наміру подавати ці аудіофайли у службу розпізнавання мови — я шукав найшвидше, най«хакерське» рішення.
Оскільки однакові аудіофайли повинні мати однаковий розмір файлу, я вирішив спочатку перевірити цю гіпотезу.
І бац! За попереднім мапінгом кожної цифри в десятках та одиницях до їх розмірів файлів, я міг автоматично визначати відповідь.
4. Рішення
Ось приклад того, як спрацьовував код:
// Приклад мапування розмірів файлів до значень цифр
const tensMap = {
1234: 0, // 0 десятків
1456: 10, // 1 десяток
1567: 20, // 2 десятки
// … тощо
};
const onesMap = {
987: 0, // 0 одиниць
1023: 1, // 1 одиниця
1145: 2, // 2 одиниці
// … тощо
};
// Приклад: отримати аудіофайли та визначити відповідь за розміром файлу
async function solveCaptcha() {
const tensResponse = await fetch(‘/captcha/audio/tens’);
const onesResponse = await fetch(‘/captcha/audio/ones’);
const tensSize = parseInt(tensResponse.headers.get(‘content-length’));
const onesSize = parseInt(onesResponse.headers.get(‘content-length’));
const tensValue = tensMap[tensSize] || 0;
const onesValue = onesMap[onesSize] || 0;
return tensValue + onesValue;
}
// Використати це у процесі входу
const answer = await solveCaptcha();
document.querySelector(‘#captcha-input’).value = answer;
document.querySelector(‘#login-button’).click();
Коли я протестував цей підхід, він працював відмінно!
5. Висновки
Цей досвід навчить мене кільком речам:
Шукайте альтернативні вектори атак: коли очевидне рішення (OCR) здається складним, можуть існувати простіші шляхи (аудіо, метадані тощо).
Безпека через «прикриття» не працює: лише тому, що CAPTCHA використовує аудіо, не означає, що вона безпечна — особливо якщо файли детерміновані.
Розмір файлу — це метадані: навіть без обробки вмісту властивості файлу можуть розкривати інформацію.
Ця техніка спрацювала, тому що аудіофайли були попередньо згенеровані та статичні. Більш безпечна реалізація генерувала б унікальні аудіофайли або додавала випадковий шум, щоб запобігти відбитку за розміром.
HI-FI News
через DEV Community: javascript https://ift.tt/t738Ia5
30 січня 2026 р. о 13:41
January 30, 2026 at 01:41PM

Залишити відповідь