JAVA und JAVA–Applets als Passwortabfrage

#0
26.07.2005, 01:10
...neu hier

Beiträge: 3
#1 Hallo Leute

Unzweifelhaft haben hier viele von euch ein ganzes Stück mehr Wissen als ich. Ich hoffe ihr werdet trotzdem auf meine Frage eingehen. Besten Dank schon mal im Voraus!

Also:
Habe mal so zum Spass und ohne viel Wissen angefangen ein bisschen bei diesen Hacking-Spielen (http://board.protecus.de/t5919.htm) mitzuknobeln. Jetzt sagt mir aber ein Bekannter, dass das alles Pippifax sei und dass sich eine gut gemachte Passwortabfrage mit Java-Applets nicht knacken liesse. Als Beweis(versuch) setzte er mir eine Passwortabfrage vor, von den ich unten den Quellcode gepostet hab (vom Server runtergeladen und decompiled).

Wenn ich mir den angehängten Quelltext anschau, dann muss ich ihm schon fast zustimmen... ich schnall nicht mal den Aufbau des Skripts, geschweige denn eine Möglichkeit, irgendwo was zu finden.

Ich hoff ihr habt was für mich...würd mich nerven, wenn ich ihm (wie meistens) recht geben muss! ;)

Code

// Source File Name:   pass1.java

import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.EventObject;

public class pass1 extends Applet
    implements ActionListener
{

    public pass1()
    {
        inuser = new String[22];
        totno = 0;
        countConn = null;
        countData = null;
        inURL = null;
        txtlogin = new TextField();
        label1 = new Label();
        label2 = new Label();
        label3 = new Label();
        txtpass = new TextField();
        lblstatus = new Label();
        ButOk = new Button();
        ButReset = new Button();
        lbltitle = new Label();
    }

    void ButOk_ActionPerformed(ActionEvent actionevent)
    {
        boolean flag = false;
        for(int i = 1; i <= totno / 2; i++)
            if(txtlogin.getText().trim().toUpperCase().intern() == inuser[2 * (i - 1) + 2].trim().toUpperCase().intern() && txtpass.getText().trim().toUpperCase().intern() == inuser[2 * (i - 1) + 3].trim().toUpperCase().intern())
            {
                lblstatus.setText("Login Success, Loading..");
                flag = true;
                String s = inuser[1].trim().intern();
                String s1 = getParameter("targetframe");
                if(s1 == null)
                    s1 = "_self";
                try
                {
                    finalurl = new URL(getCodeBase(), s);
                }
                catch(MalformedURLException _ex)
                {
                    lblstatus.setText("Bad URL");
                }
                getAppletContext().showDocument(finalurl, s1);
            }

        if(!flag)
            lblstatus.setText("Invaild Login or Password");
    }

    void ButReset_ActionPerformed(ActionEvent actionevent)
    {
        txtlogin.setText("");
        txtpass.setText("");
    }

    public void actionPerformed(ActionEvent actionevent)
    {
        Object obj = actionevent.getSource();
        if(obj == ButOk)
            ButOk_ActionPerformed(actionevent);
        else
        if(obj == ButReset)
            ButReset_ActionPerformed(actionevent);
    }

    public void destroy()
    {
        ButOk.setEnabled(false);
        ButReset.setEnabled(false);
        txtlogin.setVisible(false);
        txtpass.setVisible(false);
    }

    public void inFile()
    {
        StringBuffer stringbuffer = new StringBuffer();
        String s = "";
        boolean flag = false;
        try
        {
            countConn = inURL.openStream();
            countData = new BufferedReader(new InputStreamReader(countConn));
            String s1;
            while((s1 = countData.readLine()) != null)
                if(totno < 21)
                {
                    totno = totno + 1;
                    inuser[totno] = s1;
                    s1 = "";
                    boolean flag1 = false;
                } else
                {
                    lblstatus.setText("Cannot Exceed 10 users, Applet fail start!");
                    destroy();
                }
        }
        catch(IOException ioexception)
        {
            getAppletContext().showStatus("IO Error:" + ioexception.getMessage());
        }
        try
        {
            countConn.close();
            countData.close();
        }
        catch(IOException ioexception1)
        {
            getAppletContext().showStatus("IO Error:" + ioexception1.getMessage());
        }
    }

    public void init()
    {
        setLayout(null);
        setSize(361, 191);
        add(txtlogin);
        txtlogin.setBounds(156, 72, 132, 24);
        label1.setText("Please Enter Login Name & Password");
        label1.setAlignment(1);
        add(label1);
        label1.setFont(new Font("Dialog", 1, 12));
        label1.setBounds(41, 36, 280, 24);
        label2.setText("Login");
        add(label2);
        label2.setFont(new Font("Dialog", 1, 12));
        label2.setBounds(75, 72, 36, 24);
        label3.setText("Password");
        add(label3);
        add(txtpass);
        txtpass.setEchoChar('*');
        txtpass.setBounds(156, 108, 132, 24);
        lblstatus.setAlignment(1);
        label3.setFont(new Font("Dialog", 1, 12));
        label3.setBounds(75, 108, 57, 21);
        add(lblstatus);
        lblstatus.setFont(new Font("Dialog", 1, 12));
        lblstatus.setBounds(14, 132, 344, 24);
        ButOk.setLabel("OK");
        add(ButOk);
        ButOk.setFont(new Font("Dialog", 1, 12));
        ButOk.setBounds(105, 156, 59, 23);
        ButReset.setLabel("Reset");
        add(ButReset);
        ButReset.setFont(new Font("Dialog", 1, 12));
        ButReset.setBounds(204, 156, 59, 23);
        lbltitle.setAlignment(1);
        add(lbltitle);
        lbltitle.setFont(new Font("Dialog", 1, 12));
        lbltitle.setBounds(12, 14, 336, 24);
        String s = getParameter("title");
        lbltitle.setText(s);
        ButOk.addActionListener(this);
        ButReset.addActionListener(this);
        infile = new String("in.txt");
        try
        {
            inURL = new URL(getCodeBase(), infile);
        }
        catch(MalformedURLException _ex)
        {
            getAppletContext().showStatus("Bad Counter URL:" + inURL);
        }
        String s1 = getParameter("author");
        if(s1.trim().toUpperCase().intern() == "JACKY LEUNG")
            inFile();
    }

    private URL finalurl;
    String infile;
    String inuser[];
    int totno;
    InputStream countConn;
    BufferedReader countData;
    URL inURL;
    TextField txtlogin;
    Label label1;
    Label label2;
    Label label3;
    TextField txtpass;
    Label lblstatus;
    Button ButOk;
    Button ButReset;
    Label lbltitle;
}
Offtopic -> Boah... dieses Blöde Ding ist ja ne Elle lang... Ich hoff das liest überhaupt einer ;)
Dieser Beitrag wurde am 26.07.2005 um 01:22 Uhr von PEKA_m editiert.
Seitenanfang Seitenende
26.07.2005, 01:40
Member
Avatar Gool

Beiträge: 4730
#2 Ja klar, die Sachen mit JavaScript sind auch Pipifax. JavaScript lässt sich aber nicht mit Java vergleichen, da es zwei grundsätzlich unterschiedliche Dinge sind. Wenn Du eine Passwortkontrolle mit einem Java-Applet gestaltest, ist sie mit Sicherheit sicherer als eine Passwortabfrage per JavaScript - egal wie einfallsreich auch immer. Das liegt in der Natur der Dinge. Ein Java-Applet ist ein eigenständiges Programm, während JavaScript nur ein einfacher Code ist, der damals von Netscape eingeführt wurde, um Webseiten dynmisch zu gestalten (und mit Java überhaupt nichts zu tun hat, abgesehen vom irreführenden Namen).
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
26.07.2005, 01:48
...neu hier

Themenstarter

Beiträge: 3
#3 Danke erstma. Dann hab ich also von Fischen gesprochen und er hat mir einen Vogel als Gegenbeispiel geliefert! ;-)

Aber ich nehm an, dass die Applets ebenfalls nicht annähernd 100% Schutz bieten, oder?

Zum Code oben nochmals:
Kann mir jemand sagen, wie der grob aufgebaut ist? Ich seh daraus nicht mal, wo z.Bsp. die eingegeben Accountdaten mit den richtigen Zugangsdaten verglichen werden. Mit welcher Datei aufm Server wird das Zeug verglichen? Oder kann man diese Abfrage einfach umgehen? :-?


---
EDIT:
Meine Fresse... tut mir leid, dass ich euch mit dem Spass belästigt hab. Das lustige File heisst in.txt und liegt einfach ungeschützt und unverschlüsselt auf dem Server und kann direkt mit dem Brwoser geöffnet werden. Der wird sich freuen! :-D

Grosses Sorry!
Dieser Beitrag wurde am 26.07.2005 um 01:59 Uhr von PEKA_m editiert.
Seitenanfang Seitenende
28.10.2005, 15:03
...neu hier

Beiträge: 2
#4 hmmm hab da mal ne frage was muss denn in der in.txt datei stehen?????
also wasweiß ich aber wie??könnt ich gut für meine hp brauchen
Seitenanfang Seitenende
28.10.2005, 16:02
...neu hier

Themenstarter

Beiträge: 3
#5 die datei auf der seite, die ich angeschaut habe, lautet wie folgt:

Code

start.html
intranet
rwirwi
rem test
rem testok
Seitenanfang Seitenende
28.10.2005, 16:05
...neu hier

Beiträge: 2
#6 und daraus soll ich schlau werden????
kannst du bitte das passwort passwort nennen und den namen (falls es einen gibt) login nennen????
wär voll nett und wie bind ich das dann in die homepage ein???
wär voll nett wenn ihr mir helft!!!
ich hab nicht sioooooooooo große erfahrung^^


/edit:
Danke hat sich schon erledigt hab was besseres gefunden!!!
Dieser Beitrag wurde am 28.10.2005 um 18:12 Uhr von MainP editiert.
Seitenanfang Seitenende
29.10.2005, 17:09
Member
Avatar Gool

Beiträge: 4730
#7 Aber so wie es auschaut, ist "intranet" der Benutzername, "rwirwi" das Passwort, "start.html" die Datei, die dann aufgerufen wird. Die letzten beiden Zeilen sind nur dazu da, debug-Meldungen zu unterdrücken.

Sicher ist dieser Schutz aber auch nicht, da man die start.html auch einfach so aufrufen könnte. Besseren Schutz bietet ein Script mit PHP, welches auf jeder Seite eingebunden wird, um zu überprüfen, ob eine gültige Log-In-Session (oder Cookie) existiert. Am sichersten ist IMHO ein Passwortschutz mit htaccess.
__________
Dies ist eine Signatur! Persönlicher Service: Du kommst aus Berlin? Dann melde Dich per PN bei mir, evtl. können wir einen Termin vereinbaren.
Der Grabsteinschubser
Seitenanfang Seitenende
29.10.2005, 17:35
...neu hier

Beiträge: 9
#8 Sicher ist das bestimmt nicht,
auf den ersten Blick sieht es so aus, als ob das applet per HTTP die Passwort/Benutzer Datei lädt, und dann überprüft, ob die Kombination, die eingegeben wurde, vorhanden ist.
Hat man den Quellcode des Applets nicht,
benutzt man den beim JDK vorhandenen decompiler javap (Aufruf: javap -verbose), so findet man auch den Namen der Passwort/Benutzer Datei. Bei mir ist die entspechende Zeile "489: ldc #87; //String in.txt".
Lädt man nun per HTTP die Datei vom Server, hat man sämtliche Benutzer und ihre Passwörter.
Ist nur etwas komplizierter als mit Javascript.
Seitenanfang Seitenende
01.11.2005, 11:12
...neu hier

Beiträge: 1
#9 MD5 benutzen?


Grml min. 18 Zeichen.....
Seitenanfang Seitenende
Um auf dieses Thema zu ANTWORTEN
bitte erst » hier kostenlos registrieren!!

Folgende Themen könnten Dich auch interessieren: