← Voltar à lista

campo php2shell-audit: Windows usa exe, Linux, py, 10 minutos para descobrir PHP.

itadol5j

Não se trata de curvas. É tudo sobre batidas.Carregar ferramentas, correr máquinas, limpar alvos, ler conclusões, decidir se corrigir ou nãoUm dragão. Dez minutos para terminar.

Primeiro, CVE-2026-109618 e CVE-2026-109619 são RCE não autorizados para o próprio motor PHP, a versão oficial restaurada é 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Dois conjuntos de calibre...PHP oficial CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89.8 no título é o último, e ambos se referem à mesma lacuna de dois para um, não pensar que é diferente.

Aqui estão as ferramentas:Vivipenclaw-code/php2shell-uditApache-2.0, só hoje. Ele faz duas coisas: verificar o que PHPs são instalados nesta máquina, varrer a versão desconhecida da tempestade distante.Não ataca o tráfego, não escreve discos, não altera nenhuma configuração.E isso é o que eu verifiquei no código fonte, e o modo remoto está realmente enviando apenas um pedido HEAD para um chefe de resposta.

efeitos de execução do terminal php2shell-udit

I. DIFTING: Duas maneiras de ver em que sistema você está.

Linux / MacOS ir Python, zero dependência, biblioteca padrão é suficiente, sem pip para carregar qualquer coisa:

git clone https://github.com/viviopenclaw-code/php2shell-audit.git
cd php2shell-audit
chmod +x php2shell_audit.py
python3 php2shell_audit.py --local

Windows vai direto para o exe, sem Python. Agarrar na página de lançamento php2shell-audit.exe:

certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local

Exe é um único programa de console de arquivo que Win10/11 x64 está disponível,Sem assinatura de código.Então a primeira corrida para SmartScreen iria parar. Vamos correr primeiro. SHA256SUMS.txt Mais uma vez — este passo é aquele em que ninguém toca na versão “verde” que está sendo circulada online.

Duas versões dos mesmos parâmetros. Apenas um conjunto na parte de trás do tutorial, Windows. python3 php2shell_audit.py Substituir php2shell-audit.exe Fá-lo.

Métodos de instalação Linux e Windows

O que se passa?

python3 php2shell_audit.py --local

Vai fazer quatro coisas, uma coisa:

  1. Encontra o PHP.:/usr/bin/php*Não sei./usr/sbin/php-fpm*Não sei./opt/*Não sei./usr/lib/php/*/sapi/*Homebrew também conta. Janelas, vejam. C:\phpPHP sob XAMPP, WAMP, Laragon, Chocolatey, Scoop, Arquivos de Programa.
  2. Ler a Versão: Executar php -v Tome Banner, com 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
  3. Verificar a Configuração: analisando as instruções de mitigação intermediárias em php.ini.
  4. Processo de Coluna: listar todos os trabalhos que devem ser reiniciados após o patch.

Atropelei uma máquina sem PHP. Aqui está a saída:

php2shell-audit 1.1.0 - local audit
Host    : admin
System  : Linux 7.0.0-30-generic (x86_64)
------------------------------------------------------------------------
[UNKNOWN] No PHP installation detected.
------------------------------------------------------------------------
php.ini mitigation directives
[WARNING] session.upload_progress.enabled = (unset)  (recommended 0)
[WARNING] fatal_error_backtraces = (unset)  (recommended 0)
[WARNING] expose_php = (unset)  (recommended 0)
------------------------------------------------------------------------
Running services that must be restarted after patching
[INFO] apache2 - 3 process(es)
------------------------------------------------------------------------
[INFO] No PHP binary, FPM daemon or Apache PHP module was found on this host.
------------------------------------------------------------------------
Remediation
[UNKNOWN] No PHP install was audited, so nothing can be confirmed safe.

Observe a última linha:Sem PHP é desconhecido, sem PASS.Este design é muito bem reconhecido -- não há problema em encontrar nada. São duas coisas diferentes.

A propósito, está ligado. expose_php Todos eles. Este não tem nada a ver com a falha em si, mas é uma decisão direta sobre se uma varredura remota pode ler o seu número de versão.Desliga isso. As impressões digitais do agressor são meio cegas.Não sei. Claro, não se chama reparação, chama-se redução da exposição à informação.

III. Parâmetros

Visão geral do argumento php2shell-udit
ParâmetrosPapelPadrão
--local / --remoteDois ou um, decidimos verificar a máquina ou o alvo.Requerido
--file targets.txtLote alvo, um em uma linha, # começar com comentárioNenhum
--workers NNúmero de cursos de longa duração10
--json report.jsonSaída completa JSON,- Bater no 'stdout'Nenhum
--timeout NTempo limite de pedido único (seg)8
--insecureIgnorar a verificação TLS, apenas para impressões digitaisFechar

Código de saída: direto para o ponto do cartão CI

Código de saídaSignificado
0Nenhuma versão afetada encontrada
2Pelo menos uma versão afetada foi encontrada.
1Erro na própria ferramenta (por exemplo, o JSON não consegue escrever)

Sai do número dois, este é o ponto.Isso significa que você pode colocá-lo na linha de fluxo, varrá-lo através da fase de construção, atingi-lo, e não esperar que os humanos a encontrem.

iv. Varrendo remotamente: –remote como

# 单个目标
python3 php2shell_audit.py --remote example.com

# 批量,20 个并发,出 JSON
python3 php2shell_audit.py --remote --file targets.txt --workers 20 --json out.json

# 也可以直接写在命令行里
python3 php2shell_audit.py --remote https://a.example 10.0.0.5

O quê? Escrever

# production fleet
example.com
https://shop.example.net
10.0.0.5:8080

Começa com uma nota, uma linha, uma no armazém targets.example.txt Pode ser copiado diretamente.

O que enviou?

Cada golo.Enviar apenas um pedido HEAD, apenas uma vez o servidor rejeitará o HeAD. E lê. Server:Não sei.X-Powered-By: e Set-CookieSai daí. PHP/x.y.zNão sei.

Sem multipartes, sem corpo grande, sem OOM, sem uso livre.Morreu na nota fonte como uma restrição de design.Não é aleatório.

O preço deve ser claro:Modo remoto não prova usabilidadeEle só pode relatar informações que o servidor cospe voluntariamente. Ocultar o alvo do número da versão, e o resultado será sempre UNKNOWN.

V. Como ler as conclusões

Significado das três conclusões
[VULNERABLE] https://shop.example.net
         http    : 200
         server  : Apache/2.4.62 (Debian)
         powered : PHP/8.4.16
         php     : 8.4.16
         verdict : PHP 8.4.16 < fixed 8.4.27
  • [VULNERÁVEL] A versão foi lida e inferior à versão restaurada.
  • [PASS] A versão foi lida e é maior ou igual à versão restaurada.
  • [GARANDO] As instruções de atenuação provisórias não foram estabelecidas como sugerido.
  • [Desconhecido] Provas insuficientes.Não é seguro, não é conhecido.

Esta distinção é onde toda a ferramenta é mais valiosa. A maioria dos scanners só dá vermelho, amarelo e verde, e então você acha que está por toda a tela.O DESCONHECIDO deve ser considerado por-fazerDesligue a versão oculta, execute no recipiente -- local, ou faça logon na máquina.

Seis, quatro buracos, um a mais do que o outro.

Quatro notas usando php2shell-udit

Tubulação 1: DESCONHECIDO

O host que escondeu o número da versão sempre relatará UNKNOWN. Certifica-te que só está no mainframe. --localNão sei.

Bolso 2: Lançamento é mal relatado.

Debian / Ubuntu / RHEL / Alpine liga regularmente em patches de segurança, masNão Saltar o Número da VersãoNão sei. O resultado é a máquina completa, como parece.

Não entres em pânico até veres o vermelho.

apt changelog php8.4
rpm -q --changelog php-8.4 | head -50

Este passo, ou não fazê-lo, seria nada mais do que uma escalada; seria também um erro de cálculo, que é a verdadeira necessidade de uma atualização.

Poço 3: Também é solicitada uma CABEÇA

Estará no diário um do outro e será escrito pela WAF. Varrer sem autorização escrita é, por natureza, uma detecção não autorizada - uma lei como a CFAA, a CMA 1990 do Reino Unido.

Preciso de autorização para limpar os bens da minha empresa.Em particular, contas intersectoriais, cross-sub-empresa, baseadas na nuvem. Não penses que "estou só a olhar para uma cabeça de resposta" não conta.

Bolso 4:-local só verificar a máquina.

O PHP é executado no contêiner, roda no contêiner ou o usa no host. --remote A porta que foi mapeada. O anfitrião corre. --local Se você não consegue encontrar o PHP no contêiner, você terá um UNKNOWN -- o UNKNOWN realmente não sabe, não o contêiner é seguro.

Seven, descobre que há um problema, e depois?

O patch é o único reparo completo.O resto está a sangrar.

# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php

# RHEL / Fedora
sudo dnf upgrade 'php*'

# Alpine
sudo apk upgrade php83 php84

Atualização: 8.2 ramificação para 8.2.358.3 a 8.3.36É 8.4. 8.4.27São 8.5. 8.5.12Não sei. 8.1 e mais além, apenas relatório de nível de fonte.

Se não conseguir um remendo, faça isto primeiro e comece tudo de novo.

; CVE-2026-109619
session.upload_progress.enabled = 0

; CVE-2026-109618
memory_limit = -1

; 仅 PHP 8.5
fatal_error_backtraces = 0
  • session.upload_progress.enabled=0 Para ser escrito em php.ini, ferramenta FPM ou configuração do servidor,Tem de ser eficaz antes do pedido.Não sei. É tarde demais.
  • memory_limit=-1 Preciso dele. php_admin_value A configuração de nível de tais aplicações é inalterada, garantindo ao mesmo tempo que não existe nenhum pool/ directório/ aplicação para restaurar o valor limitado.
  • Nunca utilize RLIMIT AS ou RLIMIT DATAAqueles dois vão fazer o Map falhar e voltar a entrar naquele perigoso caminho Longjmp.
  • A mudança deve reiniciar cada trabalhador:systemctl restart php*-fpm apache2 nginxNão sei.Nenhuma reinicialização é nenhuma alteração.

Nenhum destes quatro pode torná-lo seguro, e as próprias autoridades são bastante claras. Eles têm apenas um valor:Antes de o remendar, cubra a porta.

VIII. Uma sequência completa

  1. Verifica-te primeiro.:--localTrês ou cinco segundos, veja a versão e a configuração.
  2. Varredura de lote remotaÉ importante.--remote --file E foge do JSON.
  3. Processamento de classificação: Atualizações VOLNERÁVEIS, reabastecimento ATENÇÃO, identificação desconhecida --Não está fechado, é para ser feito.
  4. Actualização + Reiniciar o Trabalhador: Patches, e então reiniciar todos os FPM/ Apache/ nginx.
  5. Refazer a Autenticação: Corra novamente, confirme verde. Assista ao erro de backport e observe changelog, se necessário.
  6. Entra na linha de água.: Quit Code 2 Construção de falha direta, e da próxima vez ninguém vai se lembrar.

Todo o processo é de dez minutos, e o tempo real é o terceiro passo.Verifica as linhas desconhecidas.Não sei. Mas isso não vai salvá-lo, porque, ao não o fazer, recebes um belo, falso, relatório verde.

O valor do scanner não está a dar-te luz verde, está a forçar-te a admitir onde não sabes.

Repetir o endereço do projeto:Gythub.com/viviopenclaw-code/php2shell-uditNão sei. Leia DISSLAIMER.md antes de ser escrito em chinês.

Última frase me lembra que esta ferramenta é 1.1.0 hoje, a primeira versão pública, um único garfo zero, um pequeno número de códigos, você pode lê-los todos. php2shell_audit.pyNão sei.Olha para o código-fonte., especialmente se você quiser ler o php.ini e a lista de processos com permissão do administrador.