Продукты «Хакера»

  • Ежеквартальный «Хакер» #3

    Лучшие статьи квартала на бумаге

    2 000 ₽

    Заказать журнал
  • Годовая подписка на Xakep.ru

    Полный доступ к статьям и архиву выпусков

    6 000 ₽ в год

    Подписаться
  • «Пентест WEB» для начинающих

    Совместный курс «Хакера» и лаборатории «Хаксет»

    7 000 ₽

    Купить курс
  • Спецвыпуск «Хакера» #4

    Лучшие статьи за 2021–2022 годы на бумаге

    2 000 ₽

    Заказать журнал

pServ - небольшой Web сервер. Пакет pServ содержит несколько переполнений буфера, которые позволяют удаленному атакующему выполнять произвольный код с привилегиями Web сервера. 

Однобайтовое переполнение в Stream Reading

pServ выделает 1024 байт для строкового буфера и затем пытается читать полный размер блока. Можно обнулить один байт EBP (x86), посылая сообщение TCP потока, имеющего размер ровно 1024 байт, на сервер. 

Переполнение буфера в методе запроса

pServ принимает 1024 байта в каждой строке запроса, но распределяет только 16 байтов (согласно определению "request.method" в main.h) для этих данных, так что запрос: 

[buffer 1К] / HTTP/1.0 

Перезапишет 1008 байт памяти. 

Переполнение буфера в HTTP версии

pServ распределяет только 16 байтовый буфер для "request.protocolVersion" в main.h. Запрос типа: 

GET / HTTP/1.[buffer] 

Перезапишет 1008 байт памяти. 

Переполнение буфера в User-Agent

pServ выделяет только 256 байтовый буфер для строки User-Agent, которая может быть больше на 1011 байт, тем самым атакующий может перезаписать 755 байт данных: 

GET / HTTP/1.0 
User-Agent: [buffer] 

Переполнение буфера в HTTP запросе. Пример: 

GET / HTTP/1.0[\n] 

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии