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 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.
Solução da tarefa cmd1
Clicamos no ícone com a assinatura cmd1 e informamos que precisamos conectar via SSH com a senha guest.

Quando conectado, vemos o banner correspondente.

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

Vamos dar uma olhada no código fonte.

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

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.

Quando conectado, vemos o banner correspondente.

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

Vamos dar uma olhada no código fonte.

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.

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.

Quando conectado, vemos o banner correspondente.

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

Vamos dar uma olhada no código fonte.

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.


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.

Quando conectado, vemos o banner correspondente.

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

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

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

Ó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á:
- Colocamos na pilha uma linha - o nome do arquivo.
- Abra o arquivo com o nome na parte superior da pilha (registro rsp).
- 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.
- Agora, escrevemos na saída padrão (descritor 1) uma flag que fica no topo da pilha (registrador rsp).
- 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()

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 .