Étape 5 - Usage avancé 🚀
🎯 L'objectif ici est de simuler la connexion en oauth2 d'un formulaire.
Simulation d'un formulaire
Nos agents nous informent que la dernière pass-phrase et le code de décryptage sont protégés derrière un formulaire caché accessible via l'URL https://playwright-site-madd.vercel.app/wpftw/bluescreenofthedeath.
Malheureusement, nous avons dû exfiltrer l'agent qui n'a pas réussi à obtenir un login et un password, mais a obtenu un jeton magique.
Afin d'éviter tout soupçon de la part de leur système, vous devez être invisibles ! Pour cela, vous allez utiliser les route playwright.
Éditez le fichier de test src/chapter_5.spec.ts
:
- Dans le hook
test.beforeEach
, qui est exécuté avant chaque test, ajoutez une route playwright surhttps://accounts.google.com/ServiceLogin/webreauth
. Elle devra faire une redirection 302 qui ajoutera le query paramtoken=<3WindowsVista<3
Solution
test.beforeEach(async ({ page }) => {
await page.route('https://accounts.google.com/ServiceLogin/webreauth', (route) => {
route.fulfill({
status: 302,
headers: {
Location: 'https://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath?token=<3WindowsVista<3',
},
});
});
});
test.beforeEach(async ({ page }) => {
await page.route('https://accounts.google.com/ServiceLogin/webreauth', (route) => {
route.fulfill({
status: 302,
headers: {
Location: 'https://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath?token=<3WindowsVista<3',
},
});
});
});
- Dans le test nommé
it should get the last secret phrase
, naviguez vershttps://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath
Solution
await page.goto('https://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath');
await page.goto('https://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath');
- Remplissez les champs Login et Password avec des valeurs de votre choix.
Solution
await page.getByLabel('Login').fill('your.name');
await page.getByLabel('Password').fill('pwd1');
await page.getByLabel('Login').fill('your.name');
await page.getByLabel('Password').fill('pwd1');
- Cliquez sur le bouton de login
Solution
await page.getByText('Connect').click();
await page.getByText('Connect').click();
- Attendez qu'une navigation ait lieu sur
https://playwright-site-madd.vercel.app/_wpftw_/bluescreenofthedeath
Solution
await page.waitForURL(/^https:\/\/playwright-site-madd.vercel.app\/_wpftw_\/bluescreenofthedeath/);
await page.waitForURL(/^https:\/\/playwright-site-madd.vercel.app\/_wpftw_\/bluescreenofthedeath/);
- Vérifiez que le titre sur la page rendue est bien
Your agent page is now unlocked
Solution
await expect(page.getByRole('heading')).toHaveText('Your agent page is now unlocked');
await expect(page.getByRole('heading')).toHaveText('Your agent page is now unlocked');
- Faites ensuite un screenshot pour observer le contenu de la page
Solution
await expect(page).toHaveScreenshot();
await expect(page).toHaveScreenshot();
Notez précieusement dans src/passphrases.txt
le titre de la page ainsi que le key code.
Bravo ! Vous avez réussi à récupérer l'ensemble des passphrases et des codes ! Il est maintenant tant de déchiffrer tout cela
Décoder le tout
La clé que vous avez récupérée correspond à la position de chaque mot dans chacun des phrases.
Par exemple, si la clé est 3 4 1+2 3 2
, alors la phrase secrète sera :
<le 3ème mot de la phrase de la phase 1> <le 4ème mot de la phrase de la phase 2> <le 1er et le 2nd mot de la phrase de la phase 3> <le 3ème mot de la phrase de la phase 4> <le 2nd mot de la phrase de la phase 5>
Décoder le tout à main pour trouver les codes secrets de Microsoft!... ou lancer simplement le script npm run decode
Vous avez maintenant accès à toute la puissance de playwright et c'est ce que nous allons faire dans la dernière phase du plan, la phase 6!