Voir le flux RSS

Open source et architecture logicielle

Utilisation de java pour le Pentest

Noter ce billet
par , 04/05/2020 à 18h48 (133 Affichages)
Pour faire suite à ce billet, je vous montre aujourd’hui comment utiliser l’objet WebPage pour résoudre un défi de CTF. Le Défi consiste à générer un hash MD5 en un temps record (moins de 5 s)
Voici la page obtenue pour ce défi :
Nom : htbMD5.png
Affichages : 322
Taille : 21,9 Ko
Inutile de dire que : [prendre la chaine en clair et en faire un hash à la main sur un site dédié – copier/coller le hash dans la zone de texte de la page – et cliquer sur submit] nous prendra plus de 5 s.
Il faut donc automatiser ce processus. Pour cela, 6 actions doivent être réalisées :
1/ Extraire de la page HTML la chaine de caractère
2/ Hasher cette chaine avec l’algorithme MD5
3/ créer un JSON de réponse
4/ Obtenir le/les cookies de session pour que le serveur PHP à qui renvoyer le formulaire (le hash) afin qu’il sache que le hash calculé correspond à celui du chalenge.
5/ Renvoyer le formulaire
6/ capturer le flag en retour (seconde réponse du serveur) pour marquer les points

Je ne vous offrirai ici que les 4 premières étapes et dans la 4ème je ne vous donnerez que le cookie PHPSESSID envoyé par le serveur PHP pour sécuriser la session. Néanmoins pour réaliser tout aussi facilement les parties 5 et 6, je pourrai dans un prochain billet ajouter un constructeur à la classe WebPage afin de renvoyer un formulaire (requête de type POST).
Pour le reste, il faudra me le demander si vous êtes intéressé et je fournirai le « write-up » complet une fois que le chalenge sera « retired » du site HTB (éthique oblige).
Voici le résultat attendu pour notre petit défi (étape 1 à 3) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Début de CTF -- mini-chalenge --
Voici la page à traiter : 
<html>
<head>
<title>emdee five for life</title>
</head>
<body style="background-color:powderblue;">
<h1 align='center'>MD5 encrypt this string</h1><h3 align='center'>9BpkJPYlOF69D4uN9Gjv</h3><center><form action="" method="post">
<input type="text" name="hash" placeholder="MD5" align='center'></input>
</br>
<input type="submit" value="Submit"></input>
</form></center>
</body>
</html>
----------------------------------------------------
La chaine en clair = 9BpkJPYlOF69D4uN9Gjv
Le hash = f58271057951dd0470593b0083176956
Les paramètres à passer dans la prochaine requête post = {" hash ":"f58271057951dd0470593b0083176956"}
le cookie envoyé par le serveur pour rester dans la session : [PHPSESSID=6c0etptg15a85n87uceo53r8b3; path=/]
Fin de CTF -- mini-chalenge --
Je vais détailler les étapes 1 et 4 car elles illustrent l’intérêt d’utiliser JAVA et cette classe dans les pentests en particulier et la sécurité en général

Etape 1 : Extraire la chaine de caractère à hasher
La chaine se trouve ici dans la page : <h3 align='center'>9BpkJPYlOF69D4uN9Gjv</h3><center><form action="" method="post">. Il faudra à l’aide des expressions régulières prendre la chaine entre <h3 align='center'> et </h3>

Etape 4 : Capture du Cookie de session
Le cookie de session est dans la propriété header de ma classe. Ce header est une liste (Map) et la clé (index) du cookie est « set-cookie ».
Voici le code source pour résoudre ce chalenge
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
public class Test {
	public static void main(String[] args) {
		System.out.println("Début de CTF -- mini-chalenge --");
		WebPage page = new WebPage("http://docker.hackthebox.eu:30832/");
		String body = page.getBody();
		System.out.println("Voici la page à traiter : \n" + body);
		System.out.println("----------------------------------------------------");
		// étape 1 : extraction de la chaine à hasher
		Pattern pattern;
		Matcher matcher;
		pattern = Pattern.compile("<h3 align='center'>([^<]+)</h3>");
		matcher = pattern.matcher(body);
		String phrase = null;
		while(matcher.find()) phrase = matcher.group(1);
		//étape 2 : algorithme de hash MD5
		String hash = null;	
		try {
			byte[] byteChaine = phrase.getBytes(StandardCharsets.UTF_8);
			MessageDigest md = MessageDigest.getInstance("MD5");
			byte[] hashInBytes= md.digest(byteChaine);
			StringBuilder sb = new StringBuilder();
	        for (byte b : hashInBytes) {
	            sb.append(String.format("%02x", b));
	        }
	        hash = sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		//étape 3 : création du JSON de réponse
		System.out.println("La chaine en clair = " + phrase);
		System.out.println("Le hash = " + hash);
		String json = new StringBuilder()
				.append("{")
                .append("\" hash \":\"" + hash + "\"")
                .append("}").toString();
		//étape 4 : capture du cookie de session
		System.out.println("Les paramètres à passer dans la prochaine requête post = " + json);
		System.out.println("le cookie envoyé par le serveur pour rester dans la session : " + page.getHeader().get("set-cookie"));
		System.out.println("Fin de CTF -- mini-chalenge --");
	}
}

Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Viadeo Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Twitter Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Google Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Facebook Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Digg Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Delicious Envoyer le billet « Utilisation de java pour le Pentest » dans le blog MySpace Envoyer le billet « Utilisation de java pour le Pentest » dans le blog Yahoo

Mis à jour 04/05/2020 à 20h38 par autran

Tags: java, sécurité
Catégories
Java

Commentaires