Voir le flux RSS

Open source et architecture logicielle

Capturer la réponse d'un serveur web en Java

Noter ce billet
par , 22/04/2020 à 17h54 (227 Affichages)
Lors d’un pentest web il est intéressant de voir le contenu de ce qui est échangé entre le serveur et le navigateur. Pas uniquement le body mais également le header et le statut de la réponse du serveur. Et pour tout ceux qui aiment le Java plus que les fenêtres de Burp, il est intéressant de pouvoir mettre toute ces données dans un objet Java.
Il ainsi possible de faire directement en java des directement traitements sur le contenu (body et header) et de développer (dans un langage propre) une batterie d’outils pour de la crypto ou de la stegano.

Dans ce premier billet je vous propose de poser les bases d’une classe Java que l’on construit avec l’URL du site à évaluer et qui stocke les paramètres de la réponse du serveur dans un format exploitable :
- String pour le Body
- Int pour le StatusCode
- Et une collection pour les composants du header

En réalité, cette classe s’appuie sur la nouvelle API HTTP du JDK en standard depuis java 11 :
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
public class WebPage {
	private int statusCode;
	private Map<String,List<String>> header;
	private String body;
	private String url;
	public int getStatusCode() {
		return statusCode;
	}
	public Map<String, List<String>> getHeader() {
		return header;
	}
	public String getBody() {
		return body;
	}
	public WebPage(String URL) {
		this.url = URL;
		HttpClient httpClient = HttpClient.newHttpClient();
		HttpRequest request = HttpRequest.newBuilder().uri(URI.create(this.url)).GET().build();
		HttpResponse response;
		try {
			response = httpClient.send(request, BodyHandlers.ofString());
			this.statusCode = response.statusCode();
		    header = response.headers().map();
		    body = response.body().toString();
		} catch (IOException | InterruptedException e) {
		      e.printStackTrace();
	    }
	}
}
Elle s’exploite de cette façon :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public class Test {
	public static void main(String[] args) {
		System.out.println("Début de traitement");
		WebPage page = new WebPage("https://marcautran.developpez.com/");
		System.out.println("Status  : " + page.getStatusCode());
		System.out.println("Headers : " + page.getHeader().get("last-modified"));
		System.out.println("Body    : " + page.getBody());
		System.out.println("Fin de traitement");
	}
}
Conformément à l’éthique je me limite au hack sur mes propres pages et sur mes propres serveurs.
Mais plus sérieusement on peut voir que j’ai choisi d’afficher le body (le code HTML de la page) et la date de dernière modification de cette page sur le serveur. Dans un prochain billet, je montrerai comment enrichir cette classe pour construire une requête vers le serveur. Et oui, Burp ne nous apporte que sa couche graphique… oui un peu plus si on prend Burp Suite pro

Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Viadeo Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Twitter Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Google Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Facebook Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Digg Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Delicious Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog MySpace Envoyer le billet « Capturer la réponse d'un serveur web en Java » dans le blog Yahoo

Tags: java, web
Catégories
Java , Développement Web

Commentaires

  1. Avatar de lolosla
    • |
    • permalink
    merci bien pratique