Tìm hiểu về khai thác nodejs và mongodb injection


Bài viết đưa ra một kĩ thuật đơn giản nhưng hiệu quả trong việc khai thác ứng dụng web hiện đại được viết trên nền NodeJS và MongoDB. Thực chất, kĩ thuật này khá giống SQL Injection (SQLi) nhưng đơn giản hơn nhiều do không cần hoàn thành những chuỗi kí tự phức tạp hay lạ thường.

Những ví dụ trong bài viết sử dụng ExpressJS. Đây là framework lập trình ứng dụng web phổ biến dành cho NodeJs.


Sơ lược về SQL Injection

Điều đầu tiên bạn cần học khi nghiên cứu về SQL Injection là làm thế nào để tạo ra một biểu thức TRUE. Ví dụ về câu truy vấn SQL dưới đây được sử dụng trong việc xác thực người dùng khi tên tài khoản và mật khẩu được gửi lên ứng dụng:

SELECT * FROM users WHERE username = '$username' AND password = '$password'

Nếu câu lệnh này không được chuẩn bị hay xử lý đúng khi tạo ra, tin tặc có thể đưa thêm

' or 1=1--

vào trường username nhằm tạo tạo một bypass login đơn giản nhất như sau:

SELECT * FROM users WHERE username = '' or 1=1--' AND password = ''

Hiện nay, kiểu tấn công cổ điển và biến thể của nó vẫn đang được sử dụng để xác định lỗ hổng trong xử lý câu lệnh SQL.

Sơ lược về MongoDB Injection

Dù SQL Injection vẫn là một kiểu tấn công ứng dụng web phổ biến, nhưng nó không còn phát tán rộng rãi như trước kia nữa. Rất nhiều ứng dụng web hiện nay lựa chọn các cơ chế lưu trữ đơn giản hơn như cung cấp cơ sở dữ liệu NoSQL như MongoDB. Cơ sở dữ liệu NoSQL không chỉ được phát triển theo hướng đơn giản hóa mà còn cải thiện bảo mật thông qua việc loại bỏ hoàn toàn ngôn ngữ SQL và phụ thuộc vào cơ chế truy vấn có cấu trúc đơn giản hơn như JSON và JavaScript.

Câu lệnh SQL ở ví dụ truy vấn chi tiết đăng nhập người dùng sẽ được viết như sau trong MongoDB:

db.users.find({username: username, password: password});

Chúng ta không còn phải xử lý với một ngôn ngữ truy vấn dưới dạng một chuỗi kí tự, do đó có thể cho rằng việc tiêm nhiễm chuỗi độc hại vào là không thể. Tuy nhiên, sét về tính bảo mật, vẫn còn rất nhiều yếu tốt khác có thể ảnh hưởng.

Ví dụ, giả sử tại trường username, hoặc tham số được truyền vào dưới dạng phân tích một đối tượng JSON. Nếu đầu vào ứng dụng là một tài liệu JSON, tin tặc có thể thực hiện bypass login tương tự như với SQL Injection với giá trị đầu vào như sau:

{
"username": {"$gt": ""},
"password": {"$gt": ""}
}

Code xử lý yêu cầu có dạng như sau:

app.post('/', function (req, res) {
db.users.find({username: req.body.username, password: req.body.password}, function (err, users) {
// TODO: handle the rest
});
});

Ở đoạn code ExpressJS xử lý trên, trường username và password không được kiểm duyệt để đảm bảo chúng là chuỗi kí tự. Do đó khi một tài liệu JSON được phân tích, những trường này có thể chứa bất kì chuỗi kí tự nào, và những chuỗi kí tự đó có thể được dùng để tạo ra một cấu trúc truy vấn khác. Trong MongoDB, trường $gt có nghĩa đặc biệt, được sử dụng trong so sánh lớn hơn. Do đó username và password từ cơ sở dữ liệu sẽ được so sánh với dữ liệu nhập vào là chuỗi kí tự trống “” và kết quả câu lệnh trả về là TRUE.

Request dùng để khai thác sẽ có dạng như sau:

POST http://target/ HTTP/1.1
Content-Type: application/json
{
"username": {"$gt": ""},
"password": {"$gt": ""}
}

Sử dụng khai thác kết hợp NodeJS và MongoDB

Ví dụ trên sử dụng cơ chế truyền tải nội dung kiểu JSON để giải thích về kiểu tấn công này trở nên dễ hiểu hơn. Tuy nhiên, JSON vẫn chưa phổ biến như url-encoded key-value hay còn gọi là urlencoding. Sử dụng phần thân và tham số truy vấn trong định dạng urlencoding liệu có an toàn?

Trong ExpressJS ta vẫn có thể bypass ví dụ trên thông qua một chuỗi truy vấn đơn giản như sau:

POST http://target/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username[$gt]=&password[$gt]=

Chuỗi

username[$gt]=

là một cú pháp đặc biệt sử dụng trong module qs (sử dụng mặc định trong ExpressJS và phần mềm trung gian body-parser). Cú pháp này tương đương với việc tạo ra một JavaScript object/hash với một tham số $gt và không có giá trị. Thực chất, request trên sẽ trả về kết quả là một đối tượng JavaScript như sau:

{
"username": {"$gt": undefined},
"password": {"$gt": undefined}
}

Nếu so sánh với đối tượng sinh ra như trong ví dụ trước, ta sẽ thấy chúng hoàn toàn giống nhau.

CÁC VÍ DỤ MINH HỌA

Hai project sau được dùng để minh họa lỗ hổng trong thực tế. Project đầu tiên sử dụng kiểu giá trị urlencoded và project thứ hai sử dụng JSON. Bạn đọc có thể đọc thêm tệp tin README để có thêm thông tin.

Kiểm thử MongoDB Injection

Kết hợp hai công cụ kiểm tra tự động có tên Formfuzz và Jsonfuzz. Các công cụ sẽ tự động sinh ra request kiểm tra khai thác MongoDB.


Bình luận

Email của bạn sẽ không được hiển thị công khai.

  1. п»ї
    Как использовать компьютер с умом? Заставьте его добывать криптовалюту! CryptoTab Браузер — это самый быстрый способ начать ваш путь в мире майнинга. Браузер уже готов к использованию — просто скачайте и установите! http://bit.ly/2TPy2dj

    https://cryptotabbrowser.com/landing/42/5703690

    https://clck.ru/QAzZ6

    =Crypto=

  2. п»ї
    Я пользуюсь CryptoTab Браузером — и вам советую! С ним вы сможете получать BTC, просто посещая любимые сайты или просматривая видео на YouTube. CryptoTab быстр, надежен и обладает удобным интерфейсом. https://cryptotabbrowser.com/5703690

    https://cryptotabbrowser.com/landing/43/5703690

    https://clck.ru/QB24E

    =Crypto=

  3. БИЗНЕС-ПЛАН

    Наша команда выручает студентов с 2015 года. В процессе борьбы с невероятно сложными предметами и хитрыми преподавателям мы смогли помочь более чем 5000 клиентам.

    Мы стремимся оказывать услуги наивысшего уровня и поэтому стараемся улучшить каждую деталь нашей работы: авторы проходят тестирования и пробный период, с менеджерами проводится ежемесячное обучение по общению с клиентами, и техническая доработка сайта не прекращается ни на секунду.

    Мы беремся за все предметы и все типы работ. Также мы с радостью выполним доработки уже готовой работы или напишем самые трудные разделы. Наша цель – это максимально упростить обучение в ВУЗе и сделать его спокойным.

    Мы работаем без офиса, хоть и имеем официальную регистрацию. Это дает нам возможность избежать лишних затрат и как результат наши цены доступные для всех студентов.

    Быстрое развитие компании связано с большим процентов довольных клиентов, которые рекомендуют нас своим одногруппникам и знакомым из других университетов.

    С начала 2015 года мы запустили систему вознаграждений за такие рекомендации и уже выплатили 200000 рублей. Эти деньги могут были использованы для заказы новых работ.

    Мы продолжаем развиваться и оказывать услуги высокого уровня. Надеемся, что вы оцените наши старания!
    ЧЕРТЕЖИ

  4. https://t.me/student_diplom – РЕШЕНИЕ ЗАДАЧ

    Как оформить заказ
    1) Заполните форму заказа на нашем сайте

    Нажмите на кнопку «Заказать работу»
    Авторизуйтесь через Вконтакте или заполните ваши контактные данные в открывшейся форме.На указанные вами контакты придет уведомления о цене вашего заказа, вопросы менеджера и другая полезная информация.
    Дайте максимально развернутую информацию о Вашем заказе, сроках выполнения и прикрепите файлы, если они есть.
    2) Внесите предоплату 50 процентов, чтобы мы приступили к выполнению.

    3) Следите за вашим заказом. Вы можете следить за статусом вашего заказ в личном кабинете. Также согласовывать все детали выполнения работы с Вашим автором.

    4) Когда Ваш заказ будет готов полностью, Вы можете ознакомиться с его частью. После этого необходимо внести остаток оплаты, чтобы скачать весь заказ.Все файлы вашего заказа можно скачать в личном кабинете или попросить менеджера выслать их вам на почту.

    5) Сдайте работу на отлично!
    ОТВЕТЫ НА БИЛЕТЫ

  5. Закажите кредитную карту сейчас — бесплатно доставим завтра!
    Выгодно приобретай кредитную карту:
    3 месяца без % на любые операции
    Получить карту: https://bit.ly/32MeHhT
    Наша лучшая кредитная карта:

    Бесплатная доставка – Оставьте заявку на карту сегодня, и мы бесплатно доставим её уже завтра.
    Получить карту с выгодой https://bit.ly/32MeHhT

  6. Заявка на кредитную карту 3 месяца без %
    Выгодно приобретай кредитную карту:

    500 000 ? лимит по карте
    Получить карту: https://bit.ly/32MeHhT
    Наша лучшая кредитная карта:
    Возобновляемый беспроцентный период – Ваши 3 месяца без процентов начнутся заново на следующий день после того, как вы вернёте на карту потраченные деньги. И так снова и снова.
    Получить карту с выгодой https://bit.ly/32MeHhT

  7. Получите максимальную отдачу от своих сайтов PBN
    PBN – самый эффективный метод построения ссылок Blackhat, когда-либо обнаруженный создателями ссылок. Тем не менее, алгоритм поиска Google не может точно определять сайты PBN.
    Но эффективность ссылок PBN зависит от качества сайтов PBN. Если сайт PBN имеет значительное количество обратных ссылок, то ссылки с этого сайта будут более эффективными, чем сайт PBN без каких-либо обратных ссылок.
    Ссылки могут быть лучшим способом предоставить ссылки на ваши сайты PBN. Ссылки на профили на форумах увеличат ссылочный вес PBN-сайтов. Даже обратные ссылки помогут сайту PBN выйти из песочницы Google.
    Обращайтесь: https://t.me/seo_promo

  8. http://bit.ly/2sdUrWH – ОТВЕТЫ НА БИЛЕТЫ

    Наша команда выручает студентов с 2015 года. В процессе борьбы с невероятно сложными предметами и хитрыми преподавателям мы смогли помочь более чем 5000 клиентам.

    Мы стремимся оказывать услуги наивысшего уровня и поэтому стараемся улучшить каждую деталь нашей работы: авторы проходят тестирования и пробный период, с менеджерами проводится ежемесячное обучение по общению с клиентами, и техническая доработка сайта не прекращается ни на секунду.

    Мы беремся за все предметы и все типы работ. Также мы с радостью выполним доработки уже готовой работы или напишем самые трудные разделы. Наша цель – это максимально упростить обучение в ВУЗе и сделать его спокойным.

    Мы работаем без офиса, хоть и имеем официальную регистрацию. Это дает нам возможность избежать лишних затрат и как результат наши цены доступные для всех студентов.

    Быстрое развитие компании связано с большим процентов довольных клиентов, которые рекомендуют нас своим одногруппникам и знакомым из других университетов.

    С начала 2015 года мы запустили систему вознаграждений за такие рекомендации и уже выплатили 200000 рублей. Эти деньги могут были использованы для заказы новых работ.

    Мы продолжаем развиваться и оказывать услуги высокого уровня. Надеемся, что вы оцените наши старания!
    ЭССЕ

  9. Увеличение ссылочного веса пресс-релиза: https://t.me/seo_promo
    Пресс-релиз – это еще один отличный способ наладить ссылки и рекламировать свой бренд, не тратя слишком много денег.
    Все еще небольшие и крупные бренды используют пресс-релизы в своей маркетинговой кампании. Но ссылки из пресс-релиза не такие уж и сильные.
    Важный факт: в пресс-релизах нет ссылок, как в вашем блоге . Если вы можете дать ссылки на свой пресс-релиз, это увеличит ссылочный вес пресс-релиза.
    В конечном итоге это увеличит ссылочный вес на странице с деньгами. Вы можете предоставить на форуме ссылки на пресс-релиз. Ссылки на форумы могут увеличить ссылочный вес пресс-релиза.
    В этом случае мы можем вам помочь.
    мы можем создать огромное количество ссылок на профили форума для пресс-релиза. Без сомнения, ссылки увеличат ссылочный вес пресс-релизов.

  10. Заявка на кредитную карту 100 дней без %
    Выгодно приобретай кредитную карту:

    500 000 ? лимит по карте
    Получить карту: https://bit.ly/32MeHhT
    Наша лучшая кредитная карта:

    Закрываем невыгодные кредитки – Закрывайте кредитки других банков бесплатным и моментальным переводом и экономьте на платежах в беспроцентный период.
    Для перевода не нужно никуда ходить — всё можно сделать в приложении или интернет-банке.
    Получить карту с выгодой https://bit.ly/32MeHhT

  11. Активный корсет GenuTrain стабилизирует сустав, оказывает обезбаливающее действие и способствует более быстрой реабилитации и восстановления подвижности колена. Ортез предназначен для активной поддержки коленного сустава, его действие проявляется во время движений. При этом создается компрессия и происходит массаж мягких тканей за счет материала анатомической вязки и интегрированной кольцевидной вставки Омега.
    Купить со скидкой здесь: https://bit.ly/33NnBei

  12. Футболка

    http://merchprint.ru/zhenskiye-futbolki/futbolka-bring-me-the-horizon-1841308 – Футболка
    Старая цена – 1499
    Новая цена – 999

  13. Заявка на кредитную карту 100 дней без %
    Выгодно приобретай кредитную карту:

    500 000 ? лимит по карте
    Получить карту: https://bit.ly/3ccGnPX
    Наша лучшая кредитная карта:
    Возобновляемый беспроцентный период – Ваши 100 дней без процентов начнутся заново на следующий день после того, как вы вернёте на карту потраченные деньги. И так снова и снова.
    Получить карту с выгодой https://bit.ly/3ccGnPX

  14. Только самые лучшие и эффективные методы и способы продвижения
    https://t.me/seo_promo – Создание ссылок

  15. https://bit.ly/2FyoGOs – 100ГАРАНТИРОВАННЫЙ СПОСОБ РАЗВЕСТИ ДЕВУШКУ НА СЕКС