Capturer la réponse d'un serveur web en Java
par
, 22/04/2020 à 17h54 (1208 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 :
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
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(); } } }
Conformément à l’éthique je me limite au hack sur mes propres pages et sur mes propres serveurs.
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"); } }
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