Java: HTTP-Request abfangen

In meinem Tutorial zu sqlmap: Der Spaß mit Datenbanken hatte ich erwähnt, dass ich ein Tool welches in Java geschrieben wurde verwende um die HTTP-Requests abzufangen. Hier möchte ich dieses gerne vorstellen:


Funktionsweise:

Als aller erstes navigieren wir zu einer Webseite von der wir wissen, dass diese eine Login-Page besitzt.
Danach setzen wir in unserem Browser einen Proxy:
IP: 127.0.0.1 (oder: localhost - ich bevorzuge 127.0.0.1)
Port: 8080 (diesen können Sie selbst nachher im Programm-Code anpassen - also ist dieser Variabel)

Dann geben wir Test-Login Informationen ein und klicken auf Einloggen o.ä.
Danach sollte unser Tool den HTTP-Request abgefangen haben.

Das Programm ist im Prinzip sehr sehr simpel, erfüllt aber einen wichtigen Zweck.


Der Source-Code:

Das Programm ist in einer Klasse alle notwendigen Funktionen wurden in dieser implementiert.
(Ich habe mir Mühe gegeben in der Kommentierung, damit es leichter zu verstehen ist):

 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created with IntelliJ IDEA.
 * User: Dominik
 * Time: 7:34 PM
 */
public class ServerForm extends JFrame implements ActionListener {
    String content = "";
    JButton btnSave;

    public ServerForm(){
        try {
            ServerSocket serv = new ServerSocket(8080); //Hören auf eine Verbindung auf Port 8080
            Socket s = serv.accept();
            System.out.println("Accepted!"); // Falls eine Verbindung aktzeptiert wurde ausgeben
            InputStream is = s.getInputStream();


            int line = 0;
            byte[] puffer = new byte[1024]; // 1KiB Puffer an Daten (sollte reichen)

            do{
                line = is.read(puffer);

                if(line > 0) // während is.read in die Variable line ließt muss es größer als 0 sein
                {
                    content += new String(puffer, 0, line) + "\n"; // Das Empfangene in einen String umwandeln
                }
            }while(line > 0);

            InitGUI(); // hier initialisiere ich die GUI (finde ich unter Windows schöner da ich es hasse mit CMD zu arbeiten // unter linux ist das überflüssig)
        }
        catch (IOException e) {
            System.err.println(e.getMessage());
        }
    }

    private void InitGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("HTTP-Request Catcher v0.1 R3DST0RM");

        JTextArea txtAudit = new JTextArea(content);
        btnSave = new JButton("Save this!");
        btnSave.addActionListener(this);

        getContentPane().add(txtAudit, BorderLayout.CENTER);
        getContentPane().add(btnSave, BorderLayout.SOUTH);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        if(actionEvent.getSource() == btnSave){
            try{
                // Hier wird nun der gelesene Request in eine Datei gespeichert mit Hilfe eines FileWriters
                FileWriter fw = null;
                fw = new FileWriter(new File("C:\\post.txt")); // Anpassbar und möglich variabel zu gestalten
                fw.write(content);
                fw.close();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }

        }
    }
   public static void main(String[] args) throws IOException {
     new ServerForm();
   }
}
Sie können es nun beliebig anpassen und erweitern. Wie bereits in meinem Tutorial erwähnt hatte ich zuvor Burpsuite genutzt. Dies aber wieder sein lassen, da ich nun die selbe Funktion in einem schnelleren eigenen Programm gepackt hatte.

Fazit:

Es ist natürlich auch möglich jede andere Art von HTTP-Request abzufangen damit. Oder generell zu sehen was Programme anfordern sofern diese eine Proxy-Option zur Verfügung haben.

Kommentare

Beliebte Posts aus diesem Blog

[ENGLISH] Capture the Flag at UCF - Write Up - Crypto - XORLY

Dr. Evil's Bombe (Binary Bomb Lab) | Teil 1