mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 17:16:10 +00:00
180 lines
13 KiB
Markdown
180 lines
13 KiB
Markdown
# Instalar Certificado Burp
|
|
|
|
<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**? 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 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>
|
|
|
|
## Em uma Máquina Virtual
|
|
|
|
Primeiro, você precisa baixar o certificado Der do Burp. Você pode fazer isso em _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_
|
|
|
|
![](<../../.gitbook/assets/image (367).png>)
|
|
|
|
**Exporte o certificado no formato Der** e vamos **transformá-lo** em uma forma que o **Android** será capaz de **entender**. Note que **para configurar o certificado burp na máquina Android em AVD** você precisa **executar** esta máquina **com** a opção **`-writable-system`**.\
|
|
Por exemplo, você pode executá-lo assim:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
|
```
|
|
{% endcode %}
|
|
|
|
Em seguida, para **configurar o certificado do Burp**, faça o seguinte:
|
|
|
|
{% code overflow="wrap" %}
|
|
```bash
|
|
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
|
|
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
|
|
mv burp_cacert.pem $CERTHASHNAME #Correct name
|
|
adb root && sleep 2 && adb remount #Allow to write on /syste
|
|
adb push $CERTHASHNAME /sdcard/ #Upload certificate
|
|
adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correct location
|
|
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
|
|
adb reboot #Now, reboot the machine
|
|
```
|
|
{% endcode %}
|
|
|
|
Uma vez que a **máquina terminar de reiniciar**, o certificado do Burp estará em uso por ela!
|
|
|
|
## Usando Magisc
|
|
|
|
Se você **fez root no seu dispositivo com Magisc** (talvez um emulador) e não consegue seguir os **passos** anteriores para instalar o certificado do Burp porque o **sistema de arquivos é somente leitura** e você não pode remontá-lo como gravável, há outra maneira.
|
|
|
|
Explicado neste [**vídeo**](https://www.youtube.com/watch?v=qQicUW0svB8), você precisa:
|
|
|
|
1. **Instalar um certificado CA**: Basta **arrastar e soltar** o certificado DER do Burp **alterando a extensão** para `.crt` no celular para que ele seja armazenado na pasta Downloads e vá para `Instalar um certificado` -> `Certificado CA`
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
|
|
|
* Verifique se o certificado foi armazenado corretamente indo para `Credenciais confiáveis` -> `USUÁRIO`
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
|
|
|
2. **Torná-lo confiável pelo sistema**: Baixe o módulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (um arquivo .zip), **arraste e solte** no celular, vá para o aplicativo **Magics** no celular na seção **`Módulos`**, clique em **`Instalar a partir do armazenamento`**, selecione o módulo `.zip` e uma vez instalado, **reinicie** o celular:
|
|
|
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
|
|
|
* Após reiniciar, vá para `Credenciais confiáveis` -> `SISTEMA` e verifique se o certificado do Postswigger está lá
|
|
|
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
|
|
|
## Pós Android 14
|
|
|
|
Mudanças:
|
|
|
|
* Até agora, os certificados CA confiáveis pelo sistema ficavam em **`/system/etc/security/cacerts/`**. Em um emulador AOSP padrão, eles poderiam ser **modificados diretamente com acesso root** com uma configuração mínima, tendo **efeito imediato em todos os lugares**.
|
|
* No Android 14, os certificados CA confiáveis pelo sistema geralmente ficarão em **`/apex/com.android.conscrypt/cacerts`**, e todo o **`/apex` é imutável**.
|
|
* Esse caminho de certificados do APEX não pode ser remontado como gravável - as remontagens simplesmente falham. Na verdade, mesmo que você desmonte todo o caminho de um shell root, os aplicativos ainda podem ler seus certificados normalmente.
|
|
* A técnica alternativa de **montar um diretório tmpfs por cima também não funciona** - mesmo que isso signifique que `ls /apex/com.android.conscrypt/cacerts` possa retornar nada (ou qualquer outra coisa que você queira), os aplicativos ainda verão os mesmos dados originais.
|
|
* Porque a montagem `/apex` é [explicitamente montada](https://cs.android.com/android/platform/superproject/main/+/main:system/core/init/mount\_namespace.cpp;l=97;drc=566c65239f1cf3fcb0d8745715e5ef1083d4bd3a) **com propagação PRIVADA**, para que todas as alterações nas montagens dentro do caminho `/apex` nunca sejam compartilhadas entre processos.
|
|
|
|
Isso é feito pelo processo `init`, que inicia o sistema operacional, que então inicia o [processo Zygote](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote) (com um novo namespace de montagem copiado do pai, incluindo sua própria montagem privada `/apex`), que por sua vez inicia cada processo de aplicativo sempre que um aplicativo é lançado no dispositivo (que por sua vez copia a mesma montagem privada `/apex`).
|
|
|
|
### Remontando recursivamente os pontos de montagem
|
|
|
|
* Você pode remontar `/apex` manualmente, removendo a propagação PRIVADA e tornando-o gravável (ironicamente, parece que remover completamente a propagação privada _propaga_ em todos os lugares)
|
|
* Você copia todo o conteúdo de `/apex/com.android.conscrypt` para outro lugar
|
|
* Em seguida, desmonta completamente `/apex/com.android.conscrypt` - removendo a montagem somente leitura que fornece imutavelmente este módulo
|
|
* Em seguida, copie o conteúdo de volta, para que ele fique dentro da montagem `/apex` diretamente, onde pode ser modificado (você precisa fazer isso rapidamente, pois [aparentemente](https://infosec.exchange/@g1a55er/111069489513139531) você pode ver falhas caso contrário)
|
|
* Isso deve ter efeito imediato, mas eles recomendam matar o `system_server` (reiniciar todos os aplicativos) para que tudo volte a um estado consistente
|
|
```bash
|
|
# Create a separate temp directory, to hold the current certificates
|
|
# Otherwise, when we add the mount we can't read the current certs anymore.
|
|
mkdir -p -m 700 /data/local/tmp/tmp-ca-copy
|
|
|
|
# Copy out the existing certificates
|
|
cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/
|
|
|
|
# Create the in-memory mount on top of the system certs folder
|
|
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
|
|
|
# Copy the existing certs back into the tmpfs, so we keep trusting them
|
|
mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/
|
|
|
|
# Copy our new cert in, so we trust that too
|
|
mv $CERTIFICATE_PATH /system/etc/security/cacerts/
|
|
|
|
# Update the perms & selinux context labels
|
|
chown root:root /system/etc/security/cacerts/*
|
|
chmod 644 /system/etc/security/cacerts/*
|
|
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
|
|
|
|
# Deal with the APEX overrides, which need injecting into each namespace:
|
|
|
|
# First we get the Zygote process(es), which launch each app
|
|
ZYGOTE_PID=$(pidof zygote || true)
|
|
ZYGOTE64_PID=$(pidof zygote64 || true)
|
|
# N.b. some devices appear to have both!
|
|
|
|
# Apps inherit the Zygote's mounts at startup, so we inject here to ensure
|
|
# all newly started apps will see these certs straight away:
|
|
for Z_PID in "$ZYGOTE_PID" "$ZYGOTE64_PID"; do
|
|
if [ -n "$Z_PID" ]; then
|
|
nsenter --mount=/proc/$Z_PID/ns/mnt -- \
|
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
|
fi
|
|
done
|
|
|
|
# Then we inject the mount into all already running apps, so they
|
|
# too see these CA certs immediately:
|
|
|
|
# Get the PID of every process whose parent is one of the Zygotes:
|
|
APP_PIDS=$(
|
|
echo "$ZYGOTE_PID $ZYGOTE64_PID" | \
|
|
xargs -n1 ps -o 'PID' -P | \
|
|
grep -v PID
|
|
)
|
|
|
|
# Inject into the mount namespace of each of those apps:
|
|
for PID in $APP_PIDS; do
|
|
nsenter --mount=/proc/$PID/ns/mnt -- \
|
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts &
|
|
done
|
|
wait # Launched in parallel - wait for completion here
|
|
|
|
echo "System certificate injected"
|
|
```
|
|
### Bind-mounting através do NSEnter
|
|
|
|
* Primeiro, precisamos configurar um diretório gravável em algum lugar. Para facilitar a compatibilidade com a abordagem existente, estou fazendo isso com uma montagem `tmpfs` sobre o diretório de certificados do sistema não-APEX (ainda presente):
|
|
|
|
```bash
|
|
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
|
```
|
|
* Em seguida, coloque os certificados CA de interesse neste diretório (por exemplo, você pode querer copiar todos os padrões do diretório de certificados CA `/apex/com.android.conscrypt/cacerts/` existente) e defina as permissões e rótulos SELinux apropriadamente.
|
|
* Em seguida, use `nsenter` para entrar no namespace de montagem do Zygote e faça um bind mount deste diretório sobre o diretório APEX:
|
|
|
|
```bash
|
|
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- \
|
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
|
```
|
|
|
|
O processo Zygote inicia cada aplicativo, copiando seu namespace de montagem para fazer isso, então isso garante que todos os aplicativos recém-iniciados (tudo iniciado a partir de agora) usarão isso.
|
|
* Em seguida, use `nsenter` para entrar no namespace de cada aplicativo já em execução e faça o mesmo:
|
|
|
|
```bash
|
|
nsenter --mount=/proc/$APP_PID/ns/mnt -- \
|
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
|
```
|
|
|
|
Alternativamente, se você não se importar com a experiência do usuário desajeitada, você deve ser capaz de fazer o bind mount no `init` em si (PID 1) e depois executar `stop && start` para reiniciar suavemente o sistema operacional, recriando todos os namespaces e propagando suas alterações em todos os lugares (mas pessoalmente eu me importo com a reinicialização desajeitada, então estou ignorando completamente essa rota).
|
|
|
|
<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 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 para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|