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] 



Оставить мнение