QQ 1274510382
Wechat JNZ_aming
Business Alliance QQ group 538250800
Problemas de tecnologia Grupo QQ 599020441 Grupo QQ de
solução 152889761
Junte-se a nós grupo
QQ 649347320 Grupo QQ de aprendizagem compartilhada 674240731
Tecnologia cronológica aming
segurança de rede, aprendizagem profunda, embutido, aprimoramento de máquina, inteligência biológica, ciência da vida.
Ding Ding Ding: O produto está online—> Siga a
conta pública oficial do WeChat —Jinan Ji Nian Information Technology Co., Ltd. Projeto de subsistência das pessoas: franquia de loja / namoro de entretenimento / círculo de negócios corporativos / terceirização liberação de projeto de desenvolvimento em tempo parcial /
projeto de segurança: sistema de defesa de consciência situacional / sistema de inspeção de intranet
Projeto de serviço em nuvem: expansão dinâmica de host em nuvem / nome de domínio / disco de nuvem de armazenamento-banco de dados elástico / API-AIeverthing
consultoria de produto / serviço pós-venda (o mesmo)
É sempre superficial no papel, e eu sei absolutamente que esse assunto deve ser resolvido! ! !
Procurando por parceiros com interesses semelhantes para iniciar um negócio. . . Informações de contato da Baotuan Didi aming! !
#Este artigo é para o sistema de publicidade veicular anúncios automaticamente
# Se houver alguma violação, exclusão, entre em contato conosco rapidamente
O cache do kernel é habilitado por padrão no IIS para executar tarefas relacionadas ao cache no pipeline de processamento de solicitação.
Quando a pilha do protocolo HTTP (HTTP.sys) analisa incorretamente a solicitação HTTP, isso causará a vulnerabilidade de execução remota de código do IIS.
Por meio de experimentos, aprenda sobre a
arquitetura IIS, a pilha do protocolo HTTP e como ela funciona, as vulnerabilidades da pilha do protocolo HTTP e
domine os métodos de exploração de vulnerabilidade MS15-034 e os princípios de vulnerabilidade.
Segurança na web
Profissionais de segurança da informação
Base de computadores, rede de computadores
Conhecimento preliminar
Informações de vulnerabilidade
Número da vulnerabilidade: CVE-2015-1635
Descrição da vulnerabilidade: a
vulnerabilidade de execução remota de código IIS existe na pilha do protocolo HTTP (HTTP.sys) .Esta
vulnerabilidade pode ser causada quando o HTTP.sys analisa incorretamente as solicitações HTTP.
Anúncio da Microsoft sobre vulnerabilidades: https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2015/ms15-034
Versão afetada: Windows Server 2008 R2 / Server 2012 / Server 2012 R2 e Windows 7/8 / 8.1
instalado com Microsoft
IIS 6.0 ou superior
são todos afetados por esta vulnerabilidade.
Arquitetura IIS
Após instalar o IIS (Internet Information Service) no sistema,
Existe um serviço denominado World Wide Web Publishing Service (WWW Service).
Quando o cliente envia uma solicitação HTTP ao sistema, o
serviço WWW inicia ou seleciona o processo de trabalho w3wp.exe com base na estratégia de balanceamento de carga
para processar a solicitação HTTP e enviar uma resposta HTTP apropriada.
O processo w3wp.exe usa HTTP.sys para concluir muitas tarefas relacionadas ao processamento do protocolo HTTP,
incluindo análise do protocolo HTTP, montagem do conteúdo de resposta e cache de conteúdo.
HTTP.sys recebe solicitações HTTP e envia respostas HTTP por meio de TCPIP.sys.
Pilha de protocolo HTTP e como funciona
O servidor Web IIS usa o ouvinte HTTP como parte do subsistema de rede Windows,
que é implementado pelo driver de dispositivo do modo kernel da pilha do protocolo HTTP (HTTP.sys). A
pilha do protocolo HTTP analisa as solicitações HTTP e fornece respostas ao cliente .
O HTTP.sys fornece os seguintes serviços no IIS 6.0: roteamento de solicitações HTTP para a fila de solicitação correta; armazenamento de respostas em cache no modo kernel; execução de todos os registros baseados em texto para serviços WWW; implementação de funções de qualidade de serviço, incluindo restrição de conexão, tempo limite de conexão, fila limite de comprimento e limite de largura.
Ao criar um site da Web, o IIS usará HTTP.sys para registrar o site e, em seguida, o HTTP.sys receberá todas as solicitações HTTP para o site. A função do HTTP.sys é semelhante a um encaminhador: ele envia a solicitação da Web recebida para a fila de solicitações que executa o processo do modo de usuário do site ou aplicativo da Web e envia a resposta de volta ao cliente.
Além de recuperar a resposta armazenada de seu cache interno, o HTTP.sys não processa as solicitações que recebe. Portanto, o código específico do aplicativo não é carregado no modo kernel, portanto, os erros no código específico do aplicativo não afetarão o kernel ou causarão falha no sistema.
Vulnerabilidade da pilha do protocolo HTTP
O cache do kernel é habilitado por padrão no IIS para executar tarefas relacionadas ao cache no pipeline de processamento de solicitação.
O cache melhora o desempenho armazenando informações processadas (como páginas da web) na memória do servidor.
Use o cabeçalho Range HTTP para explorar esta vulnerabilidade.Este
cabeçalho HTTP permite que o cliente solicite conteúdo específico do servidor conforme necessário.
Normalmente, o cabeçalho Range contém os seguintes valores:
Intervalo: bytes = 124-5656, também pode conter os seguintes valores: Intervalo: bytes = 0-
Se o limite superior no cabeçalho Range não existir,
presume-se que o cliente está solicitando dados completos.
Ao contrário, se o invasor especificar um limite superior alto e enviar uma solicitação HTTP com um valor especial de intervalo, isso
fará com que a variável de intervalo transborde no servidor.
O limite superior do cabeçalho Range é 0xFFFFFFFFFFFFFFFFFF,
que é o maior inteiro sem sinal de 64 bits.
O invasor envia uma solicitação HTTP com este valor, o que causará um estouro de número inteiro, e o
servidor responderá como 'O intervalo solicitado não pode ser atendido', o que significa que o cliente exige que uma parte do arquivo exceda o final do arquivo no servidor.
A exploração bem-sucedida de um ataque também pode levar à negação de serviço.
Experimentos relacionados à segurança do servidor IIS
Exploração de vulnerabilidade de permissão de gravação IIS6.0: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217203100001
Análise e exploração de vulnerabilidade de 0 dias de execução remota de código IIS6.0: https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec2017032915142000001 (CVE-2017-7269)
Vulnerabilidade de análise IIS usada no ataque de upload fckEditor: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217243800001
Propósito do experimento
Compreender a arquitetura do IIS, a
pilha do protocolo HTTP e como funciona, e as vulnerabilidades da pilha do protocolo HTTP por meio de experimentos , e
dominar os métodos de exploração de vulnerabilidade e princípios de vulnerabilidades do MS15-034.
Cliente do ambiente experimental : Windows Server 2008 R2, IP: 10.1.1.134
Ataque : Kali , IP : 10.1.1.100
Endereço para download da ferramenta de exploração de vulnerabilidade: http://tools.hetianlab.com/tools/CVE-2015-1635.zip
Descrição da tarefa: detecção de vulnerabilidade.
Sabemos que esta é uma vulnerabilidade de estouro de número inteiro localizada em HTTP.sys.
Enviar uma solicitação HTTP no seguinte formato para o servidor IIS pode acionar a detecção da vulnerabilidade:
A máquina Kali executa o comando curl url -H "Host: ip" -H "Intervalo: bytes = 0-18446744073709551615":
Neste momento, 18446744073709551615 convertido em hexadecimal é 0xFFFFFFFFFFFFFFFF (16 F), que
é o maior inteiro que pode ser expresso por um inteiro sem sinal de 64 bits,
portanto , o estouro de inteiro deve estar relacionado a esse inteiro anormal.
Conforme mostrado acima,
se o servidor IIS retornar "intervalo solicitado não satisfatório", então há uma vulnerabilidade;
se ele retornar "a solicitação tem um nome de cabeçalho inválido", a vulnerabilidade foi corrigida.
Baixe o script:
wget http://tools.hetianlab.com/tools/CVE-2015-1635.zip
unzip CVE-2015-1635.zip
Preste atenção para modificar o IP da máquina experimental:
Use POC para detecção de vulnerabilidade:
Indica que a máquina de destino tem uma vulnerabilidade.
Etapa experimental dois
Descrição da tarefa: ataque de exploração MS15-034: obter dados de memória.
A máquina Kali abre o msfconsole e procura por módulos de exploração relacionados à vulnerabilidade:
Use o segundo módulo
ms15_034_http_sys_memory_dump para ler dados de memória do servidor:
solicitações de pilha de protocolo HTTP para processar a divulgação de informações de memória HTTP.SYS.
Execute um ataque:
Ler os dados da memória do servidor com sucesso.
Experimento Etapa Três
Descrição da tarefa: ataque de exploração MS15-034: ataque de negação de serviço.
Use o primeiro módulo
ms15_034_ulonglongadd para realizar ataques ddos: processamento de solicitação de pilha de protocolo HTTP negação de serviço
Configure os parâmetros e execute o ataque:
Nota: Você pode mudar para o cliente antes de executar o ataque e sentir o estado de execução antes e depois do ataque.
Desempenho bem-sucedido do cliente sendo atacado na máquina experimental:
Etapa Quatro da Experiência
Análise de vulnerabilidade: ataque de negação de serviço.
Depois de enviar a solicitação ao servidor HTTP,
w3wp.exe processará a solicitação HTTP e o
TCPIP.sys encaminhará qualquer conteúdo do protocolo HTTP para HTTP.sys.
Se a solicitação estiver dentro do intervalo HTTP, a
função UlpParseRange () será chamada para analisar a solicitação para obter as posições inicial e final do intervalo de solicitação
e calcular o comprimento do intervalo.
Quando a posição inicial é 0 e a posição final é 0xFFFFFFFFFFFFFFFFFF, o
comprimento do intervalo é igual a 0, o código não verifica o estouro e não toma medidas de tratamento de erros;
Quando a posição inicial é 284 e a posição final é 0xFFFFFFFFFFFFFFFFFF, o
comprimento do intervalo é igual a -284 e o valor hexadecimal é 0xFFFFFFFFFFFFFFFEE4.
Se for interpretado como um inteiro sem sinal, o valor é muito grande.
Após analisar a solicitação HTTP, a função UlAdjustRangesToContentSize () será chamada.
Se a posição inicial e o comprimento forem 'inválidos'
(incluindo a posição inicial do intervalo é 0xFFFFFFFFFFFFFFFFFF, o comprimento do intervalo é 0xFFFFFFFFFFFFFFFFFF, a
posição inicial> = o comprimento da página da web solicitado e a posição final> = o comprimento da página da web solicitado),
a função irá ajustar o intervalo A posição inicial e o comprimento do
Se a mesma solicitação for recebida continuamente, a resposta à solicitação será armazenada em cache e será recuperada do cache e enviada ao solicitante.
Este processo irá chamar a função UxpTpDirectTransmit () para calcular o comprimento do pacote de resposta HTTP.
Depois de montar o pacote de resposta HTTP, o
HTTP.sys encaminhará as informações do pacote para o driver da pilha de protocolo para envio.
A função TcpSegmentTcbSend () do TCPIP.sys percorrerá o conteúdo de cada parte do pacote. Há um estouro de número inteiro no função.
Quando a posição inicial da solicitação de intervalo HTTP é 284 e a
posição final é 18446744073709551615 (o valor hexadecimal é 0xFFFFFFFFFFFFFFFFFFFF), o
intervalo excede o tamanho do arquivo de página da web solicitado.
Como o comprimento da resposta HTTP é muito grande, quando o loop é executado várias vezes e um estouro de número inteiro é disparado,
o endereço virtual é usado para construir uma lista de descritores de memória parcial. Como o intervalo não é um subintervalo do intervalo da fonte, isso causará uma tela azul mortal.
Etapa experimental cinco
Análise de vulnerabilidade: Obtenha dados de memória.
Suponha que 3-18446744073709551615 seja definido como intervalo1 e
1-600 seja definido como intervalo2.
Depois que a função UlpParseRange () analisa a solicitação HTTP,
a função UlAdjustRangesToContentSize () será chamada.
Nesse momento, intervalo1 irá disparar um estouro de inteiro (3 + 0xFFFFFFFFFFFFFFFD> = 0).
Se a mesma operação for recebida continuamente, a resposta à solicitação será armazenada em cache, recuperada do cache e enviada ao solicitante.
Ao usar várias solicitações de escopo,
há uma marca de ligação de escopo e informações de escopo antes de cada conteúdo de escopo.
Depois de montar o pacote de resposta HTTP, o HTTP.sys encaminhará as informações do pacote no driver da pilha de protocolo para envio.
A função TcpSegmentTcbSend () de TCPIP.sys percorrerá cada parte do pacote de dados.
O uso de solicitações de vários intervalos pode aumentar o comprimento da resposta HTTP, revelando assim mais informações.
Se apenas um único intervalo for usado, o comprimento da resposta HTTP torna-se muito grande ou muito pequeno:
Se o comprimento da resposta HTTP for muito grande, o sistema causará uma tela azul mortal;
se o comprimento da resposta HTTP for muito pequeno, o buffer não será substituído após o conteúdo da página da web de destino vazar informações.
Portanto, o invasor usará solicitações de vários intervalos para divulgar mais informações.
Correções de bug
Desative a ativação do cache do kernel no cache de saída (desative o cache do kernel do IIS):
Análise e pensamento
Para obter mais análises, consulte: https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.html.
referência
1 、 https: //technet.microsoft.com/en-us/library/cc739400 (v = ws.10) .aspx
2 、 https: //www.trendmicro.com/en_us/research/15/d/iis-at-risk-the-http-protocol-stack-vulnerability.html? _Ga = 2.58551274.1902911539.1609211638-1589647619.1609211638