Vulnerabilidade de desserialização do Python e solução detalhada do método mágico (construção em cadeia, bandido da ferramenta de auditoria automática)

Índice

1. Funções relacionadas à serialização e desserialização do Python

2. Método mágico do Python

3. Explicação detalhada dos exemplos de métodos mágicos

<__reduzir__>

<__setstate__>

<__getstate__>

Em quarto lugar, a geração de vulnerabilidades de segurança de desserialização

5. Exemplos de perguntas reais

6. CTF-CISCN Norte da China-JWT&Desserialização

Seven, ferramenta de automação de auditoria de código - bandit


1. Funções relacionadas à serialização e desserialização do Python

  • pickle.dump(obj, file): salva o objeto em um arquivo após a serialização .
  • pickle.load(arquivo): leia o arquivo e desserialize o conteúdo serializado no arquivo em um objeto.
  • pickle.dumps(obj): Serialize o objeto em um fluxo de bytes em formato de string .
  • pickle.loads(bytes_obj): Deserialize um fluxo de bytes em formato de string em um objeto.

2. Método mágico do Python

  • __reduce__() : Chamado ao desserializar.
  • __reduce_ex__() : Chamado ao desserializar.
  • __setstate__() : Chamado ao desserializar.
  • __getstate__() : Chamado ao serializar.

3. Explicação detalhada dos exemplos de métodos mágicos

< __reduzir__ >

1. Código.

2. Resultados em execução. 

< __setstate__ >

1. Código.

 2. Resultados em execução. 

< __getstate__ >

1. Código.

 2. Resultados em execução. 

Em quarto lugar, a geração de vulnerabilidades de segurança de desserialização

1. Código.

​​​

2. Resultados em execução.

3. Quando alteramos o código que chama a calculadora para "ipconfig", podemos ver que o comando foi executado com sucesso ao executar o código.

4. Resumo:

        O método mágico executa e chama o código a seguir. Se o código a seguir for controlável, pode haver uma vulnerabilidade de desserialização. 

5. Exemplos de perguntas reais

1. Introdução ao ambiente:

        Use o aplicativo da web construído pelo Python-fask para obter as informações do usuário atual e exibi-las. Ao obter as informações do usuário, desserialize os dados do usuário para obter a falha de segurança causada por isso! 

2. Trechos de código.

3. Abra.

4. Ideia de ataque:

        Implante o valor do usuário no cookie e o valor do usuário são os dados serializados maliciosos gerados.

5. Construa exp.

6. Execute para obter o código serializado.

7. Sabe-se no código fonte que ele irá realizar uma decodificação em base64, então precisamos codificar o código de serialização obtido acima. Faça as seguintes modificações no código.

8. Execute novamente o código serializado codificado.

9. Pegue o pacote de dados e adicione o seguinte conteúdo no pacote de dados.

10. Depois de colocar a bolsa, você pode ver que a calculadora aparece com sucesso.

6. CTF-CISCN Norte da China-JWT&Desserialização

1. Ao solicitar:

        Encontre LV6 -> compre e modifique a lógica de pagamento -> modifique o valor jwt para ignorar as restrições administrativas -> explodir a chave jwt -> reorganize o valor jwt para se tornar administrador -> compre e entre no centro de membros -> código-fonte para encontrar o código-fonte de compactação de arquivo -> Código Python Nanji Deserialization -> Construir para ler o código do sinalizador para serialização e impressão -> Enviar para aquisição.

2. Local de teste:

  • Ponto de teste 1: autenticação JWT
  • Ponto de teste 2: desserialização de auditoria de código Python

3. Encontre e abra o ambiente do campo de tiro.

4. Após a abertura, a página é a seguinte.

5. Você pode ver que o objetivo é comprar v6.

6. Como é dividido em várias páginas, você pode usar scripts para rastrear e encontrar v6.

7. O código usado para rastreamento é mostrado na figura abaixo.

8. Você pode ver que se encontra na página 180.

9. Após clicar em Comprar, você será redirecionado para a página de login.

10. Após o cadastro, clique em Comprar novamente e você verá que passou para a página seguinte.

11. Mas depois de clicar em liquidação, ele pula para a página seguinte.

12. Isso ocorre porque nosso depósito não é suficiente para comprar v6.

13. Clicamos em Settlement novamente e capturamos o pacote.

14. Altere 0,8 (desconto) no pacote de dados acima para um número super pequeno.

15. Depois de liberar o pacote, recebi o seguinte resultado de retorno.

16. Depois de pegar novamente o pacote de dados, notamos o valor JWT no pacote de dados.

17. Colamos no site oficial e descriptografamos para obter os seguintes resultados.

18. Use um script para quebrar a chave.

19. Preencha a chave quebrada e altere o nome de usuário para admin para obter um novo valor JWT.

20. Cole no pacote de dados e coloque o pacote novamente.

21. Pode-se ver que o site foi executado com sucesso desta vez.

22. Mas quando clicamos no botão abaixo para nos tornarmos um grande membro, a página não responde.

23. Neste momento, depois de visualizar o código-fonte da página da web, você pode ver o seguinte conteúdo.

24. Depois de baixá-lo e descompactá-lo, abra-o e você poderá ver o seguinte conteúdo.

25. Pode-se saber que é o código original do site, vamos analisá-lo após abri-lo.

26. Usamos diretamente a função de pesquisa para pesquisar conteúdo relacionado à serialização.

27. Após o posicionamento, você pode ver a função que chama a serialização.

28. Após a análise, sabe-se que é codificado por python2, então usamos python para construir a carga útil.

 29. Após a execução, você pode ver que a carga foi construída com sucesso.

30. Altere o valor para a carga útil que acabamos de gerar.

31. Depois de mudar, clique em um botão novamente para se tornar um membro grande e você verá que a bandeira foi obtida com sucesso. 

Seven, ferramenta de automação de auditoria de código - bandit

1. Referência:

GitHub - PyCQA/bandit: Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns no código Python.

Plug-ins de teste — Documentação do Bandit

2. Instalação: pip install bandit

  • linux

        Após a instalação, ele estará no diretório bin atual do Python

        Use: bandit -r Diretório do código-fonte a ser auditado

  • janelas

        Após a instalação, o script estará no diretório Python atual

        Use: bandit -r diretório do código-fonte a ser auditado

3. Exemplos práticos.

Acho que você gosta

Origin blog.csdn.net/weixin_62808713/article/details/130048382
Recomendado
Clasificación